Systèmes de fichiers : de HFS et ses évolutions à APFS chez Apple

Systèmes de fichiers : de HFS et ses évolutions à APFS chez Apple

Une pomme, des arbres

Avatar de l'auteur
Vincent Hermann

Publié dans

Logiciel

11/07/2023 16 minutes
13

Systèmes de fichiers : de HFS et ses évolutions à APFS chez Apple

Après les systèmes de fichiers chez Microsoft, penchons-nous maintenant sur ce que propose Apple. Depuis plusieurs années, APFS règne en maître. Mais pendant une grande partie de l’histoire de l’entreprise, ce sont HFS et ses évolutions qui ont accompagné tous les produits, même les portables.

Le tout premier système de fichiers chez Apple se nomme Macintosh File System et est arrivé en 1984. À la manière de la première FAT chez Microsoft, MFS était pensé pour les disquettes (de 400 ko) utilisées avec les premiers Macintosh de l’entreprise, d’où le nom. Bien que MFS fut utilisé avec certains disques durs tiers, ses limitations étaient nombreuses : taille maximale de 20 Mo pour une partition, aucune arborescence pour les dossiers, maximum de 4 094 fichiers par volume, etc.

L’année suivante, pour accompagner le tout premier disque dur maison (Hard Disk 20), Apple lance HFS, pour Hierarchical File System. Il était en effet crucial de trouver une autre manière d’organiser les données, car les informations sur le contenu d’un volume étaient stockées dans un unique fichier. En cas de recherche, il fallait lire l’ensemble du fichier jusqu’à trouver l’information souhaitée. Ce comportement ne posait pas de problème sur des disquettes, mais est vite devenu un gros problème avec les disques durs et leurs milliers de fichiers.

Lire notre dossier sur les systèmes de fichiers :

HFS, le début de l’aventure

HFS reprend certaines caractéristiques de MFS, notamment les « forks » qui permettent un stockage différencié du code source des fichiers et de leurs ressources, comme les icônes ou les données de traduction. La plupart des aspects sont cependant largement transformés.

Un volume formaté avec HFS divise l’espace en blocs de 512 octets minimum. Les deux premiers (0 et 1) sont réservés au démarrage, le troisième (2) au Master Directory Block, qui contient de nombreuses informations sur les données présentes dans le volume, comme l’horodatage des créations de fichiers. Notez qu’une copie de ce bloc existait dans l’avant-dernier bloc du volume, pour autoriser les services à accéder à ces informations si le MDB était verrouillé pour mise à jour des informations.

La table des fichiers est remplacée par le Catalog File, qui utilise une structure en arbre B, dont nous avons parlé dans notre article sur NTFS. Dans ce catalogue, tous les fichiers et dossiers disposent d’un identifiant unique nommé CNID (Catalogue Node ID) associés à leur nom.

La recherche est bien plus rapide, même si HFS comporte des limites, notamment le maximum de 65 535 fichiers par le volume, inhérent aux 16 bits de l'adressage. Ce qui a rapidement posé problème avec les disques durs plus gros, puisque les volumes étaient toujours découpés en 65 535 blocs, dont la taille augmentait mécaniquement. Avec un disque de 1 Go par exemple, la taille des blocs grimpait à 16 ko, à une époque où les petits fichiers étaient très nombreux. Il était donc recommandé de découper l’espace en plusieurs volumes pour faire chuter la taille des blocs.

Le Catalog File fait en outre chuter les performances quand le système d’exploitation permet le multitâche, un seul processus pouvant modifier le fichier à la fois, créant parfois des embouteillages. En revanche, HFS n’est plus un système de fichiers « plat » : il autorise la création de dossiers et donc la hiérarchisation des données, expliquant son nom.

Mac OS 7.5

HFS a évolué peu à peu avec le temps, mais il lui est resté d’importantes limitations liées à son âge, comme des fichiers ne pouvant dépasser les 2 Go, sauf avec Mac OS 7.5 qui autorisait des fichiers de 4 Go. Mais ces derniers ne pouvaient être utilisés que sur des machines avec au moins la même version du système, limitant leur compatibilité. HFS a également atteint un maximum de 2 To pour les volumes. Quant aux noms de fichiers, même s’ils pouvaient théoriquement gérer 255 caractères, ils ne pouvaient en utiliser que 31 dans la pratique.

Les bons services de HFS vont durer un bon moment, jusqu’à l’arrivée de HFS+ en 1998. Il restera cependant géré pendant de nombreuses années, puisque son retrait effectif n’a été fait que dans macOS 10.15 (Catalina), il y a trois ans à peine.

HFS+, une petite révolution chez Apple

HFS+ – nommé aussi HFS Plus ou HFS Extended, ou Mac OS Étendu dans les outils de formatage sur Mac – débarque avec Mac OS 8.1. On est encore loin de la révolution (voir notre article) de Mac OS X, mais il était plus que temps de proposer une solution moderne au stockage sur les Mac. Il va être largement utilisé pendant presque 20 ans, et pas seulement sur les Mac.

La plupart des caractéristiques du HFS premier du nom sont toujours là, comme les blocs de 512 octets, mais presque tous les aspects en sont améliorés. Le 16 bits laisse ainsi place au 32 bits pour les adresses des blocs, faisant exploser les précédentes limites : des volumes et fichiers jusqu’à 8 Eo, et plus de 4 millions de fichiers par volume. De quoi voir venir, surtout à la fin des années 90. Même traitement pour le nombre de blocs par volume, lui aussi à plus de 4 millions, mettant fin à une taille variable selon celle du volume.

En outre, le format des noms passe à UTF-16 et Unicode, permettant cette fois d’exploiter la totalité des 255 caractères, sans restriction sur ces derniers.

Certaines capacités de HFS+ ne vont arriver qu’avec le temps, notamment à partir de Mac OS X, dont la première version sort en 2001. L’une des plus importantes, la journalisation, est ainsi arrivée avec la mise à jour 10.2.2 fin 2002. Comme nous l’avons indiqué dans notre article sur NTFS, la journalisation est un élément important du stockage moderne, puisqu’il permet de suivre les modifications faites aux données et/ou métadonnées. C’est un facteur crucial de fiabilité du traitement de l’information, permettant de revenir à un état antérieur ou de retenter une opération ayant échoué.

C'est surtout Mac OS X 10.3 qui va apporter nombre de nouvelles possibilités, dont une journalisation par défaut des volumes formatés. Panther introduit également un gros changement structurel. Jusqu’à présent, les volumes HFS+ étaient encapsulés dans d’autres volumes HFS, pour des raisons de compatibilité. Mac OS 10.3 apporte une nouvelle version de HFS+ nommé HFSX, dont le formatage permet de se débarrasser de cette ancienne « encapsulation ».

Elle fournit aussi, pour la première fois, la sensibilité à la casse (les majuscules et minuscules sont prises en compte), sous forme optionnelle. Unicode 3.2 est aussi de la partie, et plusieurs mécanismes sont ajoutés pour réduire la fragmentation, qui devenait alors un sérieux problème.

Avec Tiger (Mac OS X 10.4), HFS+ est à nouveau enrichi, cette fois dans le domaine des permissions. Jusqu’à lors, le système des fichiers reprenait celles du monde Unix. Après la mise à jour, une nouvelle sécurité est ajoutée, basée sur les listes de contrôle d’accès (ACL). En plus de ces nouvelles capacités, l’ajout permet une simplification de la compatibilité dans les partages avec l’environnement Windows, puisque le NTFS s’appuie sur les ACL pour gérer les droits d’accès.

Par la suite, d’autres fonctions furent ajoutées, comme les liens physiques pour les dossiers dans Mac OS 10.5, la compression dans 10.6, ou encore le chiffrement des volumes dans 10.7.

Un système de fichiers très utilisé, mais pas sans reproche

HFS+ est probablement le système de fichiers ayant été le plus utilisé chez Apple. Non seulement, il a été celui des Mac pendant de nombreuses années, mais on le trouvait également sur tous les appareils mobiles de l’entreprise, dont l’iPod. Les iPhone et iPad l’avaient également, jusqu’à ce qu’il soit remplacé par APFS, que nous abordons plus loin dans cet article.

iphone 3g 3gs

Très utilisé, et avec d’indéniables qualités pour un système grand public, mais pas sans reproche. Le plus important concernait le Catalog File. Alors qu’il avait été créé pour en finir avec les gros problèmes de performances de la précédente table des fichiers, il a lui-même entrainé de tels soucis par la suite.

Il faut dire que HFS+ est « mal tombé », puisqu’il était en place quelques années avant l’explosion de la quantité de stockage, et surtout de profondes transformations dans les usages numériques, avec une multiplication des données. Dans le même temps, le nombre d’applications a augmenté. Or, le Catalog File ne pouvait être accédé que par un seul processus à la fois, provoquant des files d’attente de plus en plus longues au fur et à mesure que le nombre d’applications augmentait, tout comme le nombre de cœurs dans les processeurs. Des cas de corruptions des données pouvaient également survenir.

Enfin, HFS+ était un système de fichiers propriétaire. Son support sur les autres plateformes a toujours été limité. Sous Linux, un pilote est apparu dans les années 2000 pour lire les volumes HFS+, tant qu’ils n’étaient pas journalisés. Des problèmes d’écriture avaient en outre été détectés sur les volumes de plus de 2 To. Linus Torvalds avait en outre une détestation prononcée pour HFS+. Comme pour NTFS, Paragon a fini par proposer un pilote reconnaissant les volumes journalisés. Même chose sous Windows, même si Apple fournissait son propre pilote pour les partitions Windows créées par Boot Camp. Il était cependant limité à la lecture.

APFS, une relève pensée pour la mémoire flash

En 2016, 18 ans après le lancement de la première version de HFS+, APFS est présenté pour la première fois. Le nom signifie simplement Apple File System. Une revendication montrant l’assurance de l’entreprise devant son nouveau produit, qui doit prendre la relève de HFS+ en proposant dès le départ un système de fichiers journalisé, toujours basé sur des arbres B, pensé pour les SSD et bardé de fonctions modernes.

Il a été officiellement déployé dans macOS 10.12.4 (Sierra), iOS 10.3, tvOS 10.2, watchOS 3.2 et dans iPadOS en 2017. À l’exception de macOS, tous les autres appareils ont vu leur partition HFSX convertie en APFS durant l’installation de la mise à jour. Dans Sierra, cette bascule était optionnelle. C’est avec la mouture suivante, High Sierra, que la conversion a été automatisée, mais uniquement pour les Mac munis de SSD.

Dès le départ, APFS tranche technologiquement avec son vieil aîné. Le schéma de partition passe ainsi à GPT, dans lequel un ou plusieurs conteneurs APFS sont enregistrés. GPT, pour GUID Partition Table (GPT), fait pour rappel partie du standard UEFI. Elle remplace l’ancien MBR (Master Boot Record), en vue notamment de se débarrasser de sa principale limitation : un adressage des blocs en 32 bits. Dans le cas de blocs de 512 octets, la taille maximale des volumes n’était alors que de 2 To. Avec GPT, cet adressage utilise 64 bits pour le codage, autorisant 8 Zo (8 milliards de To) comme nouvelle taille maximale.

Autre passage au 64 bits, celui des inodes. Ce concept, apparu dans le monde Unix bien avant, définit le point d’entrée de chaque fichier ou dossier, servant alors de référence unique pour le retrouver. En outre, un inode (contraction de index et node, littéralement nœud d’index) peut stocker des informations périphériques sur le fichier, autrement dit des métadonnées, comme l’auteur et les droits d’accès. Un volume APFS peut ainsi contenir presque 10 milliards de milliards de fichiers.

Comme indiqué, APFS est optimisé pour les SSD. Outre la gestion de l’instruction TRIM, le système de fichiers préserve davantage le matériel que HFS+ en lui évitant des opérations d’écriture, grâce à des mécanismes comme le clonage. Dans certains cas, APFS provoquait une hausse des performances sur les SSD, mais le résultat dépendait de la génération de Mac et de l’utilisation qui en était faite.

À noter qu’à cause de son fonctionnement – chaque fichier a ses métadonnées attachées, contrairement à HFS+ où elles sont toutes réunies –, APFS dégrade nettement les performances sur disque dur. Apple ne procédait d’ailleurs pas à la conversion automatique des volumes en cas de disque dur.

Le formatage d’un volume peut se faire de quatre manières :

  • APFS : le formatage par défaut
  • APFS (chiffré) : le volume est intégralement chiffré (via FileVault)
  • APFS (sensible à la casse) : sur un tel volume, test.txt et Test.txt désignent par exemple deux fichiers différents
  • APFS (chiffré, sensible à la casse)
HFS APFS

De nombreuses fonctions modernes

APFS a clairement été conçu pour assurer l’avenir du stockage chez Apple. Il propose donc de nombreuses fonctions qui, si elles sont neuves dans l’entreprise ou améliorent nettement l’existant, sont en 2017 présentes dans d’autres systèmes de fichiers depuis longtemps. Pour beaucoup, elles ont été abordées dans notre article sur NTFS.

On retrouve ainsi les instantanés (snapshots), permettant de revenir à un état antérieur du volume si besoin, ainsi que les clones. Ces derniers sont très utiles pour créer des versions modifiées des fichiers, le système n’enregistrant que les nouvelles données, limitant la consommation d’espace disque.

Cette capacité est notamment utilisée dans l’application Photos pour les retouches, avec la possibilité de revenir quand on le souhaite à l’état d’origine. Ces deux mécanismes ne consomment ainsi que le delta des modifications. Sur un volume APFS, la copie d’un fichier n’en consomme pas par exemple. Cela explique également pourquoi une copie ou un déplacement de fichier est instantané.

Le chiffrement est bien sûr présent, sous deux formes principalement : intégral ou par fichier. Dans les deux cas, ce chiffrement peut se faire avec une ou de multiples clés. Si cette deuxième option est retenue, chaque fichier pouvant être chiffré avec une clé unique, tandis que les métadonnées sont chiffrées avec une clé différente. Ce chiffrement peut se faire en AES-XTS ou AES-CBC (les deux en 128 bits), selon que le Mac est récent ou non. Il est appliqué dans le système de fichier et son activation/désactivation ne réclame pas redémarrage de la machine.

De HFS+, APFS reprend la compression semi-transparente, avec trois algorithmes (Deflate, LZVN et LZFSE) tirés de Lempel-Ziv (également utilisé par NTFS). Elle est dite semi-transparente car ne se reflétant pas dans les logiciels tiers n’utilisant pas les mêmes routines.

Volumes logiques et intégrité des données

L’une des principales nouveautés est visible dans Utilitaire de disque sous macOS : les volumes logiques. On peut en créer virtuellement une infinité au sein d’un même conteneur APFS. Ils affichent tous le même espace disque disponible (celui du conteneur), le chiffre étant modulé par la quantité de données que l’on possède, tous volumes confondus.

HFS APFS

Sur les Mac, un conteneur formaté en APFS contient au moins cinq volumes, dont trois invisibles et non chiffrés :

  • Preboot : contient les informations de démarrage pour chaque volume système dans le conteneur
  • VM : utilisé par macOS pour le stockage des fichiers d’échange (swap) chiffrés
  • Recovery : permet de lancer RecoveryOS, utilisé pour les opérations de récupération du système ou sa réinstallation (éventuellement avec le formatage)
  • System : contient tous les fichiers nécessaires au système et à son démarrage, ainsi que les applications fournies avec macOS
  • Data : réservé aux données de l’utilisateur (tout ce qui se trouve dans son dossier personnel, dont les photos, vidéos, musiques et documents), aux applications tierces installées et plus généralement la quasi-totalité des modifications apportées au système.

Sur iOS et iPadOS, seuls System et Data sont présents.

APFS inclut aussi les sommes de contrôle (checksums) pour les métadonnées, mais pas pour les données proprement dites, ce qui est l’une de ses limitations actuelles. Cependant, diverses protections sont intégrées, dont Atomic Safe Save. Celle-ci n’autorise la sauvegarde d’une opération et sa répercussion dans le système de fichiers que si le processus a réussi. Ce fonctionnement se retrouve d'ailleurs pour les modifications : tant que l’on travaille sur un fichier ouvert, les changements sont appliqués sur une copie, et ne sont intégrés au fichier d’origine qu’à la sauvegarde.

Enfin, la compatibilité d’APFS sur les autres plateformes est assez limitée, du fait principalement d’une publication tardive et partielle des spécifications. Un pilote permet la lecture de ces partitions depuis Linux mais, pour le reste, il faut se tourner vers des outils comme ceux de Paragon, y compris sous Windows. Pour ce dernier, il existe aussi Mac Drive, dont la dernière version supporte l'écriture vers les volumes APFS.

Pour cette raison, le formatage d’un disque externe en APFS demande que l’on y réfléchisse à deux fois. S’il s’agit d’un disque prévu pour Time Machine ou d’autres types de sauvegardes n’ayant pas vocation à voyager, tout va bien. En revanche, si d’autres ordinateurs sont susceptibles d’y accéder plus tard, un formatage en exFAT semble plus adapté, comme le recommande d'ailleurs Apple.

Écrit par Vincent Hermann

Tiens, en parlant de ça :

Sommaire de l'article

Introduction

HFS, le début de l’aventure

HFS+, une petite révolution chez Apple

Un système de fichiers très utilisé, mais pas sans reproche

APFS, une relève pensée pour la mémoire flash

De nombreuses fonctions modernes

Volumes logiques et intégrité des données

next n'a pas de brief le week-end

Le Brief ne travaille pas le week-end.
C'est dur, mais c'est comme ça.
Allez donc dans une forêt lointaine,
Éloignez-vous de ce clavier pour une fois !

Fermer

Commentaires (13)


merci pour l’article :)


MFS… j’adore cet acronyme :mdr2:


Merci intéressent


Encore un article très intéressant, merci.


Merci infiniment pour ce dossier très complet ! :love:



Ancien maceux devant l’éternelle (j’utilise toujours mon mini… mais sous win10), ce système APFS était un mystère complet pour moi, voilà un article qui éclaircit bien des points obscurs !



D’un autre côté, on ne peut pas dire que “La Firme” a été généreuse en explications, elle a balancé ça à la gueule des utilisateurs avec son style habituel super-friendly :



“Voilà, à partir de High Sierra ce sera comme ça et pas autrement, démerdez-vous avec ça !”



“Merci, on va tout racheter !” :xzombi: :pleure: :windu: :cartonrouge:





Autre question : ça fait des années que j’entends parler de FS expérimentaux utilisant une vraie base de donnée de fichiers, qu’en est-il ?



(reply:2142345:DantonQ-Robespierre)




“La Firme” donne généralement les explications aux développeurs, pas au grand public :
https://developer.apple.com/support/downloads/Apple-File-System-Reference.pdf



et @Vincent avait déjà fait un très bon papier sur le sujet à l’époque
https://www.nextinpact.com/article/27163/105101-apfs-plongee-dans-nouveau-systeme-fichiers-dapple


C’est justement ce que je leur reproche, ledit “grand public” aurait parfaitement le droit d’être au courant lui aussi…



Merci pour le pdf, que je vais lire et garder en référence dans mon dossier spécial “éducation” !



L’“ancien” article de Vincent est aussi mis en lien dans l’article, les deux se complètent à merveille, merci ! :chinois:



P.S. Merci aussi pour la vidéo et présentation !



(reply:2142345:DantonQ-Robespierre)




et je rajouterais également la vidéo qui va bien :
https://wwdctogether.com/wwdc2016/701



avec le support de présentation :
https://devstreaming-cdn.apple.com/videos/wwdc/2016/701q0pnn0ietcautcrv/701/701_introducing_apple_file_system.pdf



ilink a dit:


J’imagine que pour ce dernier format il n’y a pas de TRIM ni de système moderne pour les SSD ?




Tous les systèmes de fichiers peuvent supporter le TRIM, ça ne dépend que de l’implémentation de leur pilote.



Quand aux systèmes modernes pour SSD, je ne sais pas exactement ce que tu veux dire.


D’un autre côté, le TRIM n’est pas tellement utile sur un disque externe en général. Surtout pour ce que tu veux en faire. On supprime/réécrit rarement des trucs sur un disque externe, et il faudrait le faire très fréquemment pour avoir des soucis.



Le problème se pose surtout sur un disque système où l’utilisateur et surtout l’OS passent leur temps à écrire et détruire des trucs.



Sur un SSD externe tu vas écrire tes photos, tu vas mettre tes jeux Steam et tes films mais tu vas pas passer ton temps à les remplacer.


jpaul

D’un autre côté, le TRIM n’est pas tellement utile sur un disque externe en général. Surtout pour ce que tu veux en faire. On supprime/réécrit rarement des trucs sur un disque externe, et il faudrait le faire très fréquemment pour avoir des soucis.



Le problème se pose surtout sur un disque système où l’utilisateur et surtout l’OS passent leur temps à écrire et détruire des trucs.



Sur un SSD externe tu vas écrire tes photos, tu vas mettre tes jeux Steam et tes films mais tu vas pas passer ton temps à les remplacer.


Tant que tu ne remplis pas le disque c’est peu important en effet, mais si tu le rempli ne serai-ce qu’une fois, l’effacement sans Trim ne régénère pas le cache, et tu restes avec une brouette.



Il me semble en effet que les macOS récents gèrent le Trim sur SSD USB en APFS et HFS+, mais pas en FAT ou ExFAT (de toute façon pas recommandés pour un disque externe, car susceptibles de perte de données en cas de fausse manip, n’étant pas journalisés).