He podido salvar al menos la partición de OS X accediendo al Mac de forma remota a través de TeamViewer y restaurando el antiguo grupo de volúmenes lógicos de CoreStorage.
Estos son los pasos para recuperar el volumen de OS X:
- Arranque en modo de recuperación de Internet
- Adjuntar una unidad de disco duro de 16 GB
- Instalar un sistema completo en la unidad de disco duro. En el modo de recuperación de Internet se instala el sistema original con el que se entregó el Mac: Mountain Lion
- Después de arrancar desde la memoria USB y configurar una cuenta de administrador, el sistema se actualizó a El Capitán.
- wxHexEditor (un editor de discos en bruto) y TeamViewer (acceso remoto) fueron instalados.
Después de comprobar el disco con disktutil list
, diskutil cs list
y sudo gpt -r show disk0
el siguiente cuadro surgió:
- el disco tenía un MBR en lugar de un pMBR
- un Volumen CoreStorage fue configurado pero el Volumen Físico fue corrompido - ninguna Familia de Volumen Lógico y Lógico estaban disponibles.
- No hay volumen - ni OS X ni NTFS ni el volumen de recuperación funcionaban
Para restaurar una tabla de partición GUID el MBR tuvo que ser sobrescrito con
sudo dd if=/dev/zero of=/dev/disk0 bs=512 count=1
y había que crear una nueva tabla de partición GUID:
sudo gpt destroy disk0
sudo gpt create -f disk0
ha añadido una nueva partición EFI:
sudo gpt -i 1 40 -s 409600 -t C12A7328-F81F-11D2-BA4B-00A0C93EC93B disk0
y copié la EFI de la unidad de disco duro en el disco0s1:
sudo dd if=/dev/disk1s1 of=/dev/disk0s1 bs=4m
Ahora intenté determinar si la partición principal de OS X era CoreStorage o no CoreStorage con wxHexEditor:
En los volúmenes HFSJ normales los bloques 409640 y 409641 del disco (=bloque uno y dos de la partición OS X) suelen contener ceros y el bloque 409642 la cadena "HFSJ" en los primeros 16 bytes. El primer bloque de un CoreStorage contiene algunos no ceros - los dos bloques siguientes son iguales a las particiones no CoreStorage.
El bloque 409640 tenía algunos no-zeros, por lo que asumí que estaba "corestoriado".
El final de un grupo de volúmenes CoreStorage puede determinarse mediante cadenas de características en plista como objetos invisibles en el "área administrativa" del CoreStorage Volume Group.
La cadena "physicalVolumes" tiene cuatro apariciones cerca del final de un LVG. La última aparición es en el último bloque 8185 del LVG. Buscando las cadenas con wxHexEditor se determinó el último bloque.
Con el ejemplo anterior son 511246241792/512 + 8184 = bloque 998536000. El número de bloque tiene que ser divisible por ocho para 512 discos. Con el último bloque del LVG se puede añadir la segunda partición:
sudo gpt -i 2 409640 -s 998536000 -t 53746F72-6167-11AA-AA11-00306543ECAC disk0
El volumen roto volvió a aparecer. A continuación, se verificó y reparó el disco, así como los volúmenes. Se necesitaron varios intentos para reparar todos los errores del volumen. No intenté recuperar la partición de Windows 7.
El volumen principal era totalmente arrancable. Se hizo una copia de seguridad de todos los datos y se volvió a particionar la unidad. Se instaló un nuevo sistema y se transfirieron los datos de la copia de seguridad con el Asistente de Migración.