Récupérer une partition FileVault 2 sans Recovery HD

Ceux d’entre vous qui me suivent sur Twitter ont eu l’occasion de suivre en live la mésaventure qu’il met arrivé l’autre jour sur l’une de mes machines. Pour les autres, voici le contexte :

J’ai participé aux bêta tests de 10.7.2 comme beaucoup d’autres administrateurs (c’est peu dire qu’on attendait beaucoup de cette mise à jour…). Durant cette phase, il y a certaines mises à jour que j’ai oublié de faire. Je me suis donc retrouvé avec un système en 10.7.2 final, mais avec une partition de récupération pas à jour. Pour aller plus vite, j’ai décidé de restaurer le contenu de la partition de récupération de mon Mac Pro vers mon MacBook Air, sauf que j’ai omis une chose : mon MacBook Air étant chiffré avec FileVault 2, sa partition de récupération contient des choses très spécifiques, entre autres les clefs de déchiffrement pour accéder au disque (ces clefs sont quant à elles chiffrées avec les mots de passe des utilisateurs).

Me voilà donc avec un MacBook Air verrouillé, sans système de démarrage et refusant en plus de démarrer sur tout disque externe ou NetBoot (je ne sais pas pourquoi).

Voici donc comment déchiffrer une partition FileVault 2 (à condition d’avoir sa clef de déchiffrement).

Pour ma part, la seule méthode qui m’a permis d’accéder à une ligne de commande sur ma machine fut de démarrer sur le système de récupération d’Apple sur Internet avec le raccourcit cmd-alt-R au démarrage.

Une fois le système démarré (2h en soirée, 1h le matin…) j’ai pu ouvrir une ligne de commande root et réparer mes bêtises.

LA ligne de commande à connaitre ici est diskutil avec son verbe coreStorage. Il permet de manipuler un agencement virtuel de disque (qui, soit dit en passant, est extrêmement intéressant).

Pour commencer, nous allons lister les disques de votre Mac :

$ diskutil coreStorage list
CoreStorage logical volume groups (1 found)
|
+-- Logical Volume Group 26B67367-CF79-4D1E-884C-BB96FDD79D19
    =========================================================
    Name:         FileVault
    Sequence:     1
    Free Space:   0 B (0 B)
    |
    +-< Physical Volume A446F211-3BCB-47F4-8EB2-7174AF4CD408
     |   ----------------------------------------------------
     |   Index:    0
     |   Disk:     disk4s2
     |   Status:   Online
     |   Size:     9896046592 B (9.9 GB)
     |
     +-> Logical Volume Family 8D077574-ADC1-4979-9F1E-FF901FC20D86
        ----------------------------------------------------------
        Sequence:               8
        Encryption Status:      Unlocked
        Encryption Type:        AES-XTS
        Encryption Context:     Present
        Conversion Status:      Complete
        Has Encrypted Extents:  Yes
        Conversion Direction:   -none-
        |
        +-> Logical Volume BD2C5D29-633D-4230-AE94-BE1D2C48BC10
            ---------------------------------------------------
            Disk:               disk5
            Status:             Online
            Sequence:           4
            Size (Total):       9577275392 B (9.6 GB)
            Size (Converted):   9577275392 B (9.6 GB)
            Revertible:         Yes (unlock and decryption required)
            LV Name:            FileVault
            Volume Name:        FileVault
            Content Hint:       Apple_HFS

 

Vous voyiez ici toute une arborescence de disque physique et logique permettant de faire plein de trucs sympa. Chaque composant de CoreStorage est identifié via un UUID. Ici, l’identifiant de la partition à déchiffrer est BD2C5D29-633D-4230-AE94-BE1D2C48BC10.

La seule chose qu’il nous est nécessaire de faire c’est de dire à CoreStorage d’annuler le chiffrement via sa commande revert :

diskutil coreStorage revert BD2C5D29-633D-4230-AE94-BE1D2C48BC10 -passphrase toto

Ici toto représente le mot de passe que FileVault 2 vous avez dit de conserver précieusement…

La ligne de commande finale ressemble donc à ceci :

$ diskutil coreStorage revert BD2C5D29-633D-4230-AE94-BE1D2C48BC10 -passphrase 2NTO-LQGA-RMXG-LFQO-B8NR-XTCT
Authentication required for reverting a locked volume
Started CoreStorage operation on disk4s2 FileVault
Finished CoreStorage operation on disk4s2 FileVault
Decryption in progress; use `diskutil coreStorage list` for status

On va donc s’exécuter :

# diskutil coreStorage list
CoreStorage logical volume groups (1 found)
|
+-- Logical Volume Group 26B67367-CF79-4D1E-884C-BB96FDD79D19
    =========================================================
    Name:         FileVault
    Sequence:     1
    Free Space:   0 B (0 B)
    |
    +-< Physical Volume A446F211-3BCB-47F4-8EB2-7174AF4CD408
     |   ----------------------------------------------------
     |   Index:    0
     |   Disk:     disk4s2
     |   Status:   Online
     |   Size:     9896046592 B (9.9 GB)
     |
     +-> Logical Volume Family 8D077574-ADC1-4979-9F1E-FF901FC20D86
        ----------------------------------------------------------
        Sequence:               11
        Encryption Status:      Unlocked
        Encryption Type:        None
        Encryption Context:     Present
        Conversion Status:      Converting
        Has Encrypted Extents:  Yes
        Conversion Direction:   backward
        |
        +-> Logical Volume BD2C5D29-633D-4230-AE94-BE1D2C48BC10
            ---------------------------------------------------
            Disk:               disk5
            Status:             Online
            Sequence:           4
            Size (Total):       9577275392 B (9.6 GB)
            Size (Converted):   62914560 B (62.9 MB)
            Revertible:         Yes (unlock and decryption required)
            LV Name:            FileVault
            Volume Name:        FileVault
            Content Hint:       Apple_HFS

 

Nous voyons qu’effectivement le système est en train de convertir notre volume, il ne reste plus qu’à attendre la fin en vérifiant régulièrement l’état du système. À la fin, il ne doit rester plus aucun volume CoreStorage.

$ diskutil coreStorage list
No CoreStorage logical volume groups found

Laisser un commentaire