3

Я новичок в LVM и разделах в целом, и поэтому я нахожусь в ситуации здесь.

Ситуация:

Я случайно перезаписал MBR 16-минутного LVM-диска, созданного Fedora.

Теперь все остальное на этом диске не повреждено; только MBR был поврежден (и это тоже только первые 446 из его 512 байтов). Я повредил MBR, случайно выдав:

$ dd if=/the/wrong/446-byte-file.txt of=/dev/sda

Этот диск (с поврежденной MBR), который изначально был /dev/sda в системе A, теперь подключен к моей текущей системе System B в качестве дополнительного диска /dev/sdb для восстановления файловой системы / данных. , В настоящее время он не монтируется в системе B.

Вот вывод fdisk -l в системе B:

$ fdisk -l
Disk /dev/sda: 250.1 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders, total 488397168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x8e678e67

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048   475813887   237905920   83  Linux
/dev/sda2       475813888   488396799     6291456   82  Linux swap / Solaris

Disk /dev/sdb: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders, total 156301488 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *        2048     1026047      512000   83  Linux
/dev/sdb2         1026048   156301311    77637632   8e  Linux LVM

Вопрос: Если на /dev/sda работает исправная установка Fedora 16, отличная от LVM, как мне вручную смонтировать /dev/sdb (с поврежденной MBR) где-нибудь внутри системы B, чтобы иметь возможность восстановить все данные из нее? (Кстати, данные хранятся в файловой системе ext4 внутри.)

Что я уже пробовал:

а) я выпустил pvs и получил это:

(Обратите внимание, что столбец VG пуст!)

$ pvs
  PV         VG   Fmt  Attr PSize  PFree 
  /dev/sdb2       lvm2 a--  74.04g 74.04g

б) я выдал pvscan , я получил это:

$ pvscan
  PV /dev/sdb2                      lvm2 [74.04 GiB]
  Total: 1 [74.04 GiB] / in use: 0 [0   ] / in no VG: 1 [74.04 GiB]

c) У меня есть содержимое /etc/lvm/backup/vg_XYZ доступное со мной из более ранней резервной копии. Но я не знаю, как вывести / построить имя тома и пути к нему из этого файла (обратите внимание, что в этом файле / dev / sda2 представляет интересующий раздел, который теперь стал / dev / sdb2 в существующей системе, системе B):

# Generated by LVM2 version 2.02.84(2) (2011-02-09): Tue Oct 25 22:10:55 2011

contents = "Text Format Volume Group"
version = 1

description = "Created *after* executing 'vgchange -a y --sysinit'"

creation_host = "XYZ"   # Linux XYZ 2.6.38.6-26.rc1.fc15.i686.PAE #1 SMP Mon May 9 20:36:50 UTC 2011 i686
creation_time = 1319560855      # Tue Oct 25 22:10:55 2011

vg_XYZ {
        id = "WN8593-xRnx-dn29-rcpb-tRAm-Bs5R-93DGWw"
        seqno = 3
        status = ["RESIZEABLE", "READ", "WRITE"]
        flags = []
        extent_size = 65536             # 32 Megabytes
        max_lv = 0
        max_pv = 0
        metadata_copies = 0

        physical_volumes {

                pv0 {
                        id = "voQHGq-9m5t-u39a-UBWP-1qKM-sS4M-t3EPYG"
                        device = "/dev/sda2"    # Hint only

                        status = ["ALLOCATABLE"]
                        flags = []
                        dev_size = 155275264    # 74.041 Gigabytes
                        pe_start = 2048
                        pe_count = 2369 # 74.0312 Gigabytes
                }
        }

        logical_volumes {

                lv_swap {
                        id = "Osi18q-409G-iG1s-Mdb2-00Lt-wtQV-WpF2mN"
                        status = ["READ", "WRITE", "VISIBLE"]
                        flags = []
                        segment_count = 1

                        segment1 {
                                start_extent = 0
                                extent_count = 126      # 3.9375 Gigabytes

                                type = "striped"
                                stripe_count = 1        # linear

                                stripes = [
                                        "pv0", 0
                                ]
                        }
                }

                lv_root {
                        id = "Wc8qdx-sYKi-qFeM-Bv48-YvZC-ClGU-VrYl4W"
                        status = ["READ", "WRITE", "VISIBLE"]
                        flags = []
                        segment_count = 1

                        segment1 {
                                start_extent = 0
                                extent_count = 2243     # 70.0938 Gigabytes

                                type = "striped"
                                stripe_count = 1        # linear

                                stripes = [
                                        "pv0", 126
                                ]
                        }
                }
        }
}

Ваша быстрая помощь будет принята с благодарностью, в противном случае у меня будут настоящие проблемы!

Спасибо заранее...

/HS

3 ответа3

3

Попробуйте выполнить следующие шаги по порядку.


РЕДАКТИРОВАТЬ (Гарри)

  1. Пришлось сделать vgcfgrestore чтобы остальные команды, перечисленные ниже (начиная с vgscan), вступили в силу.

    vgcfgrestore vg_XYZ

  2. Кроме того, для успешного монтирования необходимо было создать e2fsck -y /dev/vg_XYZ/lv_root .

Подробности описаны в этом сообщении comp.os.linux.setup здесь.


Поскольку вы уже сделали pvscan , перейдите к vgscan:

vgscan --partial --mknodes --verbose

Если повезет, это должно обнаружить группу vg_XYZ в /dev/sdb2 и создать все необходимые узлы устройств в /dev .

Затем сделайте группу томов доступной:

vgchange -a y vg_XYZ

Следуйте этому с lvscan:

lvscan --verbose

И наконец, сделайте логический том доступным:

lvchange -a y vg_XYZ/lv_root

Теперь вы должны иметь возможность монтировать lv_root где-нибудь для доступа к его данным, например

mkdir -p /mnt/rescue
mount -t ext4 -o ro /dev/vg_XYZ/lv_root /mnt/rescue

Удачи!

2

PartedMagic LiveCD /USB имеет все виды инструментов, которые могут восстановить MBR с этого диска. testdisk один, и я знаю, что есть и другие. Это несколько раз спасло мой скин от плохо набранных команд, поэтому dd называют « disk destroyer .

1

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

dmsetup create foo --table "0 146997248 linear /dev/sdb2 8259584"
mount -o ro /dev/mapper/foo /mnt

Числа рассчитываются как:

146997248 = extent_count * extent_size = 2243 * 65536
8259584 = pe_start + 126 * extent_size = 2048 + 126 * 65536

Это НЕ ПРОВЕРЕНО. Если резервное копирование не дает точного представления о текущей конфигурации (или если у меня неверные расчеты - я воспроизвел их по аналогии с локальной конфигурацией, а не с достаточно глубоким пониманием LVM), тогда оно не будет работать ,

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .