hfsutils, un outil pour gérer le HFS original en ligne de commande

Avec macOS Catalina, Apple a fait un truc qui m’a un peu gêné : la société a supprimé le support du HFS original. C’était attendu depuis un moment (avec Sierra) et le système de fichiers était déjà à moitié dans le cercueil depuis Snow Leopard, avec un accès en lecture seule uniquement. J’ai espéré que des développeurs proposent un moyen d’ajouter la prise en charge dans l’OS, mais visiblement ça n’intéresse pas grand monde. Donc je me suis rabattu sur hfsutils.

macOS n’aime plus le HFS

hfsutils, c’est un vieux programme (il date du milieu des années 90), en ligne de commande. Ce n’est vraiment pas le truc le plus intuitif, même quand on a l’habitude de la ligne de commande.

Pour l’installer sous macOS (avec une version récente), le plus simple est de passer par homebrew, avec la commande suivante.

brew install hfsutils

Ensuite, il faut passer par les commande spécifiques du logiciel, qui sont en gros les commandes UNIX classiques précédées d’un h. Pour expliquer le fonctionnement, j’ai deux exemples.

Le premier, c’est une image disque d’un CD-ROM formaté en HFS (une ISO). La première étape va être de monter le disque, avec la commande suivante.

hmount nom_de_votre_iso

Si tout se passe bien, vous aurez quelques informations sur le volume et vous pourrez commencer à vous promener dans l’arborescence. Ensuite, vous pouvez utiliser les commandes classiques, du genre hcd pour aller dans un dossier. Dans les trucs à savoir, il faut bien mettre les noms des dossiers dans des guillemets. Pour redescendre dans la hiérarchie, il ne faut pas écrire hcd .. mais uniquement hcd, pour revenir à la racine.

Maintenant, la copie. C’est un peu compliqué : pour garder les métadonnées, hfsutils compresse automatiquement en .bin. Si vous copiez un un fichier qui s’appelle toto, vous aurez donc un fichier toto.bin sur votre Mac. En théorie, ajouter l’argument -r au moment de la copie doit permettre de garder les métadonnées en copiant d’un volume HFS vers un volume HFS+, mais dans mon cas, ça n’a pas marché. J’ai testé vers du APFS ou vers du HFS+, sans succès.

Pour copier d’un volume HFS vers votre ordinateur (le seul cas possible dans le cas d’une ISO, d’ailleurs), c’est assez simple.

hcopy nom_du_fichier_source nom_du_fichier_cible

Dans mon cas, donc, l’argument -a va créer un fichier .bin (compressé), l’argument -r ne copie que le fichier sans ses métadonnées.

Dans les trucs à savoir, par exemple si vous voulez copier le contenu d’un dossier, c’est qu’il faut remplacer les / dans le chemin par des :. Pour copier le contenu du dossier tata vers votre bureau, la commande est donc celle-ci.

hcopy ":tata:*" ~/Desktop

Quand vous avez terminé, il faut bien penser à démonter l’ISO, avec la commande suivante.

humount

Quelques exemples

Le second, c’est une disquette. Il y a quelques subtilités si vous travaillez avec de vrais médias, et pas des images disques.

Premièrement, avec un macOS récent, il faudra probablement donner l’accès complet au disque au Terminal. Dans Préférences Système, il faut aller dans Sécurité et confidentialité, dans l’onglet Confidentialité, dans Accès complet au disque. Là, il faut déverrouiller et ajouter le Terminal dans la liste (il est dans /Applications/Utilitaires).

Deuxièmement, il faut précéder toutes les commandes d’un sudo. Si vous avez connecté un lecteur de disquettes, il faut donc faire un diskutil list pour trouver le nom logique du lecteur, puis le monter.

sudo hmount /dev/diskx

Le fonctionnement, ensuite, est à peu près le même (il ne faut pas oublier le sudo). Comme expliqué plus haut, si vous voulez copier du Mac (moderne) vers une disquette ou une image disque, il faut placer un : comme séparateur. Pour copier un fichier titi qui est sur votre Mac moderne, il faut donc taper ceci.

sudo hcopy ~/Desktop/titi ":titi"

Si vous avez monté plusieurs volumes (c’est possible), il est préférable d’indiquer le nom du volume. Sur une disquette formatée de façon classique (qui porte le nom untitled), ça donne donc ceci.

sudo hcopy ~/Desktop/titi "untitled:titi"

Si vous ne connaissez pas le nom du volume, il est indiqué au moment du montage.

Quelques exemples

Attention à une chose, en partant d’un volume en APFS, j’ai perdu les métadonnées et je ne suis pas certain qu’il soit possible de les garder. Il faut donc mieux d’abord compresser avant de copier, et être certain que le Mac sous Mac OS (9) puisse décompresser.

J’ai perdu les métadonnées de la capture

Formater une disquette

Un des trucs qui peut servir, c’est la possibilité de formater une disquette en HFS. La commande est simple, encore une fois.

sudo hformat -f /dev/diskx

On peut choisir le nom (avec -l "nom") et la disquette que j’ai formaté comme ça est parfaitement utilisable avec un Mac sous Mac OS 9.

Formaté depuis hfsutils

Pour conclure, hfsutils est un outil perfectible, mais pratique dans certains cas… parce qu’il n’y a rien d’autre sans passer par une vieille machine. Après, je ne peux que vous conseiller de trouver une machine sous Leopard si vous avez besoin de travailler sur des volumes en HFS régulièrement. Il peut s’agir d’un vieux Mac PowerPC (ou un des premiers Mac Intel), et éventuellement une machine virtuelle avec Mac OS X Server.