7 votos

¿Se puede recuperar el contenido de una partición después de sobrescribir la tabla de particiones?

Ejecuté un comando para hacer que mi hdd externo fuera arrancable sabiendo que era arriesgado teniendo en cuenta que el propio comando no me permitía especificar una partición en la que escribir. (En retrospectiva, ahora lo llamaría una decisión estúpida - pero en ese momento, probé este comando:)

$ sudo dd if=/Users/MyUser/Downloads/Fedora-17-x86_64-Live-Desktop.iso \
> of=/dev/disk1 bs=1m

Por lo que la salida que recibí fue:

645+0 records in
645+0 records out
676331520 bytes transferred in 98.578444 secs (6860846 bytes/sec)

Supe de inmediato que era sospechoso ya que /dev/disk1 se dividió en tres particiones, todas ellas hfs . Ya que es casi imposible encontrar bien información sobre cómo crear un arranque partición desde un dispositivo USB externo, lo intenté a pesar de los riesgos.

No volví a escribir en mi disco duro externo después de este punto, ya que ahora la única partición que veo cuando monto la unidad es 'Fedora 17'.

¿Qué probabilidades hay de recuperar los archivos que tenía almacenados en la partición de copia de seguridad? ¿Y cómo debe ¿He hecho esto en primer lugar?


NOTA : Así eran mis particiones antes de Intenté dd .

$ diskutil list
/dev/disk0
#:                       TYPE NAME                    SIZE       IDENTIFIER
0:      GUID_partition_scheme                        *160.0 GB   disk0
1:                        EFI                         209.7 MB   disk0s1
2:                  Apple_HFS Macintosh HD            159.7 GB   disk0s2
/dev/disk1
#:                       TYPE NAME                    SIZE       IDENTIFIER
0:      GUID_partition_scheme                        *1.0 TB     disk1
1:                        EFI                         209.7 MB   disk1s1
2:                  Apple_HFS Linux                   50.0 GB    disk1s2
3:                  Apple_HFS Backup                  500.0 GB   disk1s3
4:                  Apple_HFS Misc                    449.6 GB   disk1s4

6voto

John S Perayil Puntos 444

Rápido y sencillo: Como es un disco GPT puedes ejecutar gpart recover /dev/disk1 para fijar la mesa. Has volado los primeros ~700MB del disco, así que cualquier partición que toque esa zona también ha desaparecido (más o menos). El resto del disco debería estar bien. No estoy seguro de si OSX viene con gpart, así que puede que tengas que descargarlo de algún sitio.

Los detalles más largos: En cuanto a la(s) partición(es) que sólo se sobrescribieron parcialmente, algunos de los archivos pueden ser recuperables. Las herramientas para hacerlo son mucho más complicadas y querrás encontrar a alguien que realmente sabe lo que están haciendo para esto. Si te preocupa alguno de estos archivos no intentes nada excepto desenchufar la unidad. Además, los datos sobrescritos pueden probablemente ser recuperados por un servicio de recuperación de datos, pero esto costaría decenas de miles de dólares.

Además, si se tratara de un disco MBR estarías completamente perdido, a menos que conozcas el tamaño exacto y los offsets de todas las particiones. Esta información se puede imprimir desde fdisk, pero es mejor no cometer errores como este.

5voto

sara Puntos 91

De acuerdo con tu salida, copiaste 645MB al disco, lo que significa que la EFI y los primeros ~440MB de la partición Linux fueron sobreescritos. Tus particiones Backup y Misc no fueron modificadas, así que los datos en ellas pueden ser recuperados... si puedes encontrarlos.

Esto puede ser relativamente fácil 1 . Las tablas de partición GUID se almacenan tanto al principio como al final de la unidad, así que mientras OS X no sobrescriba las del final, podrás utilizarlas para encontrar tus datos.

1 En relación con la búsqueda manual de cabeceras HFS, los siguientes comandos son bastante sencillos. Sin embargo, este proceso es delicado, y si accidentalmente escribes los datos incorrectos podría empeorar las cosas.


En primer lugar, debe determinar el número de sectores de la unidad. En Terminal, ejecute diskutil info disk1 (o como sea que esté conectado tu disco actualmente), y busca la sección Tamaño Total. Debería listar el número exacto de sectores, y debajo el tamaño del sector. Llamaré a estos valores N y S, respectivamente.

A continuación, ejecute estos comandos, sustituyendo disk1, N y S según corresponda. Esto copiará el último bloque de tu disco a un archivo llamado partition_header.hex . Luego imprime algunos datos de ese archivo.

sudo dd if=/dev/disk1 of=partition_header.hex bs=S skip=$((N-1)) count=1
od -cN 8 partition_header.hex
od -tx4 -N 8 -j 72 partition_header.hex
-d -tu4 -N 4 -j 84 partition_header.hex

Los resultados de los tres od Los comandos deberían tener un aspecto similar al siguiente:

0000000    E   F   I       P   A   R   T      
0000110          xxxxxxxx        yyyyyyyy        
0000124              ssss               

Si la salida del primer comando no coincide con esa primera línea, sus tablas de partición han sido sobrescritas. Vea mis sugerencias al final. Los valores xxxxxxxx y yyyyyyyy son dos números hexadecimales. Deben ser números y letras entre a y f, y le indican dónde se almacenan los datos reales de la partición. El valor ssss es un número que indica el tamaño de una entrada de partición. Ejecute este comando para obtener los datos de la partición, sustituyendo disk1, S, xxxxxxxx , yyyyyyyy y ssss (nótese que la x después del 0 es literal). Si ssss es superior a 1/4 S, es posible que tenga que aumentar el parámetro de recuento, pero es poco probable.

sudo dd if=/dev/disk1 of=partition_entry.hex bs=S skip=$((0xyyyyyyyyxxxxxxxx)) count=1
od -tc -N 8 -j $((56+2*ssss)) partition_entry.hex
od -tc -N 8 -j $((56+3*ssss)) partition_entry.hex

Los dos últimos comandos imprimen el principio de los nombres de la tercera y cuarta partición, con cada letra seguida de \0 (debido a la codificación en disco). Si su tabla de particiones sigue siendo válida, éstas deberían ser "Back" y "Misc". Si es así, es hora de obtener la tabla de particiones completa y hacer las modificaciones necesarias para almacenarla en el otro extremo de la unidad. Ejecute estos dos comandos para obtener los LBA de cabecera adecuados y el número total de entradas de partición:

od -tx1 -N 16 -j 24 partition_header.hex
od -td4 -N 4 -j 80 partition_header.hex

El primer comando devuelve aa bb cc dd ee ff gg hh ii jj kk ll mm oo pp qq . Lo más probable, ii es 01 y jj a través de qq son 00 . El segundo comando devuelve nnnn probablemente 128. Ahora podemos leer toda la tabla de particiones, en lugar de sólo las primeras. Ejecute este comando, haciendo las sustituciones adecuadas:

sudo dd if=/dev/disk1 of=partition_entry.hex bs=ssss skip=$((0xyyyyyyyyxxxxxxxx * S / ssss)) count=nnnn

Ahora tenemos que hacer algunos cambios en la cabecera, ya que los datos se almacenarán en una ubicación diferente.

printf '\xii\xjj\xkk\xll\xmm\xoo\xpp\xqq\xaa\xbb\xcc\xdd\xee\xff\xgg\xhh' | dd of=partition_header.hex bs=8 seek=3 count=2 conv=notrunc
printf '\x02\x00\x00\x00\x00\x00\x00\x00' | dd of=partition_header.hex bs=8 seek=9 count=1 conv=notrunc

El primer comando intercambia la cabecera actual y otras direcciones de cabecera. Perdón por reemplazar cada byte por separado, pero no conocía una forma más fácil. El segundo comando escribe la nueva dirección de los datos de entrada. El valor 2 que usé es asumiendo que ii era 1 y jj a través de qq eran 0. Si tienen otros valores, basta con aumentar el conjunto en uno y utilizar eso en su lugar. Lo único que necesitamos ahora es el MBR correcto, que no está en tu disco ya que no forma parte de la tabla de particiones. Por suerte, puedes usar el de tu disco interno, así que necesitas copiarlo en un archivo.

sudo dd if=/dev/disk0 of=drive_mbr.hex bs=512 count=1

Ahora que tenemos todos los datos, podemos escribirlos. Primero, desmonta el volumen Fedora si está montado.

diskutil unmountDisk disk1

A continuación, copia cada pieza al principio de la unidad. Asegúrese de hacer las sustituciones adecuadas en estos comandos, escribir en el disco equivocado no sería bueno.

sudo dd if=partition_entry.hex of=/dev/disk1 bs=S seek=2 count=nnnn
sudo dd if=partition_header.hex of=/dev/disk1 bs=S seek=1 count=1
sudo dd if=drive_mbr.hex of=/dev/disk1 bs=512 count=1

Los valores de búsqueda se basan en el supuesto de que ii a través de qq coincidían con los valores probables. Si no lo hacen, utilice $((0xqqppoommllkkjjii)) para el segundo comando y $((0xqqppoommllkkjjii+1)) para el primero.

Después de ejecutar estos comandos, es probable que OS X recargue la unidad automáticamente y cargue las particiones. Si no lo hace, desconéctalo y vuelve a conectarlo. Lo más probable es que la partición Linux no se monte, ya que su cabecera se sobrescribió, pero es de esperar que las otras dos funcionen bien. Aún así, sugeriría copiar los datos de la unidad y reformatearla, o al menos copiar los datos de la partición EFI de la unidad interna.


Si su tabla de particiones está dañada:

La opción con más probabilidades de éxito es buscar manualmente las cabeceras HFS al principio de la partición de la copia de seguridad. El formato de un volumen HFS se describe aquí . Básicamente, tendrá que calcular el desplazamiento aproximado de la partición en la unidad utilizando el mapa de particiones que tiene, a continuación, busque en cada sector de la zona en busca de la cabecera del volumen. Probablemente podrías escribir un script que busque por ti.

Otra opción sería utilizar un software de recuperación de archivos. No sé qué software hay disponible que pueda manejar esta situación, así que no hay mucho que pueda decir al respecto.

2voto

Jon Cahill Puntos 2516

Después de haber hecho esto yo mismo:

# dd if=freebsd.img of=/dev/hda

en algún momento del pasado (¡ups! quise decir fd0 !) Puedo garantizar que el contenido de disk1s1 y disk1s2 están destrozadas.

Pero disk1s3 y disk1s4 ¡estará bien! Sólo tienes que averiguar lo que la tabla de particiones se supone que es y corregirlo.

Sugiero recuperar desde la copia de seguridad GPT al final del disco o simplemente buscar los marcadores del sistema de archivos para determinar dónde se supone que deben estar.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X