Як відновити логічний том, видалений за допомогою lvremove


12

Я на CentOS 5.5 і запускаю Xen. У мене є велика група томів, що я створюю логічні томи, використовуючи lvcreate. Сьогодні мені довелося клієнту скасувати її рахунок, а потім змінити свою думку приблизно через годину. На жаль, я вже видалив LVM, на якому знаходився образ Xen. (просто за допомогою стандартного lvremove). З цього часу на цьому диску не було жодної іншої LVM-активності (нічого більше не додано чи видалено). Чи можна "скасувати" lvremove або відновити логічний том? Якщо так, то як би я пішов про це?

Відповіді:


13

LVM робить резервні копії метаданих на /etc/lvm/backupта /etc/lvm/archive. У верхній частині кожного файлу він повідомить вам час / дані, коли файл був створений, так що, швидше за все, у вас буде копія старих метаданих, як це було до видалення LV. Я вважаю, що резервне копіювання автоматичне будь-коли, коли метадані змінюються.

Наведене нижче може бути небезпечним та руйнівним, тому будьте дуже обережні та, якщо можливо, мати повну резервну копію.

Команда відновити ці резервні копії метаданих групи томів є vgcfgrestore. Переконайтеся, що ви робите поточну копію існуючої робочої конфігурації, використовуючи vgcfgbackupкоманду із прапором -f, щоб вказати інший файл для виводу, щоб ви не змінювали файли, що знаходяться в / etc / lvm / backup або / etc / lvm / папки архіву. Переконайтеся, що ви відрізняєте поточну конфігурацію від конфігурації, яку ви хочете відновити, щоб переконатися, що єдиними змінами, які ви збираєтеся застосувати, є відтворення нещодавно видаленого LV. Маючи повне резервне копіювання даних, напевно, теж погана ідея. Ви також можете подумати про те, щоб звернутися до свого постачальника Linux для підтримки / керівництва, якщо ви маєте договір на підтримку, перш ніж продовжувати, оскільки мені ніколи цього не довелося робити.

Удачі.


1
Читаючи глибше vgcfgrestore, схоже, мені потрібно буде вимкнути кожну віртуальну машину в цьому полі, перш ніж спробувати це, або ризикувати зіпсувати весь масив. Схоже, що ваші інструкції спрацювали, тому я приймаю відповідь, але дані не варто ризикувати. Спасибі
Джон П

@John P Так, я начебто подумав з VM, і все, що це було б складно зробити в таких умовах. Я вважаю, що в цьому випадку, можливо, процедура видалення облікового запису повинна включати 30 днів без періоду видалення.
3вплив

18

"Не могли б ви бути більш конкретними щодо пошуку EFROM та ETO у файлі резервної копії? У всіх lv є" start_extend "від 0 у моєму резервному файлі, тому я трохи загубився :) Дякую! - user186975 24 серпня 1313 о 17 : 06 "

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

Приклад:

1 - Я вилучив свій логічний том!

$ sudo lvremove /dev/vg1/debian.root

2 - Перше, що потрібно зробити, - знайти архівний файл за адресою /etc/lvm/archive/vg1_(xxxxx).vg. Я можу це зробити, просто дивлячись на дату, коли я видалив логічний том!

$ sudo ls -l /etc/lvm/archive |more

3- Я знайшов!

-rw------- 1 root root 16255 Mar 20 14:29 vg1_00223-235991429.vg
-rw------- 1 root root 16665 Mar 20 16:49 vg1_00224-748876387.vg
-rw------- 1 root root 17074 Mar 20 16:49 vg1_00225-931666169.vg
-rw------- 1 root root 17482 Mar 20 16:50 vg1_00226-1238302012.vg
-rw------- 1 root root 18081 **Mar 20 21:57 vg1_00227-2048533959.vg**

Дата, де я зробив lvremove !!! ... це було кілька хвилин тому ..

4 - Давайте подивимось на файл!

$ sudo head /etc/lvm/archive/vg1_00227-2048533959.vg
*# Generated by LVM2 version 2.02.95(2) (2012-03-06): Thu Mar 20 21:57:58 2014
contents = "Text Format Volume Group"
version = 1
description = **"Created *before* executing 'lvremove /dev/vg1/debian.root'"**
creation_host = "server"    # Linux server 3.8.0-35-generic #50-Ubuntu SMP Tue Dec 3 01:24:59 UTC 2013 x86_64
creation_time = 1395363478  # Thu Mar 20 21:57:58 2014*

5 - Зробіть тест, перш ніж відновити його!

$ sudo vgcfgrestore vg1 --test -f /etc/lvm/archive/vg1_00227-2048533959.vg
Test mode: Metadata will NOT be updated and volumes will not be
(de)activated.   **Restored volume group vg1**

6 - Гаразд, тепер повторіть командний рядок без (--test)

$ sudo vgcfgrestore vg1 -f /etc/lvm/archive/vg1_00227-2048533959.vg
**Restored volume group vg1**

7 - Перевір!

$ sudo lvscan |grep debian
ACTIVE            '/dev/vg1/debian.root' [7,81 GiB] inherit

8 - Якщо логіка не була активною, зробіть це!

$ sudo lvchange -a y /dev/vg1/debian.root 

Це все

Я сподіваюся, що це може допомогти іншим людям, які шукають це рішення!


5

Найпростіше відновити з lvremove (якщо припустити, що ви не писали в розширення, у яких жив LV):

Просто знайдіть резервну копію ваших метаданих у / etc / lvm / archive та з’ясуйте

а) яке розширення НН знаходилось в (EFROM, ETO)
b), на яких PVs знаходився ваш НН, а який поширюється на цей PV, який він використовував (PFROM, PTO)

Отримавши цю інформацію, ви створюєте новий LV точно такого ж розміру на точно такому ж ПВ, що розширюється, не витираючи перші 8 КБ LV:

lvcreate --extents EFROM-ETO --zero n --name customer007 YOUR-VG-NAME /dev/yourpv:PFROM-PTO

1
Не могли б ви бути більш конкретними, як знайти EFROM та ETO з резервного файлу? У всіх lv є "start_extend" від 0 у моєму резервному файлі, тому я трохи втратив :) Дякую!

3

(Як відповів термоман раніше), легким способом відтворити видалений об'єм LVM є його створення за допомогою lvcreate без нуля і переконайтесь, що він буде в тому ж самому положенні на диску. (Команда з відповіді термомана не спрацювала.)

Перевірте розмір та положення видаленого логічного тома таким, яким вони були до видалення, прочитавши файли в / etc / lvm / archive. Розмір тому в extent_countз segment1(або суми segment*/extent_countзначень , якщо він мав кілька екстентів). Позиція знаходиться в stripesрозділі після псевдоніма фізичного обсягу (наприклад pv0).

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

    physical_volumes {
            pv0 {
                    device = "/dev/somedisk" # Hint only
                    ...
            }
    }

    logical_volumes {
            ...
            example {
                    ...
                    segment_count = 1

                    segment1 {
                            start_extent = 0
                            extent_count = 1024     # 4 Gigabytes

                            type = "striped"
                            stripe_count = 1        # linear

                            stripes = [
                                    "pv0", 30720
                            ]
                    }
            }
            ...
    }

Розмір цього exampleобсягу становив 1024, і він знаходився на / dev / somedisk, починаючи з 30720.

Обчисліть останню міру як старт + розмір -1 = 30720 + 1024 - 1 = 31743. Щоб відтворити цю проблему з томом, виконайте наступні дії:

lvcreate --extents 1024 --zero n --name example vgname /dev/somedisk:30720-31743

Ця відповідь просто врятувала мою ніч вчора! У мене був зламаний XenServer, який
видаляв

2

У мене була схожа ситуація. У мене були всі ПВ, що містять потрібні ЛЗ, але мій VG показав відсутні ПВ та 0 НН. Я відновився, зробивши наступне:

  1. Станьте коренем
  2. Запустіть pvsдля збору UUID для всіх дисків.
  3. Перегляньте файли в / etc / lvm / archive, поки я не знайшов той, який перераховував усі ті самі UUID.
  4. Зробіть робочу копію архівованого конфігураційного файла та починайте редагування.
  5. У physical_volumesрозділі встановіть device =лінії, які відповідають поточному пристрою / UUID, про які повідомляється pvs, очистіть усі "MISSING"прапори та видаліть усі pvNрозділи, які фактично відсутні.
  6. У logical_volumesрозділі видаліть усі списки, на яких були смужки на pvNрозділах, які вже не існували.
  7. Це було все, тоді я побіг

    vgcfgrestore --test vg -f /root/dangerously_edited.vg

  8. Коли це спрацювало, я повторно бігав без --testвибору.

Я домігся своєї конкретної ситуації, розширивши VG за допомогою PVs sdg та sdh. Потім я створив новий LV, вказавши /dev/sdg /dev/sdhв командному рядку, щоб я знав, що новий LV знаходиться на цих дисках. Потім я перемістив саме ці диски на нову машину. Стара машина дуже засмутилася відсутніми накопичувачами, і коли я примусив їх зняти, вона також видалила ВСІ ЛВ. Бампер.

Наступного разу, звичайно, я створять новий VG, щоб уникнути цієї проблеми.

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