Sujet unique Si vous avez supprimé « Macintosh HD »

Bloc de code:
-bash-3.2# gpt show disk0
      start       size  index  contents
          0          1         PMBR
          1          1         Pri GPT header
          2         32         Pri GPT table
         34  468862061        
  468862095         32         Sec GPT table
  468862127          1         Sec GPT header
-bash-3.2#
 
Alors on va expérimenter des « recréations spéculatives » de partitions. Il s'agit de définir dans la table GPT de l'en-tête du disque > des descripteurs de partitions conformes à des spéculations de ce que devaient être les partitions originelles. Ces créations n'écrivent rien aux blocs du disque > passés les blocs 1 > 33 où réside la table GPT.

----------

On va d'abord recréer le descripteur de la partition de type EFI > qui se trouve localisée par défaut sur les blocs à partir du n° 40 (bloc de tête) > pour une extension de 409600 blocs => sur un disque dont la table est GPT.

Voici la commande à passer :
Bloc de code:
gpt add -b 40 -s 409600 -t C12A7328-F81F-11D2-BA4B-00A0C93EC93B -i 1 /dev/disk0

  • pour la passer > effectue un copier-coller à rebours : tu la copies ici avec Safari > tu la colles dans le terminal > tu l'exécutes
  • la commande crée un descripteur tel que : rang = 1 > type = EFI (défini par l'UUID de ce type) > taille = 409600 blocs de 512 octets (209,7 Mo)

Poste le retour.
 
Bloc de code:
-bash-3.2# gpt add -b 40 -s 409600 -t C12A7328-F81F-11D2-BA4B-00A0C93EC93B -i 1 /dev/disk0
/dev/disk0s1 added
-bash-3.2#
 
Partition ajoutée avec l'index d'appareil disk0s1.

Passe les 2 commandes (l'une après l'autre) :
Bloc de code:
diskutil list disk0
diskutil info disk0s1

  • la 1ère affiche la configuration actuelle du SSD seul
  • la 2è affiche un tableau d'informations sur la partition qui vient d'être recréée

Poste les 2 retours.
 
Bloc de code:
-bash-3.2# diskutil list disk0
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *240.1 GB   disk0
   1:                        EFI                         209.7 MB   disk0s1
-bash-3.2# diskutil info disk0s1
   Device Identifier:        disk0s1
   Device Node:              /dev/disk0s1
   Part of Whole:            disk0
   Device / Media Name:      Untitled 1

   Volume Name:              Not applicable (no file system)

   Mounted:                  Not applicable (no file system)

   File System:              None

   Partition Type:           EFI
   OS Can Be Installed:      No
   Media Type:               Generic
   Protocol:                 SATA
   SMART Status:             Verified

   Total Size:               209.7 MB (209715200 Bytes) (exactly 409600 512-Byte-Blocks)
   Volume Free Space:        Not applicable (no file system)
   Device Block Size:        512 Bytes

   Read-Only Media:          No
   Read-Only Volume:         Not applicable (no file system)
   Ejectable:                No

   Whole:                    No
   Internal:                 Yes
   Solid State:              Yes

-bash-3.2#
 
La partition est bien affichée recréée -->
Bloc de code:
   1:                        EFI                         209.7 MB   disk0s1

  • mais le tableau d'informations révèle qu'il ne s'agit que d'un conteneur de blocs bruts > ne recelant aucun système de fichiers > qui aurait défini un volume (non monté par défaut) intitulé lui-même EFI.
  • voici le raisonnement qui dirige les « recréations spéculatives » : à supposer que seule la table GPT ait été "dépouillée" de ses descripteurs => les systèmes de fichiers (structures logicielles inscrites sur les blocs de départ des partitions originelles et formateurs des volumes sur ces partitions) --> sont restés intouchés. Le bloc cardinal en ce qui concerne un système de fichiers est le 1er bloc sur lequel se trouve inscrit son « header » = en-tête. Ce bloc est le « super-bloc » d'un système de fichiers. Il doit nécessairement équivaloir au 1er bloc d'une partition recréée via la recréation de son descripteur dans la GPT => pour que ce système de fichiers puisse se trouver réactivé et reformer de nouveau le volume originel sur la partition.
  • dans le cas d'une partition de type EFI > le « super-bloc » du système de fichiers FAT-32 (qui est le défaut pour cette partition) est toujours canoniquement le bloc n°40 du disque. On a donc recrééé un descripteur de partition tel que le bloc n°40 du disque => soit le 1er bloc de cette partition. En escomptant par là que le « super-bloc » du FAT-32 se trouve récupéré en bloc initial > ce qui permettrait de récupérer aussi le volume EFI sur cette partition.
  • je suis forcé de constater qu'aucun système de fichiers FAT-32 > dont le bloc n°40 du disque (= le 1er bloc de la partition recréée) => aurait été le « super-bloc » --> ne se trouve attesté. Cela me donne l'impression qu'il n'y a pas eu qu'un effacement de descripteurs dans la GPT > les systèmes de fichiers des anciennes partitions ayant été laissés intacts sur les blocs du disque --> mais qu'il y aurait eu effacement de systèmes de fichiers - du moins celui de la partition EFI1.

Passe la commande :
Bloc de code:
diskutil repairDisk disk0

  • à validation > une demande de confirmation s'affiche --> tape y (comme yes) et revalide
  • la commande répare le disque > en consolidant la partition EFI (entre autres choses)

Poste l'affichage retourné.
 
Bloc de code:
-bash-3.2# diskutil repairDisk disk0
Repairing the partition map might erase disk0s1, proceed? (y/N) y
Started partition map repair on disk0
Checking prerequisites
Checking the partition list
Problems were encountered during repair of the partition map
Error: -69770: Partition map check failed because no slices were found
-bash-3.2#
 
Le message d'erreur déclare que la table de partition n'a pas pu être réparée > car aucune partition (slice = tranche de disque) n'a été trouvée. Or on vient d'en recréer une de partition : la partition EFI.

Bon ! --> comme la partition EFI n'a qu'une valeur fonctionnelle et reste sans enjeux ici > passe la commande :
Bloc de code:
diskutil eraseDisk free null gpt disk0

  • cette commande recrée une nouvelle GPT (principale & secondaire) qui va se réinscrire sur les mêmes alignements de blocs que précédemment. Cette recréation va automatiquement régénérer une partition EFI valide (nanti d'un système de fichiers FAT-32 et d'un volume) > exactement à l'emplacement canonique de cette partition. Les termes : free null intercalés dans la commande => interdisent qu'aucune autre partition ne se trouve créée > ce qui inscrirait un système de fichiers neuf définissant un nouveau volume. Donc tous les blocs du disque entre la partition EFI et la GPT secondaire de queue de disque vont rester intouchés.

Poste l'affichage retourné.
 
Bloc de code:
-bash-3.2# diskutil eraseDisk free null gpt disk0
Started erase on disk0
Unmounting disk
Creating the partition map
Waiting for the disks to reappear
Finished erase on disk0
-bash-3.2#
-bash-3.2# diskutil eraseDisk free null gpt disk0
Started erase on disk0
Unmounting disk
Creating the partition map
Waiting for the disks to reappear
Finished erase on disk0
-bash-3.2#
 
Opération réussie. Passe les 2 commandes :
Bloc de code:
diskutil list disk0
gpt show disk0

  • qui affichent la configuration actuelle du SSD et la distribution de ses blocs

Poste les tableaux.
 
Bloc de code:
-bash-3.2# diskutil list disk0
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *240.1 GB   disk0
   1:                        EFI                         209.7 MB   disk0s1
-bash-3.2# gpt show disk0
      start       size  index  contents
          0          1         PMBR
          1          1         Pri GPT header
          2         32         Pri GPT table
         34          6        
         40     409600      1  GPT part - C12A7328-F81F-11D2-BA4B-00A0C93EC93B
     409640  468452455        
  468862095         32         Sec GPT table
  468862127          1         Sec GPT header
-bash-3.2#
 
Tout est conforme aux attentes. Il est à noter que la commande diskutil dans le terminal d'une session de secours Lion --> n'affiche pas le volume EFI sur la partition n°1.

----------

Il reste à gérer les blocs qui commencent au n°409640 > pour une extension de 468452455 blocs. Une recréation spéculative épineuse.

  • on sait qu'une partition de secours de 650 Mo = exactement 1269536 blocs --> se situe en 3è position sur le disque. Un écart canonique de 7 blocs libres sépare la fin de cette partition du bloc n°468862095 où commence la GPT secondaire. 1269536 + 7 = 1269543 blocs doivent être laissés libres en queue de disque en vue de la création de cette partition. Sachant qu'aucun bloc ne doit séparer la partition de secours de la partition-Système de l'OS => la partition-Système de l'OS doit avoir une taille de 468452455 - 1269543 = 467182912 blocs.
  • on sait qu'aucun bloc libre ne doit séparer la partition-Système de l'OS de la partition EFI supérieure. Le 1er bloc libre en-dessous de la partition EFI = le n°409640 --> va donc devoir être le 1er bloc de la partition-Système à créer > en escomptant que ce bloc soit bien le « super-bloc » du système de fichiers préservé = le générateur du volume Macintosh HD.
  • on sait que le programme d'installation d'El Capitan avait pour routine de générer un système de stockage CoreStorage sur la partition-Système. Conformément à cette routine > on va spéculer que le type de la partition-Système à recréer => doit être "Apple_CoreStorage".
----------

Passe la commande :
Bloc de code:
gpt add -b 409640 -s 467182912 -t 53746F72-6167-11AA-AA11-00306543ECAC -i 2 /dev/disk0

  • passe-la en copier-coller à rebours
  • la commande crée un nouveau descripteur dans la GPT tel que : rang = 2 > type = "Apple_CoreStorage" (via l'UUID de ce type) > bloc de tête = n° 409640 > extension = 467182912 blocs (239.197 Go)

Poste le retour.
 
Bloc de code:
-bash-3.2# gpt add -b 409640 -s 467182912 -t 53746F72-6167-11AA-AA11-00306543ECAC -i 2 /dev/disk0
/dev/disk0s2 added
-bash-3.2#
 
Alors voici la commande informative qui constitue le juge de paix de la recréation spéculative -->

- passe la commande :
Bloc de code:
diskutil list disk0

  • et poste le tableau de la configuration du SDD.
 
Bloc de code:
-bash-3.2# diskutil list disk0
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *240.1 GB   disk0
   1:                        EFI                         209.7 MB   disk0s1
   2:          Apple_CoreStorage                         239.2 GB   disk0s2
-bash-3.2#
 
On voit bien une partition de type "Apple_CoreStorage". Mais je m'avise à présent que > si elle exporte un Logical Volume --> celui-ci doit se trouver listé en queue de tableau des disques.

Passe la commande globale :
Bloc de code:
diskutil list

  • et poste le tableau complet des disques.
 
Bloc de code:
-bash-3.2# diskutil list
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *240.1 GB   disk0
   1:                        EFI                         209.7 MB   disk0s1
   2:          Apple_CoreStorage                         239.2 GB   disk0s2
/dev/disk1
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *500.1 GB   disk1
   1:                        EFI                         209.7 MB   disk1s1
   2:                  Apple_HFS Bootcamp                499.8 GB   disk1s2
/dev/disk2
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     Apple_partition_scheme                        *1.4 GB     disk2
   1:        Apple_partition_map                         30.7 KB    disk2s1
   2:         Apple_Driver_ATAPI                         2.0 KB     disk2s2
   3:                  Apple_HFS Mac OS X Base System    1.4 GB     disk2s3
/dev/disk3
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                            untitled               *524.3 KB   disk3
/dev/disk4
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                            untitled               *524.3 KB   disk4
/dev/disk5
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                            untitled               *524.3 KB   disk5
/dev/disk6
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                            untitled               *524.3 KB   disk6
/dev/disk7
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                            untitled               *524.3 KB   disk7
/dev/disk8
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                            untitled               *6.3 MB     disk8
/dev/disk9
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                            untitled               *2.1 MB     disk9
/dev/disk10
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                            untitled               *1.0 MB     disk10
/dev/disk11
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                            untitled               *524.3 KB   disk11
/dev/disk12
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                            untitled               *524.3 KB   disk12
/dev/disk13
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                            untitled               *1.0 MB     disk13
-bash-3.2#
 
On ne voit rien. Passe la commande :
Bloc de code:
diskutil cs list

  • qui affiche le tableau d'un Groupe de Volumes Logiques > s'il en existe un

Poste le retour.
 
Bloc de code:
-bash-3.2# diskutil cs list
CoreStorage logical volume groups (1 found)
|
+-- Logical Volume Group 8DD76351-DC89-466F-84C3-B64B7F85628A
    =========================================================
    Name:         Macintosh SSD
    Sequence:     2
    Free Space:   21655552 B (21.7 MB)
    |
    +-< Physical Volume 7859C85E-BA07-42A6-91B3-D23D8A2FDFC1
    |   ----------------------------------------------------
    |   Index:    0
    |   Disk:     disk0s2
    |   Status:   Online
    |   Size:     239197650944 B (239.2 GB)
    |
    +-> Logical Volume Family B546BE45-8091-41E1-834A-E7C85528ADB6
        ----------------------------------------------------------
        Sequence:               13
        Encryption Status:      Locked
        Encryption Type:        AES-XTS
        Encryption Context:     Present
        Conversion Status:      Complete
        Has Encrypted Extents:  Yes
        Conversion Direction:   -none-
        |
        +-> Logical Volume 4967BE40-C225-475D-B37C-0763160C1C76
            ---------------------------------------------------
            Disk:               -none-
            Status:             Locked
            Sequence:           6
            Size (Total):       238840446976 B (238.8 GB)
            Size (Converted):   -none-
            Revertible:         Yes (unlock and decryption required)
            LV Name:            Macintosh SSD
            Content Hint:       Apple_HFS
-bash-3.2#
 
Victoire ! -->

- la recréation spéculative a bien récupéré au complet un système de stockage CoreStorage inscrit dans la partition disk0s2. Le bloc n°409640 était bien le « super-bloc » où résidait le header du CoreStorage.​

- ce CoreStorage est chiffré (FileVault était activé). Ce qui fait que le Logical Volume (espace-disque virtuel) n'est pas actuellement exporté par la partition (situation de verrouillage). Le volume Macintosh SSD (dont on apprend l'intitulé) => n'est donc pas monté.​

Passe la commande :
Bloc de code:
diskutil coreStorage unlockVolume 4967BE40-C225-475D-B37C-0763160C1C76 -passphrase toto

  • tu la saisis en copier-coller à rebours. Mais ! --> à la fin > tu remplaces mon toto par ton mot-de-passe d'ouverture de session saisi en clair

Poste l'affichage retourné.