Вчинити чи відновити знімок LVM Linux?


16

Я збираюся провести експериментальне оновлення на моєму сервері CentOS 5. Якщо оновлення не вдалося, я хочу мати можливість резервного копіювання змін у файловій системі. Цей сценарій здається схожим на приклад у Розділі 3.8 LVM HOWTO для знімків з читання та запису LVM2 - але цього прикладу досить не вистачає у фактичній практиці.

  1. Як би я здійснив зміни, об'єднавши їх у початковий розділ?

  2. Як би я відновив зміни, відновивши файлову систему в початковий стан? Чи слід вважати, що мені потрібно перезапустити кілька сервісів, якщо не перезавантажити прямо?

  3. Чи можливо зробити знімок лише певних каталогів на розділі, або це операція, що стосується загального розділу?

Відповіді:


11

Функції злиття знімків 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

Але я поки не можу сказати, як правильно ним користуватися ;-)


dmsetup targetsповинен показувати знімок-злиття, якщо це так, команда mergehot, застосована до snapshot-lv, повернеться до стану, в якому зроблено знімок.
Нілс

ОП видається заплутаною щодо внесення змін через якийсь крок злиття. Зміни здійснюються, коли знімок збільшується в розмірах. Знімок (змін) - це необхідна інформація для резервного копіювання їх через lvconvert --merge. Якщо ОП задоволений своїми змінами, він може видалити знімок через lvremove.
Вінс

21

Я щойно спробував оновлення на основі знімків з 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, старі та нові ядра будуть розміщені там поруч.


Дякую за вашу відповідь. Я щойно перетворив вашу процедуру у віртуальній машині CentOS 7, і вона спрацювала як шарм. Після скидання моєї віртуальної машини в середині процесу злиття підсистема LVM відновила її, поки система все ще отримувала доступ до оновлених файлів.
Андерсон Медейрос Гомес

Частина цієї відповіді, схоже, пропонує внесення змін за допомогою lvconvert --merge. У міру того, як знімок збільшується в розмірах, зміни також здійснюються. Lvconvert --merge повертає (відступає) зміни, використовуючи інформацію про знімок.
Вінс

10

Гаразд, я думаю, що це я з'ясував, перечитавши HOWTO 3.8.

  • Знімки лише для читання (наприклад, LVM1) містять різницю рівня блоку після створення знімка - оригінал все-таки змінюється, але знімок зберігає подання оригіналу. Читання з тих знімків представлені дані , як вони з'явилися в той час.
  • Знімки для читання і запису ( по замовчуванням в LVM2) можна записати: Вони виделкою оригінального розділу. Запис на на знімок не змінює оригінал.

Спосіб роботи знімка - це набір змін на рівні блоку від оригіналу. Отже, коли пишеться оригінал, трапляються такі речі:

  1. Щось намагається написати до оригіналу.
  2. Оригінал читається, а блоки з оригіналу копіюються на знімок.
  3. Оригінал змінюється.
  4. Знімок містить "зворотні відмінності" - зміни, які роблять оригінальний вигляд, як це було під час створення знімка.

Отже, викидання знімка зовсім не вплине на оригінал - адже оригінал змінено, а знімок просто містив перелік цих змін.

Відповідаючи на власне запитання:

Створіть новий знімок за допомогою LVM. Якщо оновлення можна налаштувати для запису до точки монтажу знімка, використовуйте R / W знімок. Інакше це буде RO або R / W.

Потім:

  • Якщо ви пишете в точку монтажу R / W знімка , виконайте це , написавши знімок до оригіналу, і поверніть , відкинувши знімок.
  • Якщо ви пишете на початкову точку монтажу, виконайте , відкинувши знімок, і поверніть , записавши з знімка до оригіналу.

Я досі не знайшов інструмент, який би був спеціально для здійснення цього злиття - і, враховуючи, що мій сценарій не зовсім призначений для використання знімків, його може не бути. Це звучить як робота для rdiff.


Інструмент злиття LVM ще не доступний. Це було в роботі, але я не вірю, що він закінчений.
Ігнасіо Васкес-Абрамс

інструмент злиття існує зараз (принаймні, на Ubuntu Trusty) - lvconvert --merge <snapshot-name>"відновить" ваш початковий диск до цього знімка та видалить цей знімок. Ви, звичайно, можете швидко відновити його відразу.
dpb

3

LVM працює на рівні блоку. Він навіть "не знає", що таке файлова система. Таким чином, ви не можете робити знімки лише певних каталогів, якщо там не змонтована файлова система з іншого обсягу LVM.

Коли ви робите знімок LVM, ви фактично вимагаєте копію тома "копіювати при записі". Будь-який блок, який буде змінено на томі знімка, спочатку зберігатиметься немодифікованим у знімку. Отже, щоб "здійснити зміни", вам нічого не потрібно робити. Просто видаліть гучність знімка.

Я не зовсім знаю, що є рекомендованим способом "повернення змін", оскільки я ніколи не використовував LVM в такому сценарії, але я думаю, що це десь добре описано в документації на LVM. Що б там не було, вам, ймовірно, доведеться перезапустити все, що було змінено, перезавантаження може бути хорошою ідеєю.


2
  1. Причин для злиття деяких немає. Просто видаліть знімок, час зміни джерела НН змінився
  2. Об’єднання, необхідне для відновлення змін lvconvert --merge <snapshot name>
  3. LVM працює з блоковими пристроями. Будь-які зміни, пов'язані з FS, повинні здійснюватися спеціальними утилітами (xfs_growfs, e2fsck, ...) відповідно до типу FS

Знімок "заморозить" оригінальний стан НН. Видалити знімок означає забути цей стан. Знімок знімка означає повернення до цього стану

Але всередині LVM він зберігає переписані дані на знімку: будьте впевнені, що розмір знімка відповідає очікуваній кількості змін у LV та знімку


Насправді знімок нічого не заморожує. Він записує зміни в додаткове місце, щоб вони могли бути повернені останніми за бажанням.
Вінс

0

Документація заплутана. Мені здається, що lvcreate --merge означає повернути всі зміни, а lvremove означає здійснити зміни. Відмінність полягає в тому, як ви ним користуєтеся.

У більшості випадків ви просто використовуєте знімок як копію в часі копіюваного тома часу, і гучність в реальному часі постійно змінюється. У цьому випадку, якщо ви об'єднаєтесь, логічно це означатиме, що ви збираєтеся перезаписати об'єм в реальному часі із замороженою копією, або іншими словами, об'єднання означає відкат змін, а вилучення означає внесення змін.

Якщо ви записуєте на знімок (новий параметр з LVM2), що, як видається, не є поведінкою за замовчуванням, і, ймовірно, вимагає змінити конфігурацію в іншому місці, щоб додатки писали на знімок замість оригінальної гучності, тоді зворотне було б істинним.

Будьте уважні при роботі зі знімками, оскільки деякі люди вважають, що ви хочете використовувати їх в один бік, і дадуть вам інструкції, які можуть зруйнувати вашу систему, якщо ви працюєте за протилежним припущенням!


Ви пишете на знімок просто, встановивши знімок; що монтується там, де мало спільного з налаштуваннями LVM - це не дуже важливо, що саме ви робите з кожним логічним томом, чи це знімок, чи ні, він просто відстежує, відкритий він чи ні.
Йосип Родін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.