Бэкап виртуальных машин в libvirt с удалённого сервера
Статья сильно неактуальна, но раз в 6 лет забавно дописывать в неё ретроспективу айтишного ландшафта виртуализации.
На работе приходится бэкапить около 10 виртуальных машин, усилий потратил на этот скрипт достаточно много, так что, думаю, стоит поделиться. Раньше использовал rdiff-backup, но он оказался излишне сложен и имел несколько неявных косяков, из-за которых я рисковал оказаться без резервных копий, в случае полного коллапса.
После этого пришлось потратить 40 минут на то, чтобы переписать всё на использование rsync, да и просто немного подефакторить написанный год назад скрипт.
Итак, код
Сейчас подтягивание изменений в ~100гб образов дисков занимает около полутора часов.
Суть его работы
- Получаем список виртуальных машин с флагом автостарт (симлинки на их XML’ки хранятся в директории /etc/libvirt/qemu/autostart/)
- Паузим виртуалку, сохраняя её память в /tmp/
- Получаем список дисков виртуалки из вывода
virsh dumpxml $vm
- Подтягиваем их rsync’ом на свою машину.
- Восстанавливаем состояние виртуалки из /tmp
- Переходим к следующей
Алгоритм вроде как максимально прост, не вредит самим виртуальным машинам. Запускается это в 3 утра, когда все сервисы, располагаемые в виртуальных машинах практически никому не нужны. По крону, раз в неделю и раз в месяц, дневные бэкапы копируются в недельные и в месячные соответственно.
6 лет спустя
Сейчас у меня на работе целая облачная инфраструктура своя, которая автоматом всё это делает и даже задумываться не надо. Вдобавок есть свой корпоративный rsync
, идеально подходящий для синхронизации дозаписи в конец файлов.
12 лет спустя
До чего дошёл прогресс, kubernetes и прочее, ни о чём думать не надо, всё само работает, специально выделенные люди это добро обслуживают.
Дома бэкаплюсь раз в два года методом покупки новых жёстких дисков для NAS, старые диски становятся бэкапом. Использую RAID1, один из дисков едет к маме в другую квартиру, другой храню дома. Звучит как будто в долгосроке данным не особо страшны проблемы с квартирой, вроде пожаров, хотя будет ли мне после этого до данных?
Код по ссылке выше - скверный, я бы его подрефакторил (да его бы даже LLM до ума могла бы довести), но кому он теперь нужен?