Статья сильно неактуальна, но раз в 6 лет забавно дописывать в неё ретроспективу айтишного ландшафта виртуализации.

На работе приходится бэкапить около 10 виртуальных машин, усилий потратил на этот скрипт достаточно много, так что, думаю, стоит поделиться. Раньше использовал rdiff-backup, но он оказался излишне сложен и имел несколько неявных косяков, из-за которых я рисковал оказаться без резервных копий, в случае полного коллапса.

После этого пришлось потратить 40 минут на то, чтобы переписать всё на использование rsync, да и просто немного подефакторить написанный год назад скрипт.

Итак, код

Сейчас подтягивание изменений в ~100гб образов дисков занимает около полутора часов.

Суть его работы

  1. Получаем список виртуальных машин с флагом автостарт (симлинки на их XML’ки хранятся в директории /etc/libvirt/qemu/autostart/)
  2. Паузим виртуалку, сохраняя её память в /tmp/
  3. Получаем список дисков виртуалки из вывода virsh dumpxml $vm
  4. Подтягиваем их rsync’ом на свою машину.
  5. Восстанавливаем состояние виртуалки из /tmp
  6. Переходим к следующей

Алгоритм вроде как максимально прост, не вредит самим виртуальным машинам. Запускается это в 3 утра, когда все сервисы, располагаемые в виртуальных машинах практически никому не нужны. По крону, раз в неделю и раз в месяц, дневные бэкапы копируются в недельные и в месячные соответственно.

6 лет спустя

Сейчас у меня на работе целая облачная инфраструктура своя, которая автоматом всё это делает и даже задумываться не надо. Вдобавок есть свой корпоративный rsync, идеально подходящий для синхронизации дозаписи в конец файлов.

12 лет спустя

До чего дошёл прогресс, kubernetes и прочее, ни о чём думать не надо, всё само работает, специально выделенные люди это добро обслуживают.

Дома бэкаплюсь раз в два года методом покупки новых жёстких дисков для NAS, старые диски становятся бэкапом. Использую RAID1, один из дисков едет к маме в другую квартиру, другой храню дома. Звучит как будто в долгосроке данным не особо страшны проблемы с квартирой, вроде пожаров, хотя будет ли мне после этого до данных?

Код по ссылке выше - скверный, я бы его подрефакторил (да его бы даже LLM до ума могла бы довести), но кому он теперь нужен?