Я собираюсь провести экспериментальное обновление на моем сервере CentOS 5. Если обновление завершится неудачно, я хочу иметь возможность отменить изменения в файловой системе. Этот сценарий кажется похожим на пример в Разделе 3.8 LVM HOWTO для моментальных снимков чтения и записи LVM2, но в этом примере отсутствуют практические инструкции.
Как бы я зафиксировал изменения, объединив их обратно в исходный раздел?
Как бы я вернул изменения, вернув файловую систему обратно в исходное состояние? Должен ли я предположить, что мне нужно будет перезапустить несколько служб, если не сразу перезагрузить?
Можно ли сделать снимок только определенных каталогов в разделе, или это операция всего раздела?
dmsetup targets
должен отображать snapshot-merge, если это так, команда merge, примененная к snapshot-lv, вернется в состояние, в котором был сделан снимок.Я только что попробовал обновление на основе снимка с Ubuntu. И да, мне нужно было перезагрузиться несколько раз. Сначала переименуйте исходный root-lv во что-то другое, чтобы вы могли присвоить снимку исходное имя (поскольку обновление создает много изменений и изменения происходят быстрее на снимке, чем на оригинале):
Размер должен быть выбран соответствующим образом. Затем перезагрузитесь, чтобы «новый» lvm / ubuntu был смонтирован как root, и вы сможете выполнить обновление. Теперь вы можете протестировать новую версию и даже перейти на старую систему
Если вы хотите отказаться от обновления, просто запустите (из старой системы)
Если вы хотите зафиксировать изменения, просто запустите (из старой системы)
или из новой системы
с последующей перезагрузкой. Система сразу же откажется выполнить слияние, поскольку тома открыты. Таким образом, слияние будет начато во время загрузки и продолжено, пока вы уже можете работать с системой.
Да, и кстати: при переключении между системами, не забудьте использовать соответствующее ядро. Поскольку / boot не является частью lvm, старое и новое ядра будут размещаться рядом.
источник
Хорошо, думаю, я понял это, перечитав HOWTO 3.8.
Принцип работы моментального снимка - это набор изменений на уровне блоков по сравнению с оригиналом. Итак, когда пишется оригинал, происходят следующие вещи:
Таким образом, удаление снимка не повлияет на оригинал вообще - потому что оригинал был изменен, а снимок просто содержал список этих изменений.
Отвечая на мой собственный вопрос:
Создайте новый снимок с помощью LVM. Если обновление можно настроить на запись в точку монтирования снимка, используйте снимок R / W. В противном случае подойдут либо RO, либо R / W.
Потом:
Я до сих пор не нашел инструмента, специально предназначенного для этого слияния, и, учитывая, что мой сценарий не совсем предназначен для использования моментальных снимков, его может не быть. Это звучит как работа для rdiff.
источник
lvconvert --merge <snapshot-name>
он «восстановит» исходный диск до этого снимка и удалит этот снимок. Конечно, вы можете быстро восстановить его сразу.LVM работает на уровне блоков. Он даже «не знает», что такое файловая система. Таким образом, вы не можете делать снимки только определенных каталогов, если там не смонтирована файловая система с другого тома LVM.
Когда вы делаете снимок LVM, вы фактически запрашиваете копию копии при записи тома. Любой блок, который будет изменен на томе моментального снимка, будет сохранен в неизмененном виде в моментальном снимке. Таким образом, чтобы «зафиксировать изменения», вам не нужно ничего делать. Просто удалите том снимка.
Я не совсем знаю, каков рекомендуемый способ «отменить изменения», так как я никогда не использовал LVM в таком сценарии, но я предполагаю, что он где-то хорошо описан в документации LVM. Что бы это ни было, вам, вероятно, потребуется перезапустить все, что было изменено, перезагрузка может быть хорошей идеей.
источник
lvconvert --merge <snapshot name>
Снимок «заморозить» исходное состояние LV. Удалить снимок означает забыть это состояние. Объединить снимок означает возврат в это состояние
Но внутри LVM он сохраняет перезаписанные данные в снимке: убедитесь, что размер снимка соответствует ожидаемому количеству изменений в LV и снимке
источник
Документация сбивает с толку. Мне кажется, что lvcreate --merge означает отменить все изменения, а lvremove означает зафиксировать изменения. Различие в том, как вы используете это.
В большинстве случаев вы просто используете моментальный снимок в качестве копии реального времени только для чтения, и динамический том постоянно меняется. В этом случае, если вы объединяете, логически это будет означать, что вы собираетесь перезаписать живой том замороженной копией, или, другими словами, объединение означает откат изменений, а удаление означает фиксацию изменений.
Если вы записываете в снимок (новая опция с LVM2), что, по-видимому, не является поведением по умолчанию и, вероятно, требует изменения конфигурации в другом месте, чтобы приложения записывали снимок вместо исходного тома, тогда обратное будет верно.
Пожалуйста, будьте осторожны при работе со снимками, так как некоторые люди предполагают, что вы хотите использовать их в одном направлении, и дадут вам инструкции, которые могут разрушить вашу систему, если вы будете действовать в противоположном предположении!
источник