
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 -l
resultado 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í pvs
y 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_XYZ
disponible 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)
Tuve que hacer un
vgcfgrestore
para que el resto de los comandos enumerados a continuación (comenzando convgscan
) surtieran efecto.vgcfgrestore vg_XYZ
También tuve que hacer un esfuerzo
e2fsck -y /dev/vg_XYZ/lv_root
para 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_XYZ
en /dev/sdb2
y 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_root
en 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.testdisk
es uno, y sé que hay otros. Me salvó el pellejo varias veces debido a comandos mal escritos, hay una razón por dd
la 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á. .