Резервное копирование · 2 min read · Feb 14, 2026

Резервное копирование гостя LVM XEN, содержащего LV

Резервное копирование гостя LVM XEN, содержащего LV

В моей повседневной работе все наши Linux-системы (кроме 3) являются виртуальными машинами Xen. Я хотел найти способ сделать резервную копию этих систем без риска изменения файлов. По соображениям производительности я запускаю все из них на логических томах.

Внутри этих виртуальных машин операционная система DomU снова использует LVM по различным причинам. Это создает некоторые проблемы при создании резервной копии.

Основная идея заключается в следующем:

  1. Создать снимок логического тома
  2. Позволить Dom0 видеть логические тома внутри логического тома (фу).
  3. Смонтировать вновь обнаруженные логические тома.
  4. Сделать резервную копию
  5. Убрать лишнее

Есть несколько предположений, которые я сделал. Я предположил, что вы использовали пользовательские имена для групп томов в Dom0 (хосте) или DomU (госте). Лично я всегда использую файл kickstart для создания своих DomU, поэтому у меня основная VG установлена на XenVG00. Все мои DomU находятся в VG на Dom0 под названием vg_xen - это не обязательно.

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

Сначала нам нужно создать наш снимок:

[root@dom0 ~]# lvcreate -L 1G -s -n lv_snapshot /dev/vg_xen/lv_xen_snaptest
Логический том "lv_snapshot" создан

Это создает снимок тома под названием lv_snapshot для DomU, который использует логический том Dom0 под названием lv_xen_snaptest. Это полезно само по себе, так как теперь вы можете сделать образ этого LV. Я делаю именно это для восстановления после катастроф (dd if=/dev/vg_xen/lv_snapshot | bzip2 | dd of=/path/to/dr_image.bz2). В худшем случае этот образ можно будет записать обратно в новый логический том на новой системе для новой инстанции Xen.

Тем не менее, что мы хотим сделать, так это получить доступ к файлам в этом снимке. Поскольку DomU использует LVM, это, к сожалению, не тривиально. Сначала нам нужно использовать kpartx для извлечения данных LV:

[root@dom0 ~]# kpartx -av /dev/vg_xen/lv_snapshot
добавить карту lv_snapshot1 : 0 208782 линейный /dev/vg_xen/lv_snapshot 63  
добавить карту lv_snapshot2 : 0 20755980 линейный /dev/vg_xen/lv_snapshot 208845

Вы можете видеть, что было найдено 2 LV. Поскольку lv_snapshot1 меньше, мы знаем, что это файл подкачки, а lv_snapshot2 - это файловая система /. Теперь нам нужно заставить LVM видеть эти LV и активировать их.

[root@dom0 ~]# vgscan
Чтение всех физических томов. Это может занять некоторое время…  
Найдена группа томов "vg_xen" с использованием типа метаданных lvm2  
Найдена группа томов "XenVG00" с использованием типа метаданных lvm2  
Найдена группа томов "VolGroup00" с использованием типа метаданных lvm2
[root@dom0 ~]# vgchange -ay XenVG00
2 логических тома в группе томов "XenVG00" теперь активны

Теперь, когда LVs активны, мы можем смонтировать их так, как если бы это были любые другие диски.

[root@dom0 ~]# mount /dev/XenVG00/LVroot /mnt/

И выполнять любые команды, которые нам нравятся

[root@dom0 ~]# rsync -avhp /mnt/ /backup/xen_test/

Очевидно, что теперь нам нужно убрать за собой:

[root@dom0 ~]# umount /mnt  
[root@dom0 ~]# vgchange -an XenVG00
0 логических томов в группе томов "XenVG00" теперь активны
[root@dom0 ~]# kpartx -d /dev/vg_xen/lv_snapshot  
[root@dom0 ~]# lvremove /dev/vg_xen/lv_snapshot
Вы действительно хотите удалить активный логический том "lv_snapshot"? [y/n]: y  
Логический том "lv_snapshot" успешно удален

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

Размер тома снимка - это сложная часть. Я использовал 1G снимок LV. Чтобы дать представление о том, насколько большим он должен быть: к тому времени, когда образ DR моего вики был сделан, сжат и отправлен по SSH на другой сервер для хранения, использование снимка достигло почти 7%.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.