Как восстановить удаленный логический том с помощью 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 за поддержкой / руководством, если у вас есть контракт на поддержку, прежде чем продолжать, поскольку мне никогда не приходилось делать это самостоятельно.

Удачи.

3dinfluence
источник
1
Если заглянуть глубже в vgcfgrestore, похоже, мне нужно было отключить каждую виртуальную машину на этом блоке, прежде чем пытаться это сделать, или рискнуть повредить весь массив. Похоже, ваши инструкции будут работать, поэтому я принимаю ответ, но данные не стоят риска. Спасибо
Джон П
@John P Да, я как-то подумал с виртуальными машинами, и все это было бы трудно сделать в такой среде. Я полагаю, что одно из них - это то, что в будущем, возможно, процедура удаления учетной записи будет включать 30-дневный период без удаления.
3dinfluence
18

«Не могли бы вы поподробнее узнать, как найти EFROM и ETO из файла резервной копии? У всех lv есть« start_extend »из 0 в моем файле резервной копии, так что я немного растерялся :) Спасибо! - user186975 24 августа '13 в 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 и выясните

a) который расширяет LV, в котором он находился (EFROM, ETO);
b) на каких PV находился ваш LV, и который распространяется на тот PV, который он использовал (PFROM, PTO)

Получив эту информацию, вы создаете новый логический том точно такого же размера на точно таких же планах, не стирая первые 8 КБ логического диска :

lvcreate --extents EFROM-ETO --zero n --name customer007 YOUR-VG-NAME /dev/yourpv:PFROM-PTO
thermoman
источник
1
Не могли бы вы, пожалуйста, конкретнее найти EFROM и ETO из файла резервной копии? У всех lv есть «start_extend» от 0 в моем файле резервной копии, так что я немного растерялся :) Спасибо!
3

(Как ранее отвечал Thermoman) простой способ воссоздать удаленный том 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.

Вычислите последний экстент как start + size -1 = 30720 + 1024 - 1 = 31743. Чтобы воссоздать этот том, выполните следующие действия:

lvcreate --extents 1024 --zero n --name example vgname /dev/somedisk:30720-31743
Туомас
источник
Этот ответ только что спас мою ночь вчера! У меня был сломанный XenServer, который удалял неправильный LV из-за ошибки API ...: o
Elektordi
2

У меня была похожая ситуация. У меня были все PV, содержащие желаемые LV, но моя VG показала отсутствие PV и 0 LV. Я выздоровел, сделав следующее:

  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 с помощью PV sdg и sdh. Затем я создал новый LV, указав /dev/sdg /dev/sdhв командной строке, чтобы я знал, что новый LV был на этих дисках. Затем я перенес эти диски на новую машину. Старая машина была очень расстроена отсутствующими дисками, и когда я их принудительно удалил, она также удалила ВСЕ LV. Облом.

В следующий раз, конечно, я создам новый VG, чтобы избежать этой проблемы.

nortally
источник