Volumen LVM con MBR corrupto: ¿cómo montar y recuperar datos del mismo?

Volumen LVM con MBR corrupto: ¿cómo montar y recuperar datos del mismo?

Soy nuevo en LVM y en la partición en general, por lo que estoy en una situación aquí.

La situación:

Accidentalmente sobrescribí el MBR de un disco LVM creado con Fedora 16.

Ahora, todo lo demás en este disco está intacto; sólo el MBR ha sido corrompido (y eso también, sólo los primeros 446 de sus 512 bytes). Había dañado el MBR al emitir accidentalmente:

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

Este disco (con MBR corrupto), que inicialmente fue/dev/sdaen el Sistema A, ahora está conectado a mi sistema actual, el Sistema B, como disco secundario,/dev/sdb, con el fin de recuperar datos/sistemas de archivos. Actualmente no se puede montar en el Sistema B.

Aquí está el fdisk -lresultado en el Sistema 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

Pregunta:Con/dev/sdaejecutando una configuración saludable y no LVM de Fedora 16, ¿cómo lo monto manualmente?/dev/sdb(con MBR corrupto) en algún lugar dentro del Sistema B para poder recuperar todos los datos del mismo? (Los datos, por cierto, se almacenan en un sistema de archivos ext4 en su interior).

Lo que he probado hasta ahora:

a) Emití pvsy obtuve esto:

(¡Observe cómo la columna VG está vacía!)

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

b) Emití pvscan, obtuve esto:

$ 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) Tengo /etc/lvm/backup/vg_XYZdisponible el contenido de una copia de seguridad anterior. Pero no sé cómo inferir/construir el nombre del volumen y las rutas del volumen a partir de este archivo (tenga en cuenta que, en este archivo,/dev/sda2es la partición de intereses que ahora se ha convertido/dev/sdb2en el sistema actual, Sistema 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
                                ]
                        }
                }
        }
}

Su pronta ayuda sería muy apreciada, de lo contrario, ¡estoy en un verdadero problema!

Muchas gracias de antemano...

/HS

Respuesta1

Pruebe los siguientes pasos en orden.


EDITAR (por Harry)

  1. Tuve que hacer un vgcfgrestorepara que el resto de los comandos enumerados a continuación (comenzando con vgscan) surtieran efecto.

    vgcfgrestore vg_XYZ

  2. También tuve que hacer un esfuerzo e2fsck -y /dev/vg_XYZ/lv_rootpara que la montura tuviera éxito.

Detalles descritos en esta publicación de comp.os.linux.setupaquí.


Como ya has hecho un pvscan, continúa con vgscan:

vgscan --partial --mknodes --verbose

Con suerte, eso debería descubrir el grupo de volúmenes vg_XYZen /dev/sdb2y crear los nodos de dispositivo necesarios en /dev.

A continuación, haga que el grupo de volúmenes esté disponible:

vgchange -a y vg_XYZ

Continúe con un lvscan:

lvscan --verbose

Y finalmente, haga que el volumen lógico esté disponible:

lvchange -a y vg_XYZ/lv_root

Ahora debería poder montarse lv_rooten algún lugar para acceder a sus datos, por ejemplo

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

¡Buena suerte!

Respuesta2

elMagia separadaliveCD/USB tiene todo tipo de herramientas que podrían recuperar el MBR de ese disco.testdiskes uno, y sé que hay otros. Me salvó el pellejo varias veces debido a comandos mal escritos, hay una razón por ddla que se le apoda disk destroyer.

Respuesta3

Es posible que pueda crear el dispositivo manualmente utilizando los números que se encuentran en el archivo de copia de seguridad.

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

Los números se calculan como:

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

Esto NO ESTÁ PROBADO. Si la copia de seguridad no proporciona una imagen precisa de la configuración actual (o si hice mal los cálculos; los reproduje por analogía con la configuración local en lugar de tener un conocimiento suficientemente profundo de LVM), entonces no funcionará. .

información relacionada