Как использовать моментальный снимок LVM для резервного копирования данных в Linux

В прошлой статье мы рассмотрели основные принципы LVM. В этой статье мы сосредоточимся на том, как защитить данные с помощью создания снимков LVM.

Есть два варианта защиты данных от сбоев диска или других проблем. Вы можете делать полные или инкрементные резервные копии и хранить N-количество копий. В качестве альтернативы с помощью LVM вы можете создать том моментальных снимков, который будет делать моментальные снимки при внесении изменений в исходный том.

LVM моментальные снимки используют механизм копирования при записи для создания моментальных снимков. Первоначально, когда вы создаете том моментальных снимков, он будет содержать некоторые метаданные об исходном логическом томе и сведения о его блоках. Когда вы вносите какие-либо изменения в исходный том, LVM будет отслеживать изменения и делать моментальный снимок измененных блоков. Здесь LVM просто сохраняет заблокированные изменения на том моментального снимка.

Тестовая лабораторя

Я подключил два новых диска к своей машине Ubuntu, которые будут использоваться в демонстрационных целях. Если вы хотите узнать, как работает следующая команда в деталях, ознакомьтесь с нашим руководством введение в LVM.

lsblk /dev/sd[cd]
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdc    8:32   0  10G  0 disk 
sdd    8:48   0  15G  0 disk 

Оба диска инициализируются как физический том.

sudo pvcreate /dev/sd[cd]
Physical volume "/dev/sdc" successfully created.
Physical volume "/dev/sdd" successfully created.

Группа томов с именем ostechnix_lab создается из обоих инициализированных физических томов.

sudo vgcreate ostechnix_lab /dev/sd[cd]
Volume group "ostechnix_lab" successfully created

Логический том с именем lab создается из группы томов ostechnix_lab. Размер логического тома составляет 5GB.

sudo lvcreate -L 5GB -n lab ostechnix_lab
Logical volume "lab" created.

Том форматируется файловой системой ext4 и монтируется на /opt/lvm_lab/.

sudo mkfs.ext4 /dev/ostechnix_lab/lab
mkdir /opt/lvm_lab
sudo mount /dev/ostechnix_lab/lab /opt/lvm_lab/

После создания логического тома имеется почти 20GB свободного пространства.

sudo vgdisplay
--- Volume group ---
VG Name               ostechnix_lab
System ID             
Format                lvm2
Metadata Areas        2
Metadata Sequence No  2
VG Access             read/write
VG Status             resizable
MAX LV                0
Cur LV                1
Open LV               1
Max PV                0
Cur PV                2
Act PV                2
VG Size               24.99 GiB
PE Size               4.00 MiB
Total PE              6398
Alloc PE / Size       1280 / 5.00 GiB
Free  PE / Size       5118 / 19.99 GiB
VG UUID               LCGSEd-WTnT-lUEN-N0a8-QWhI-TqDi-lUZExd

Создание моментального снимка

Я собираюсь создать моментальный снимок размером 5 ГБ. Выполните следующую команду для создания тома моментальных снимков:

sudo lvcreate -L +5G --snapshot --name snap /dev/mapper/ostechnix_lab-lab
Logical volume "snap" created.

Давайте я расскажу, что делает каждый флаг в приведенной выше команде.

  • -L +5G — Значение пространства должно быть передано флагу -L. Здесь выделено 5 ГБ.
  • —snapshot — Этот флаг создает том как snapshot том. Вы также можете использовать -s вместо флага --snapshot.
  • —name — Имя, присваиваемое тому снапшота. В моем случае snap – это имя моего тома моментальных снимков.
  • /dev/mapper/ostechnix_lab-lab — Это расположение исходного тома.

Выполните команду lvs, чтобы увидеть снимок тома. Посмотрите на раздел origin из приведенного ниже вывода. Он указывает на исходный том lab, а data% составляет 0.01. Снимки будут сделаны при любых изменениях блоков в этом томе.

sudo lvs
LV   VG            Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
lab  ostechnix_lab owi-aos--- 5.00g                                                    
snap ostechnix_lab swi-a-s--- 5.00g      lab    0.01  

Вы также можете смонтировать том моментального снимка и посмотреть, какие файлы и каталоги присутствуют.

mkdir /mnt/LVM_Snapshot/
mount /dev/mapper/ostechnix_lab-snap /mnt/LVM_Snapshot/

Как восстановить снимок LVM

Выполните следующую команду для создания случайных данных на исходном томе размером 1 ГБ.

dd if=/dev/zero of=/data/dummy_file2 bs=1G count=1 oflag=dsync

Двоичный файл создан, а пространство тома снимка составляет около 20%, что видно в разделе «Data%».

ls -lh /opt/lvm_lab/ostechnix_sample.txt 
-rw-r--r-- 1 root root 1.0G Feb 19 15:46 /opt/lvm_lab/ostechnix_sample.txt
sudo lvs
LV   VG            Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
lab  ostechnix_lab owi-aos--- 5.00g                                                    
snap ostechnix_lab swi-a-s--- 5.00g      lab    20.09    

Для восстановления снимка LVM выполните следующую процедуру. Важно отметить, что после восстановления снимка логический том будет автоматически удален.

ШАГ 1: Размонтируйте файловую систему, в которую смонтирован исходный логический том.

sudo umount /opt/lvm_lab

ШАГ 2: Выполните команду lvconvert для запуска процесса восстановления.

sudo lvconvert --merge /dev/ostechnix_lab/snap 
sudo lvconvert --merge /dev/ostechnix_lab/snap
Merging of volume ostechnix_lab/snap started.
ostechnix_lab/lab: Merged: 80.04%
ostechnix_lab/lab: Merged: 80.42%
ostechnix_lab/lab: Merged: 81.00%
ostechnix_lab/lab: Merged: 81.43%
ostechnix_lab/lab: Merged: 89.06%
ostechnix_lab/lab: Merged: 98.04%
ostechnix_lab/lab: Merged: 100.00%

Вы можете запустить команду lvs, и в разделе Attr появится O, что означает, что идет восстановление моментального снимка.

  • ШАГ 3:* После завершения процесса слияния моментальный том будет автоматически удален. Вы можете проверить это, выполнив команду lvs.
sudo lvs
LV   VG            Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
lab  ostechnix_lab -wi-ao---- 5.00g

ШАГ 4: Смонтируйте логический том и проверьте, восстановились ли данные.

sudo mount /dev/ostechnix_lab/lab /opt/lvm_lab

Размер тома моментального снимка LVM и его повреждение

Всегда рекомендуется выделять равный объем пространства для тома моментального снимка, учитывая, что исходный логический том будет использовать все свое пространство. В некоторых случаях, без какого-либо прогнозирования, под том моментальных снимков будет выделено меньше места, чем под логический том. В таких случаях, если исходный логический том полностью использован, на томе моментальных снимков не останется места сверх выделенного пространства, и он будет поврежден.

Если том моментальных снимков поврежден, он бесполезен, и мы должны удалить его и создать новый том моментальных снимков.

Чтобы решить эту проблему, у вас есть три варианта.

  1. Распределить размер тома моментального снимка и исходного тома поровну.
  2. Вручную увеличить размер тома моментального снимка.
  3. Автоматически увеличить размер тома моментального снимка. Это рекомендуемый метод.

Для увеличения размера логического тома вручную выполните следующую команду. Здесь к размеру тома моментальных снимков будет добавлено 3 ГБ.

sudo lvextend -L +3G /dev/ostechnix_lab/snap

Для автоматического увеличения размера необходимо отредактировать файл /etc/lvm/lvm.conf. Вы должны изменить два важных параметра.

Вы должны установить параметр autoextend_threshold, который будет расширять том, когда заданный процент пространства будет использован в томе моментальных снимков. Например, если у вас есть том моментальных снимков 2GB и порог установлен на 50, что означает, что если используется 50% пространства (это составляет 1GB), то должно произойти автоматическое расширение.

Вы должны установить, сколько места должно быть добавлено к тому моментальных снимков, установив параметр autoextend_percent.

Заключение

В этой статье мы рассмотрели что такое моментальные снимки LVM, как создавать новые тома моментальных снимков и восстанавливать тома моментальных снимков.

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Вдохновлен ostechnix.com

Похожие статьи

Комментарии (0)