Существует ли какая-либо система для эффективного отслеживания истории версий образа виртуального диска?
По сути, у меня есть образ диска, который используется как «шаблонная» корневая файловая система для тестирования программ. Иногда мне нужно внести в него изменения (например, установить пакеты), но в большинстве случаев он доступен только для чтения. Мне нужно иметь возможность хранить полную историю изменений (в основном, чтобы я мог откатиться, если что-то пойдет не так, но мне также может потребоваться поиск более старой версии по дате и времени, чтобы воспроизвести более ранний тест).
Я бы хотел, чтобы история сохранялась в каком-то инкрементном формате, поскольку в большинстве случаев изменения, которые я делаю, очень малы (а полный образ диска огромен).
Я бы хотел, чтобы каждая ревизия хранилась в отдельном файле, для удобства резервного копирования с помощью rsync.
Я хотел бы иметь возможность легко удалять старые версии, которые больше не нужны.
Я бы хотел, чтобы самая последняя ревизия хранилась как нечто близкое к плоскому файлу, то есть производительность чтения должна быть O (1), независимо от того, сколько старых ревизий существует.
Да, и виртуальная машина должна иметь возможность безопасно использовать образ диска (доступный только для чтения), пока я вношу изменения; «совершение» должно быть атомарной операцией.
(Очевидно, я ожидаю, что между этими критериями будут некоторые компромиссы; я просто пытаюсь дать представление о том, что я ищу.)
Производительность для фактических операций "контроля версий" сравнительно не важна; с другой стороны, решающее значение имеют правильность и стабильность.
В настоящее время я использую kvm / qemu с образами дисков qcow2, но мне было бы интересно узнать о других вариантах.
Я вижу, как я мог бы написать такую систему контроля версий сам, используя qemu-img с резервными файлами и перебазированием, но есть ли какой-либо существующий набор инструментов, который подойдет для этой цели?
Если вы используете только образы linux amd64 и вас устраивают контейнеры вместо полной виртуализации, возможно, Docker (http://docker.io) будет возможным вариантом.
Это звучит как Бродяга (https://www.vagrantup.com/) может подойти для ваших нужд. Vagrant работает с несколькими движками виртуальных машин (например, virtualbox, vmware, проверьте ссылку выше).
Некоторые преимущества включают:
Первый установить бродягу и, скажем, виртуальный бокс.
Затем вы описываете свою виртуальную машину в одном 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
Когда вы назначаете мастер-диск виртуальной машине, виртуальная машина создает разностный диск, на который идут все записи. Мастер-диск будет использоваться для чтения, поскольку все, что не будет перезаписано на разностном диске. Со временем разностный диск, который является локальным для каждой виртуальной машины, будет расти, и большое количество исходных файлов будет перезаписано обновлениями. Это не важно, концепция не в экономии места на диске.
См. Ссылку для получения дополнительной информации.