# 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
20. Создание бэкапа всей системы с помощью LVM и BorgBackup
2022-03-11
Подготовительные мероприятия
Для создания LVM-снэпшотов требуется некоторое незанятое место на тех VG, для LV которых будут создаваться снэпшоты. В том случае, если на машине остановлены все сервисы, могущие создавать большой объём записываемых данных, то для создания снэпшотов много места не потребуется и достаточно, например, временно отключить swap и удалить соответствующий LV для освобождения пары Гигабайт под создание снэпшотов.
Возможно, будет правильней добавить к машине дополнительный диск достаточного объёма на постоянной основе, который будет использоваться не только для создания бэкапов, но и восстановления всей системы.
Описание бэкапируемой системы
Дисковая подсистема стандартной бэкапируемой системы состоит из:
- Первый диск, где расположены отдельные разделы для:
- /dev/sda1
- /boot
- /dev/vg/root
- /
- /dev/vg/var
- /var
Добавление пространства в Volume Group
Ramdisk
-
При отсутствии свободного пространства на VG, можно временно добавить PV из Ramdisk’а, например на 1.5GB:
modprobe brd rd_size=1536000 #max_part=0 rd_nr=1
-
После чего добавьте его к VG:
vgextend vg /dev/ram0
-
По окончании работ выньте Ramdisk из VG:
vgreduce vg /dev/ram0
Уменьшение подходящего LV
-
Если требуется освободить немного места в VG, то можно попробовать освободить пару гигабайтов за счёт уменьшения, например
/dev/vg/data
, конечно, если на томе используется файловая система 'ext4':/usr/sbin/lvreduce -L -2G -r /dev/vg/data
-
После завершения бэкапа вновь увеличиваем LV:
/usr/sbin/lvextend -l +100%FREE -r /dev/vg/data
Процесс резервного копирования
Отключение работающих демонов
-
Остановите и выключите главные сервисы, работающие на хосте, чтобы предотвратить автоматический запуск демонов после восстановления системы. Например:
# Имя домена example.org преобразовываем в EXAMPLE-ORG D=$(hostname -d);D=${D/./-};D=${D^^} # Останавливаем FreeIPA ipactl stop # Выключаем службы для перестраховки на случай # автозапуска после восстановления из бэкапа systemctl disable ipa #systemctl disable krb5kdc #systemctl disable kadmin # Останавливаем демон dirsrv@EXAMPLE-ORG systemctl disable dirsrv@${D} systemctl disable pki-tomcatd@pki-tomcat #systemctl disable named-pkcs11 #systemctl disable httpd #systemctl disable ipa-dnskeysyncd #systemctl disable ipa-custodia systemctl disable certmonger #systemctl disable ipa-otpd.socket
-
В дополнение к остановке главных сервисов, работающих на машине, остановите второстепенные, которые могут вызвать переполнение на 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
Запуск остановленных демонов
-
Запустите ранее остановленные локальные демоны:
service auditd start systemctl start rsyslog systemctl start postfix
FreeIPA:
systemctl enable ipa #systemctl enable krb5kdc #systemctl enable kadmin D=$(hostname -d);D=${D/./-};D=${D^^} systemctl enable dirsrv@${D} systemctl enable pki-tomcatd@pki-tomcat #systemctl enable named-pkcs11 #systemctl enable httpd #systemctl enable ipa-dnskeysyncd #systemctl enable ipa-custodia systemctl enable certmonger #systemctl enable ipa-otpd.socket ipactl start
-
В случае проблем с запуском 'pki-tomcatd@pki-tomcat', восстанавливаем ссылку:
ln -s /lib/systemd/system/pki-tomcatd@.service \ /etc/systemd/system/pki-tomcatd.target.wants/pki-tomcatd@pki-tomcat.service chown -h pkiuser:pkiuser \ /etc/systemd/system/pki-tomcatd.target.wants/pki-tomcatd@pki-tomcat.service
Монтирование снэпшотов + директорию /boot
-
При монтировании xfs используем опцию
nouuid
, поэтому проверьте тип файловой системы:# Mounting root on /mnt/sysroot LV='/dev/vg/snap_root' SYSROOT='/mnt/sysroot' mkdir -p ${SYSROOT} FSTYPE=$(df -T ${LV/snap_/} | egrep "ext4|xfs" | awk '{print $2}') if [[ ${FSTYPE} = "xfs" ]]; then mount -o nouuid ${LV} ${SYSROOT} elif [[ ${FSTYPE} = "ext4" ]]; then mount ${LV} ${SYSROOT} fi # Mounting /var on /mnt/sysroot/var LV='/dev/vg/snap_var' FSTYPE=$(df -T ${LV/snap_/} | egrep "ext4|xfs" | awk '{print $2}') if [[ ${FSTYPE} = "xfs" ]]; then mount -o nouuid ${LV} ${SYSROOT}/var elif [[ ${FSTYPE} = "ext4" ]]; then mount ${LV} ${SYSROOT}/var fi # Mounting /boot on /mnt/boot mount -o bind,ro /boot ${SYSROOT}/boot
Проверка монтирования
-
Проверьте
mount | grep '/mnt'
Пример вывода:
/dev/mapper/vg-snap_root on /mnt/sysroot type ext4 (rw,relatime,seclabel) /dev/mapper/vg-snap_var on /mnt/sysroot/var type ext4 (rw,relatime,seclabel) /dev/sda1 on /mnt/sysroot/boot type ext4 (rw,relatime,seclabel)
Чистка системы в снимке:
-
Зачистите лишнюю информацию:
rm -rf ${SYSROOT}/var/cache/{yum,dnf} truncate -s0 ${SYSROOT}/var/log/lastlog rm -f ${SYSROOT}/var/log/lastlog.*
Резервное копирование
-
Устанавите переменные, чтобы не вводить параметры дважды:
export BORG_RSH="ssh -i ~/.ssh/borg1" export BORG_REPO="ssh://borg@192.168.50.10:22/./repo1"
-
Выполните бэкап со сжатием передовым компрессором [Zstandard](https://ru.wikipedia.org/wiki/Zstandard):
borg create -C zstd --stats --progress ::full_{hostname}_{now} ${SYSROOT}
Удаление временных снэпшотов
-
Удалите временные снэпшоты:
umount -R ${SYSROOT} lvremove -y /dev/vg/snap_var lvremove -y /dev/vg/snap_root