20. Создание бэкапа всей системы с помощью LVM и BorgBackup
2022-03-11
Подготовительные мероприятия
Для создания LVM-снэпшотов требуется некоторое незанятое место на тех VG, для LV которых будут создаваться снэпшоты. В том случае, если на машине остановлены все сервисы, могущие создавать большой объём записываемых данных, то для создания снэпшотов много места не потребуется и достаточно, например, временно отключить swap и удалить соответствующий LV для освобождения пары Гигабайт под создание снэпшотов.
Возможно, будет правильней добавить к машине дополнительный диск достаточного объёма на постоянной основе, который будет использоваться не только для создания бэкапов, но и восстановления всей системы.
Описание бэкапируемой системы
Дисковая подсистема стандартной бэкапируемой системы состоит из следующего:
- Два диска
- Первый диск системный, где расположены отдельные разделы для:
/dev/sda1
-/boot
/dev/vg/root
-/
/dev/vg/var
-/var
- Второй диск дополнительный. Возможно, что он:
- диск не разбит или разбит на один раздел. Пространство подключёно к LVM2 и именовано и подключено так
/dev/vg/data
-/data
; - диск не разбит или разбит на один раздел. Пространство подключёно к LVM2 и именовано и подключено так
/dev/vgdata/data
-/data
; - может быть организован по другому.
- диск не разбит или разбит на один раздел. Пространство подключёно к LVM2 и именовано и подключено так
- Первый диск системный, где расположены отдельные разделы для:
# parted /dev/sda unit mib print free
Model: VMware Virtual disk (scsi)
Disk /dev/sda: 51200MiB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1,00MiB 1025MiB 1024MiB primary xfs boot
2 1025MiB 51200MiB 50175MiB primary lvm
Добавление пространства в Volume Group
Если требуется бэкап LV-томов на одном VG, то разбивать дополнительный диск на разделы не требуется. Достаточно будет добавить в VG весь новый диск командой vgextend /dev/vg /dev/sdb
.
В противном случае, когда восстанавливаемые тома находятся на разных VG, потребуется разбивка дополнительного диска на отдельные разделы и добавление этих новых PV в свои VG.
Процесс резервного копирования
Отключение работающих демонов
Останавливаем и выключаем главные сервисы, работающие на хосте, чтобы предотвратить автоматический запуск демонов после восстановления системы. Например:
ipactl stop
systemctl disable --now [email protected]
systemctl disable --now pki-tomcatd
systemctl disable --now named
systemctl disable --now httpd
systemctl disable --now ipa-otpd
systemctl disable --now ipa-dnskeysyncd
В дополнение к остановке главных сервисов, работающих на машине, останавливаем второстепенные, которые могут вызвать переполнение на LV места выделенного под снэпшоты. Пример остановки дополнительных сервисов:
systemctl stop postfix
systemctl stop rsyslog
service auditd stop
Создание временных LVM snapshot’ов
Помним, что в Volume Group должно быть достаточно свободного места для размещения снэпшотов.
lvcreate -L 500M -s -n snap_root /dev/vg/root
lvcreate -L 500M -s -n snap_var /dev/vg/var
Если требуется освободить немного места в VG, то можно попробовать освободить пару гигабайтов за счёт уменьшения, например /dev/vg/data
:
/usr/sbin/lvreduce -L -2G -r /dev/vg/data
После завершения бэкапа вновь увеличиваем LV:
/usr/sbin/lvextend -l +100%FREE -r /dev/vg/data
Монтирование снэпшотов + директорию /boot
При монтировании xfs используем опцию nouuid
, поэтому проверяем тип файловой системы:
# Mounting root on /mnt
LV='/dev/vg/snap_root'
FSTYPE=$(df -T ${LV/snap_/} | egrep "ext4|xfs" | awk '{print $2}')
if [[ ${FSTYPE} = "xfs" ]]; then
mount -o nouuid,ro ${LV} /mnt
elif [[ ${FSTYPE} = "ext4" ]]; then
mount -o ro ${LV} /mnt
fi
# Mounting /var on /mnt/var
LV='/dev/vg/snap_var'
FSTYPE=$(df -T ${LV/snap_/} | egrep "ext4|xfs" | awk '{print $2}')
if [[ ${FSTYPE} = "xfs" ]]; then
mount -o nouuid,ro ${LV} /mnt/var
elif [[ ${FSTYPE} = "ext4" ]]; then
mount -o ro ${LV} /mnt/var
fi
# Mounting /boot on /mnt/boot
mount -o bind,ro /boot /mnt/boot
Проверка монтирования
mount | grep '/mnt'
Пример вывода:
/dev/mapper/vg-snap_root on /mnt type ext4 (rw,relatime,seclabel)
/dev/mapper/vg-snap_var on /mnt/var type ext4 (rw,relatime,seclabel)
/dev/sda1 on /mnt/boot type ext4 (rw,relatime,seclabel)
Резервное копирование
Устанавливаем переменные, чтобы не вводить параметры дважды:
export BORG_RSH="ssh -i ~/.ssh/borg1"
export BORG_REPO="[email protected]:home-ipa"
Выполняем бэкап со сжатием передовым компрессором Zstandard:
borg create -C zstd --stats --progress ::full_{hostname}_{now} /mnt
Удаление временных снэпшотов
umount -R /mnt
lvremove -y /dev/vg/snap_var
lvremove -y /dev/vg/snap_root
Запуск остановленных демонов
Запускаем ранее остановленные локальные демоны:
systemctl start postfix
systemctl start rsyslog
service auditd start