В то время как я не смог сделать TDD с Марионеточными декларациями все же, у нас действительно есть довольно хороший цикл, чтобы препятствовать тому, чтобы изменения вошли в производство без тестирования. У нас есть два настроенные puppetmasters, каждый - наше производство puppetmaster, и другой наша разработка puppetmaster. Мы используем "среды" Марионетки для установки следующего:
Наши разработчики приложений делают свою работу над виртуальными машинами, которые получают их Марионеточные конфигурации от среды "тестирования" Puppetmaster разработки. Когда мы разрабатываем Марионеточные декларации, мы обычно настраиваем VM, чтобы служить тестовым клиентом во время процесса разработки и указать на него на нашу персональную среду разработки. После того как мы довольны нашими декларациями, мы продвигаем их к тестовой среде, где разработчики приложений получат изменения на своем VMs - они обычно жалуются громко, когда что-то повреждается :-)
На представительном подмножестве наших производственных машин существует второй puppetd, работающий в noop режиме, и указал на тестовую среду. Мы используем это для ловли потенциальных проблем с декларациями, прежде чем они будут продвинуты к производству.
После того как изменения передали, т.е. они не повреждают машины разработчика приложений, и они не производят нежелательный вывод в журналах производственных машин "noop" puppetd процесс, мы продвигаем новые декларации в производство. Мы имеем в распоряжении механизм отката, таким образом, мы можем вернуться к более ранней версии.
LVM2 / функциональность слияния снимков картопостроителя устройства доступна, если Вы запускаете Linux 2.6.33 + и используете LVM 2.0.58 +:
lvconvert --merge
См. это сообщение: http://www.jonnor.com/2010/02/lvm-snapshot-merging-avaliable/
Это ссылается на http://kernelnewbies.org/Linux_2_6_33 (взгляд на раздел 5, MD/DM) и журнал изменений LVM в 2.0.58: ftp://sources.redhat.com/pub/lvm2/WHATS_NEW
Но я еще не могу сказать Вам, как использовать его правильно ;-)
Хорошо, я думаю, что мне изобразили его из перечитывания ПРАКТИЧЕСКОГО РУКОВОДСТВА 3.8.
Путем снимок работает, набор блочного уровня изменений из оригинала. Так, когда оригинал записан в, следующие вещи происходят:
Так, выбрасывание снимка не будет влиять на оригинал вообще - потому что оригинал был изменен, и снимок просто содержал список тех изменений.
Ответ на мой собственный вопрос:
Создайте новый снимок с LVM. Если обновление может быть настроено для записи в точку монтирования снимка, используйте снимок R/W. Иначе или RO или R/W сделают.
Затем:
Я все еще не нашел, что инструмент конкретно выполняет это слияние - и, дал тот свой сценарий, не точно надлежащее использование снимков, не может быть того. Это походит на задание для rdiff.
LVM работает на блочном уровне. Это даже 'не знает, что' какая файловая система. Таким образом, Вы не можете создать снимки только определенные каталоги, если файловая система от другого объема LVM не смонтирована там.
Когда Вы заставляете LVM создать снимки Вас, на самом деле запрашивают 'копию на записи' дубликат объема. Любой блок, который был бы изменен на созданном снимки объеме, будет сохранен неизмененный в snaphot сначала. Таким образом для 'фиксации изменений' Вы ничего не должны делать. Просто удалите объем снимка.
Я не вполне знаю то, что является рекомендуемым способом 'вернуться изменения', поскольку я никогда не использовал LVM в таком сценарии, но я предполагаю, что он описал хорошо в документации LVM где-нибудь. Независимо от того, что это - Вы, должен будет, вероятно, перезапустить что-либо, что было изменено, перезагрузка могла бы быть хорошей идеей.
Я только что попробовал обновить Ubuntu на основе снимков. И да, перезагружать пришлось несколько раз. Сначала переименуйте исходный root-lv во что-нибудь другое, чтобы вы могли дать снимку исходное имя (поскольку обновление создает много изменений, и изменения происходят быстрее на снимке, чем на оригинале):
# lvrename lvm root root-old
# lvcreate -n root -s lvm/root-old -L 10G
Размер должен быть выбран соответственно. Затем перезагрузитесь, чтобы «новый» lvm / ubuntu был смонтирован как root, и вы могли выполнить обновление. Теперь вы можете протестировать новую версию и даже перейти на старую систему с помощью
# lvrename lvm root root-new
# lvrename lvm root-old root
# reboot
. Если вы хотите отказаться от обновления, просто запустите (из старой системы)
# lvremove lvm/root-new
. Если вы хотите зафиксировать изменения, просто запустите (из старая система)
# lvconvert --merge lvm/root-new
или из новой системы
# lvrename lvm root root-new
# lvconvert --merge lvm/root-new
# lvrename lvm root-old root
с последующей перезагрузкой. Система сразу откажется выполнять слияние, поскольку тома открыты. Таким образом, слияние будет начато во время загрузки и продолжено, пока вы уже можете работать с системой.
Да, и между прочим: при переключении между системами, не забудьте использовать соответствующее ядро. Поскольку / boot не является частью lvm, старое и новое ядра будут размещены там рядом.
Документация сбивает с толку. Мне кажется, что lvcreate --merge означает отменить все изменения, а lvremove означает зафиксировать изменения. Разница в том, как вы его используете.
В большинстве случаев вы просто используете моментальный снимок как зафиксированную только для чтения копию живого тома на определенный момент времени, а динамический том постоянно меняется. В этом случае, если вы выполните слияние, логически это будет означать, что вы собираетесь перезаписать живой том замороженной копией, или, другими словами, слияние означает откат изменений, а удаление означает фиксацию изменений.
Если вы пишете в снимок (новая опция с LVM2), который, как кажется, не является поведением по умолчанию и, вероятно, требует изменения конфигурации в другом месте, чтобы приложения могли записывать снимок вместо исходного тома, тогда будет верно обратное.
Пожалуйста, будьте осторожны при работе со снимками, так как некоторые люди подумают, что вы хотите использовать их одним способом, и дадут вам инструкции, которые могут разрушить вашу систему, если вы будете действовать в противоположном предположении!
lvconvert --merge <имя снимка>
Снимок "заморозить" исходное состояние LV. Удалить снимок означает забыть это состояние. Слияние снимка означает возврат к этому состоянию
Но внутри LVM он сохраняет перезаписанные данные в снимке: убедитесь, что размер снимка соответствует ожидаемому количеству изменений на LV и снимке