Title: Accès à une partition HFS+ depuis Linux
Subject: HFS+ et Linux
Author: Jean-Francois BECKERS
Date: 31 Jan 2006
Version: 1.0
Translation:
Licence: Creative Commons

Introduction :

Dans notre travail quotidien, nous sommes parfois confrontés à un système Apple/Macintosh.
La connaissance de Mac OS X et du Mac en général n'étant pas chose commune parmi nous, voici une petite introduction pour accéder aux données d'un disque Mac depuis votre Linux.

Prendre une copie DD du disque original :

La première étape est de prendre un copie du disque dur. Il existe pour ce faire, différents moyens.
-    Extraction du disque=> difficile sur les nouveaux iMac !!
-    Target Disk Mode => si plusieurs disques présents, seul le premier est accessible en TDM (PowerMac)
-    boot CD LinuxPPC
     -    USB2/Firewire
     -    Network

Consulter les différents liens à la fin de cet article pour plus d'informations.

Accéder aux données :

Pour consulter les données sauvegardées sur le disque Mac, il faut « monter » la partition HFS+ contenue sur le disque.

Le disque dur d'un Mac ne comporte pas une table des partitions compatible DOS comme dans les PC. L'utilisation de la commande « fdisk » sur un Linux PC n'apporte donc pas la solution espérée.

jfbeckers@jfhome:/media/ieee1394$ fdisk -l powerbook_g4.dd

Disque powerbook_g4.dd: 0 Mo, 0 octets
255 têtes, 63 secteurs/piste, 0 cylindres
Unités = cylindres de 16065 * 512 = 8225280 octets

Disque powerbook_g4.dd ne contient pas une table de partition valide

Nous pouvons cependant extraire les informations nécessaires grâce à la commande "disktype".

jfbeckers@jfhome:/media/ieee1394disk$ disktype powerbook_g4.dd

Regular file, size 27.95 GiB (30005821440 bytes)
Apple partition map, 3 entries
Partition 1: 31.50 KiB (32256 bytes, 63 sectors from 1)
   Type "Apple_partition_map"
Partition 2: 27.95 GiB (30005784576 bytes, 58605048 sectors from 64)
   Type "Apple_HFS"
   HFS Plus file system
    Volume size 27.95 GiB (30005784576 bytes, 7325631 blocks of 4 KiB)
Partition 3: 4 KiB (4096 bytes, 8 sectors from 58605112)
   Type "Apple_Free"

Dans le cas présent, c'est la partition n°2 qui contient les données utiles pour notre analyse.
Il suffit donc d'utiliser "mount" avec les bonnes options pour rendre les données lisibles. Comme nous désirons accéder à une partition au format "HFS+", il faut spécifier le type de système de fichier.

mount -t hfsplus -r -o loop,offset=$((64*512)) powerbook_g4.dd /media/mac_hd/

Il est maintenant possible de consulter le contenu de disque Mac grâce à notre système Linux.
L'avantage des nouveaux Mac étant d'être basé sur un système UNIX, les utilisateurs Linux n'auront pas trop de mal à se retrouver dans les répertoires du système.

jfbeckers@jfhome:/media/ieee1394disk$ ls -lahtr /media/mac_hd/
total 13M
drwxrwxr-x 1 root 80 39 2002-05-29 19:42 Library
drwxrwxr-x 1 root 80 53 2002-05-30 00:01 Applications
drwxr-xr-x 1 root root 6 2003-09-12 22:41 Network
drwxrwxr-t 1 root 80 2 2003-09-12 22:41 cores
-rw-r--r-- 1 root root 3,7M 2004-08-08 01:04 mach_kernel
drwxrwxr-t 1 root 80 7 2004-08-09 18:23 Users
-rw-r--r-- 1 root 80 64K 2004-09-12 08:16 Desktop DB
..........
-rw-r--r-- 1 root 80 476K 2004-10-04 16:29 Desktop DF
-rwxrwxr-x 1 501 80 6,1K 2004-10-07 21:15 .DS_Store
drwxr-xr-x 1 root root 5 2004-10-09 22:05 private
drwxrwxr-t 1 root 80 34 2004-10-09 22:05 .
drwxrwxrwt 1 root 80 3 2004-10-16 19:30 Volumes
drwxr-xr-x 12 root root 4,0K 2006-01-24 10:59 ..

Voici donc pour un cas simple, un disque et une partition HFS+. Comme dans notre travail quotidien, les choses ne sont presque jamais simples, voici une autre situation.

jfbeckers@jfhome:/media/ieee1394disk/pOWERBOOK$ disktype Powerbook_G3.dd

--- Powerbook_G3.dd
Regular file, size 18.63 GiB (20003913728 bytes)
Apple partition map, 13 entries
Partition 1: 31.50 KiB (32256 bytes, 63 sectors from 1)
   Type "Apple_partition_map"
Partition 2: 27 KiB (27648 bytes, 54 sectors from 64)
   Type "Apple_Driver43"
Partition 3: 37 KiB (37888 bytes, 74 sectors from 118)
   Type "Apple_Driver43"
Partition 4: 27 KiB (27648 bytes, 54 sectors from 192)
   Type "Apple_Driver_ATA"
Partition 5: 37 KiB (37888 bytes, 74 sectors from 246)
   Type "Apple_Driver_ATA"
Partition 6: 100 KiB (102400 bytes, 200 sectors from 320)
   Type "Apple_FWDriver"
   Blank disk/medium
Partition 7: 256 KiB (262144 bytes, 512 sectors from 520)
   Type "Apple_Driver_IOKit"
   Blank disk/medium
Partition 8: 256 KiB (262144 bytes, 512 sectors from 1032)
   Type "Apple_Patches"
Partition 9: 1.951 GiB (2095054848 bytes, 4091904 sectors from 1544)
   Type "Apple_HFS"
   HFS file system
     Volume name "Macintosh HD"
     Volume size 1.951 GiB (2095022080 bytes, 63935 blocks of 32 KiB)
   HFS wrapper for HFS Plus
     HFS Plus file system
       Volume size 1.951 GiB (2094825472 bytes, 511432 blocks of 4 KiB)
       Volume name "Macintosh HD"
Partition 10: 1.048 GiB (1125679616 bytes, 2198593 sectors from 4093448)
   Type "Apple_HFS"
   HFS file system
     Volume name "Cache"
     Volume size 1.048 GiB (1125662720 bytes, 54964 blocks of 20 KiB)
   HFS wrapper for HFS Plus
     HFS Plus file system
       Volume size 1.048 GiB (1125519360 bytes, 274785 blocks of 4 KiB)
       Volume name "Cache"
Partition 11: 7.779 GiB (8352198656 bytes, 16312888 sectors from 6292041)
   Type "Apple_HFS"
   HFS file system
     Volume name "Daten"
     Volume size 7.779 GiB (8352165888 bytes, 61791 blocks of 132 KiB)
   HFS wrapper for HFS Plus
     HFS Plus file system
       Volume size 7.778 GiB (8351354880 bytes, 2038905 blocks of 4 KiB)
       Volume name "Daten"
Partition 12: 7.851 GiB (8430145536 bytes, 16465128 sectors from 22604929)
   Type "Apple_HFS"
   HFS file system
     Volume name "Extra"
     Volume size 7.851 GiB (8430022656 bytes, 62367 blocks of 132 KiB)
   HFS wrapper for HFS Plus
     HFS Plus file system
       Volume size 7.850 GiB (8429211648 bytes, 2057913 blocks of 4 KiB)
       Volume name "Extra"
Partition 13: 11.50 KiB (11776 bytes, 23 sectors from 39070057)
   Type "Apple_Free"
   Blank disk/medium

Directement, les choses sont moins claires !

Dans le cas présent, il y a 4 partitions HFS+ qui contiennent les données pertinentes pour notre analyse. Il s'agit des partitions avec les labels : Macintosh HD, Cache, Daten, Extra.

Voici donc les informations nécessaires pour faire le « mount » des partitions :

Partition 9: 1.951 GiB (2095054848 bytes, 4091904 sectors from 1544)
Type "Apple_HFS"
HFS file system
Volume name "Macintosh HD"

Partition 10: 1.048 GiB (1125679616 bytes, 2198593 sectors from 4093448)
Type "Apple_HFS"
HFS file system
Volume name "Cache"

Partition 11: 7.779 GiB (8352198656 bytes, 16312888 sectors from 6292041)
Type "Apple_HFS"
HFS file system
Volume name "Daten"

Partition 12: 7.851 GiB (8430145536 bytes, 16465128 sectors from 22604929)
Type "Apple_HFS"
HFS file system
Volume name "Extra"

Nous avons donc les informations utiles pour « mount », il est cependant assez fatiguant :) de retaper les commandes suivantes chaque fois qu'il est nécessaire d'accéder aux informations du disque :

mount -t hfsplus -r -o loop,offset=$((512*1544)) Powerbook.dd POWERBOOK/Mac_HD/
mount -t hfsplus -r -o loop,offset=$((512*6292041)) Powerbook.dd POWERBOOK/Daten/
mount -t hfsplus -r -o loop,offset=$((512*4093448)) Powerbook.dd POWERBOOK/Cache/
mount -t hfsplus -r -o loop,offset=$((512*22604929))

La solution, l'écriture d'un petit script qui facilitera le « mount » et le « umount », surtout s'il est nécessaire de faire l'opération plusieurs fois.

Création d'un fichier « mount_powerbook.sh » avec le contenu suivant :

#!/bin/bash
# Script to mount partition of Powerbook G3
echo "Mount of Powerbook G3 partitions ..."
mount -t hfsplus -r -o loop,offset=$((512*1544)) Powerbook.dd POWERBOOK/Mac_HD/
mount -t hfsplus -r -o loop,offset=$((512*6292041)) Powerbook.dd POWERBOOK/Daten/
mount -t hfsplus -r -o loop,offset=$((512*4093448)) Powerbook.dd POWERBOOK/Cache/
mount -t hfsplus -r -o loop,offset=$((512*22604929)) Powerbook.dd POWERBOOK/Extra/
mount | grep "

Création d'un fichier « umount_powerbook.sh » avec le contenu suivant :

#!/bin/bash
# Script to umount partitions of Powerbook G3
echo "Umount of Powerbook G3 partitions ..."
umount POWERBOOK/Mac_HD/
umount POWERBOOK/Daten/
umount POWERBOOK/Cache/
umount POWERBOOK/Extra/
mount | grep "

Pour que les scripts fonctionnent, il est nécessaire de les rendre exécutables avec « chmod +x ».

Une fois toutes les partitions montées, il est possible d'exécuter nos scripts et commandes pour la recherche des documents et fichiers ... bonne analyse !

Liens :

Matériel Mac, extraction des disques :
- Site pbfixit.com

Target Disk Mode : Avant d'utiliser le TDM pour la copie d'un disque, il est fortement conseillé de tester cette méthode sur et avec du matériel de l'unité.
- Blackbagtech - FireWire TDM (PDF)

Live CD : Pour les LiveCD, il faut tester le CD sur du matériel connu avant de l'utiliser dans un dossier !
- Finnix boot cd - rescue
- Knoppix-MIB - old version
- Sysresccd

Copie via network : Un test sur le matériel de l'unité est également préférable pour cette technique. Avant d'utiliser une méthode 'particulière', il faut la maîtriser.
- Lnx4n6 - Documentation - Netcat-dd

Vos remarques à :

Jean-Francois BECKERS
FCCU Ops
jf.beckers@fccu.be