SysFailure

Imprimer

Montage d'une partition HFS+

.

Linux est parfaitement capable de gérer, en lecture et en écriture, une partition HFS+ (MacOS). Le montage d'une telle partition nécessite diverses opérations sans grande complexité, sauf dans quelques cas pathologiques.

 Montage de la partition

 Module noyau nécessaire

Le module noyau se nomme hfsplus. Lors de la configuration d'un noyau, il est accessible par

File Systems -->
     Miscellaneous filesystems -->
          Apple Macintosh file system support
          Apple Extended HFS file system support

Le premier module (Apple Macintosh file system support) correspond aux systèmes de fichiers HFS, qui ne sont pratiquement plus utilisés. Ce module permet de lire, mais pas d'écrire, sur un tel système de fichiers. Le second module (Apple Extended HFS file system support) est celui qui nous intéresse pour HFS+.

Le module peut être inclus dans le noyau ou compilé en tant que module chargeable.

Commande de montage

Dans le cas qui nous intéresse, nous avons fait une copie du disque dur sous la forme d'un fichier (format brut, copie réalisée à l'aide de dd ou similaire; voir par exemple l'article sur rEFIND). Il convient donc de passer par losetup pour transformer virtuellement ce fichier en un descripteur de périphérique (/dev/loopX).

En théorie, mount accepte les principaux paramètres de losetup, et tout peut être exécuté en une seule commande. Dans la pratique, nous avons souvent rencontré des situations où mount ne prenait pas correctement en compte certains paramètres de losetup. Il suffit alors de décomposer la commande en deux temps, d'abord losetup, puis mount.

Nous commençons par déterminer l'organisation du support et des partitions, à l'aide de fdisk, parted ou, ici, mmls :

$ mmls disque-128G.dd
GUID Partition Table (EFI)
Offset Sector: 0
Units are in 512-byte sectors

     Slot    Start        End          Length       Description
00:  Meta    0000000000   0000000000   0000000001   Safety Table
01:  -----   0000000000   0000000039   0000000040   Unallocated
02:  Meta    0000000001   0000000001   0000000001   GPT Header
03:  Meta    0000000002   0000000033   0000000032   Partition Table
04:  00      0000000040   0000409639   0000409600   EFI System Partition
05:  01      0000409640   0235708599   0235298960   Customer
06:  02      0235708600   0236978135   0001269536   Recovery HD
07:  -----   0236978136   0236978175   0000000040   Unallocated

La partition qui nous intéresse porte ici le nom Customer. Elle commence au bloc 409640 et se termine au bloc 235708599, pour une taille totale de 235298960 blocs. La commande normale de montage est donc

$ mount -o ro,loop,offset=$((512*409640)), sizelimit=$((512*235298960)) disque-128G.dd point-de-montage

Les options transmises à mount sont :

  • ro : montage en lecture uniquement
  • loop : passer par losetup (montage d'un système de fichier présent dans un fichier)
  • offset : déplacement (en octets) pour atteindre le début de la partition
  • sizelimit : taille (en octets) de la partition. Ce paramètre est indispensable pour HFS+, du fait de la présence d'un second superbloc en fin de partition

 Si tout se passe correctement, la partition demandée est montée et peut être examinée. En cas de difficulté, la première chose à faire est de séparer losetup et  mount :

$ losetup --read-only -f --offset=$((512*409640)) --sizelimit=$((512*235298960)) disque-128G.dd
$ losetup -a
/dev/loop0: [64780]:145096713 (disque-128G.dd), offset 209735680, sizelimit 120473067520
$ mount -o ro /dev/loop0 point-de-montage

Dans la plupart des cas, la partition est montée correctement.