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.