Назад | Перейти на главную страницу

Контроль версий для образов виртуальных дисков

Существует ли какая-либо система для эффективного отслеживания истории версий образа виртуального диска?

По сути, у меня есть образ диска, который используется как «шаблонная» корневая файловая система для тестирования программ. Иногда мне нужно внести в него изменения (например, установить пакеты), но в большинстве случаев он доступен только для чтения. Мне нужно иметь возможность хранить полную историю изменений (в основном, чтобы я мог откатиться, если что-то пойдет не так, но мне также может потребоваться поиск более старой версии по дате и времени, чтобы воспроизвести более ранний тест).

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

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

Я хотел бы иметь возможность легко удалять старые версии, которые больше не нужны.

Я бы хотел, чтобы самая последняя ревизия хранилась как нечто близкое к плоскому файлу, то есть производительность чтения должна быть O (1), независимо от того, сколько старых ревизий существует.

Да, и виртуальная машина должна иметь возможность безопасно использовать образ диска (доступный только для чтения), пока я вношу изменения; «совершение» должно быть атомарной операцией.

(Очевидно, я ожидаю, что между этими критериями будут некоторые компромиссы; я просто пытаюсь дать представление о том, что я ищу.)

Производительность для фактических операций "контроля версий" сравнительно не важна; с другой стороны, решающее значение имеют правильность и стабильность.

В настоящее время я использую kvm / qemu с образами дисков qcow2, но мне было бы интересно узнать о других вариантах.

Я вижу, как я мог бы написать такую ​​систему контроля версий сам, используя qemu-img с резервными файлами и перебазированием, но есть ли какой-либо существующий набор инструментов, который подойдет для этой цели?

Если вы используете только образы linux amd64 и вас устраивают контейнеры вместо полной виртуализации, возможно, Docker (http://docker.io) будет возможным вариантом.

Это звучит как Бродяга (https://www.vagrantup.com/) может подойти для ваших нужд. Vagrant работает с несколькими движками виртуальных машин (например, virtualbox, vmware, проверьте ссылку выше).

Некоторые преимущества включают:

  • Совместимость с системами VCS (один текстовый файл)
  • Кроссплатформенность - windows, linux, mac
  • Очень легко поделиться с кем угодно и где угодно
  • Обеспечивает согласованную среду тестирования

Начало работы

Первый установить бродягу и, скажем, виртуальный бокс.

Затем вы описываете свою виртуальную машину в одном VagrantFile, который вы можете сгенерировать, используя:

vagrant init ubuntu/trusty64 [1]

Тогда у вас будет файл дескриптора для предпочитаемой вами ОС. Если хотите, отредактируйте несколько IP-адресов, портов, пакетов и общих папок в VagrantFile.

Когда вы закончите, бегите:

vagrant up

и у вас есть виртуальная машина, в которую вы можете войти, используя:

vagrant ssh

Настройка

Если этого недостаточно и у вас есть очень специфические требования, выходящие за рамки возможностей vagrant, существует множество vagrant VM, предварительно настроенных с системами управления конфигурацией, такими как cfengine, или chef, или puppet, или как вам больше нравится.

[1] Существует множество предварительно настроенных vagrant vms, взгляните на (https://vagrantcloud.com/discover/featured).

Проверь это:

Virtualbox: диск с несколькими подключениями
http://virtbjorn.blogspot.co.uk/2012/12/virtualbox-multi-attach-disk.html

Когда вы назначаете мастер-диск виртуальной машине, виртуальная машина создает разностный диск, на который идут все записи. Мастер-диск будет использоваться для чтения, поскольку все, что не будет перезаписано на разностном диске. Со временем разностный диск, который является локальным для каждой виртуальной машины, будет расти, и большое количество исходных файлов будет перезаписано обновлениями. Это не важно, концепция не в экономии места на диске.

См. Ссылку для получения дополнительной информации.