Quelle place occupe réellement un fichier sur un disque ?
En ce moment je bosse sur un projet permettant de distribuer des versions d'Unreal Engine sous la forme d'images disque afin de faciliter leur déploiement sur nos serveurs de build, le tout sous Windows. Ce projet, Gonto de son petit nom, m'a permis de découvrir toute la funitude du fonctionnement bas niveau de Windows, notamment des APIs non documentées permettant de formater des disques en NTFS... mais c'est pas de ça dont je vais vous parler aujourd'hui.
L'une des fonctionnalités de l'outil est la création des images disques. Sur le papier, le fonctionnement est simple : on transforme un dossier — contenant Unreal et tout son bazar — en une image disque. Pour cela c'est très simple, il suffit de créer une image disque de la bonne taille et d'y copier les fichiers contenus dans le dossier source.
Mais... c'est quoi la bonne taille pour notre image disque ? On veut qu'elle soit la plus petite possible mais qu'elle soit suffisamment grande pour pouvoir contenir l'ensemble de nos fichiers.
Du coup c'est plutôt facile : il suffit d'additionner la taille de tous les fichiers et le tour est joué, non ? 🤔️
Évidemment, vous vous en doutez, les choses ne sont pas aussi simples. C'est même une problématique bien plus compliquée qu'il n'y parait !
Un fichier occupe plus de place sur le disque que sa taille « brute », car il faut stocker ses métadonnées (son nom, les permissions associées ainsi que plein d'autres attributs du système de fichier) et puis un disque n'est pas alloué à l'octet mais par « blocs » indivisibles, et puis il peut y avoir de la fragmentation, et puis, et puis... Vous l'aurez compris, on vient de mettre le doigt dans un sacré rabbit hole [1] ! 😅️
Alors, combien de place ça prend réellement un fichier de 1 octet ? Et un fichier de 1 kibi-octet ? Et un dossier, ça pèse combien ? C'est des questions auxquelles j'ai dû répondre et comme je trouvais le sujet intéressant, j'ai décidé d'en faire un petit article ! J'espère qu'il vous plaira ! 😁️
Petite parenthèse sur les unités en informatique (bit vs Byte, Mo vs Mio)
Je ne vous apprends rien, en informatique on stocke tout avec des 0 et des 1. On appelle ça des bits. Ces bits on les regroupe par paquets de 8 que l'on appelle des octets (ou des Bytes en anglais).
- 0 est donc un bit,
- 00101010 est un octet (ou un Byte).
Les noms étant assez proches, il faut bien faire attention à ne pas confondre les deux. En anglais on abrège généralement bit avec un "b" minuscule et Byte avec un "B" majuscule.
Comme avec le système métrique dans lequel 1000 mètres font 1 km, en informatique on regroupe les octets, mais par paquet de 1024 (puissance de 2). Ce qui nous donne — ou plutôt nous donnait — 1024 octets = 1 ko (ou 1 kB si vous préférez l'anglais 😉️).
Mais afin de ne pas porter à confusion avec le système international (SI), on a décidé à la fin des années 90 d'utiliser des préfixes binaires. Au lieu d'1 kilo-octet, on va donc plutôt parler d'1 kibi-octet. On a donc :
- 1 kio (kibi-octet) = 1024 octets
- 1 Mio (mébi-octet) = 1024 kio = 1 048 576 octets
- 1 Gio (gibi-octet) = 1024 Mio = 1 048 576 kio = 1 073 741 824 octets
- 1 Tio (tébi-octet) = 1024 Gio = ...
- 1 Pio (pébi-octet) = 1024 Tio = ...
- ...
Et donc lorsque les préfixes du système international sont utilisés, on devrait avoir :
- 1 ko (kilo-octet) = 1000 octets
- 1 Mo (méga-octet) = 1000 ko = 1 000 000 octets
- 1 Go (giga-octet) = 1000 Mo = 1 000 000 ko = 1 000 000 000 octets
- ...
Sauf que par habitude, on continue souvent à utiliser les préfixes SI (ko, Mo, Go,...) pour parler de paquets de 1024 octets. C'est notamment le cas de Windows et des vendeurs de RAM. Mais ce n'est par contre pas le cas des vendeurs de disques durs qui eux parlent bien par paquet de 1000, ce qui leur permet de gonfler les capacités affichées... Bref c'est un joyeux bordel. 😓️
Dans cet article je n'utiliserai pour ma part que les préfixes binaires (kio, Mio, Gio,...) afin d'éviter toute confusion. Sur les captures d'écran de Windows, les tailles de fichiers sont bien exprimées avec des unités en puissance de 2 (paquets de 1024), malgré l'utilisation des préfixes SI.
Si vous voulez en savoir plus sur le sujet, vous pouvez vous référer à la page Wikipédia dédiée :
Comment sont stockées les données ?
La réponse à nos questions dépend de la manière dont sont stockés nos fichiers, c'est-à-dire du matériel (disque dur, disquette, CD-ROM,...) et du système de fichier utilisés (FAT32, NTFS, Ext4, Btrfs,...).
Dans mon cas le « matériel » c'est des images disques au format VHD de Microsoft, que l'on peut les considérer comme des disques durs plutôt anciens. Et le système de fichier, bah c'est du NTFS (Windows, tout ça...).
À partir de ces informations-là, on va pouvoir commencer à explorer.
Une histoire de secteurs
Dans un ordinateur, pour accéder aux données stockées dans une mémoire, on utilise une adresse. Chaque donnée accessible à sa propre adresse unique. Par exemple le premier octet d'une mémoire peut avoir l'adresse 0x00000000, le second octet l'adresse 0x00000001 et ainsi de suite.
Le problème c'est qu'un disque dur est un stockage de grande capacité (aujourd'hui on peut trouver des disques de plusieurs dizaines de téra-octets). Ils contiennent tellement d'octets qu'on ne peut pas adresser individuellement chacun d'entre eux, ou en tout cas pas de manière efficace. Ils sont donc regroupés en « paquets » que l'on appelle des secteurs (ou sectors en anglais), qui eux sont adressables. Ces secteurs sont donc, en quelque sorte, l'unité de base de nos disques durs.
Sur les disques durs les plus anciens, on regroupait généralement les octets par paquets de 512. Sur les disques modernes, du fait de leur grande capacité, les secteurs font généralement 4 kio (4096 octets).
Dans le cas de notre image disque au format VHD, les secteurs font 512 octets.
Et puis il y a les clusters
Côté matériel, on regroupe donc les octets en secteurs. Maintenant passons au système de fichier. Lui aussi il aime bien regrouper les octets — ou plus précisément les secteurs — en paquets, que l'on nomme de différentes manières suivant les OS et les systèmes de fichier... 😅️
Suivant les cas on les appellera donc « blocks », « cluster » ou encore « unité d'allocation » (allocation unit en anglais). Dans notre cas on gardera toutefois la dénomination de « cluster » qui est celle utilisée par Microsoft dans son système de fichier NTFS.
La taille de ces clusters n'est pas libre, il faut respecter certaines contraintes. Dans le cas de NTFS, la taille des clusters sera toujours une puissance de 2, multipliée par la taille des secteurs du disque.
Sur un disque ayant des secteurs de 512 octets, un cluster NTFS pourra donc faire 512 octets (1 secteur), 1024 octets (2 secteurs) ou encore 4096 octets (8 secteurs). Sur un disque avec des secteurs de 4 kio (4096 octets), un cluster NTFS fera au minimum 4 kio et pourra monter jusqu'à 2 Mio.
En pratique la taille des clusters dépend de la capacité de notre volume et est définie lors du formatage de la partition. Avec des clusters de 4 kio on peut aller jusqu'à des volumes de 16 Tio, mais pour des capacités plus importantes on devra utiliser des clusters plus grands. NTFS supporte des clusters d'une taille maximale de 2 Mio, qui permettent d'atteindre des capacités de 8 Pio [2].
Enfin bref. Dans mon cas, les clusters de mon système de fichier NTFS font 4 kio.
Dernière chose importante à savoir sur les clusters c'est qu'il s'agit du plus petit élément que l'on peut allouer pour stocker des données sur le disque. Si on veut écrire 1 octet, il faut donc allouer un cluster complet.
Stockage des données dans NTFS
Maintenant qu'on sait comment est découpé un disque dur (en secteurs) et un système de fichier (en clusters) il nous reste à savoir comment nos fichiers viennent s'agencer là-dedans. Et pour ça, il faut que je vous parle de NTFS.
Stockage des fichiers
Sur un système de fichier NTFS, le contenu de nos fichiers est stocké dans un ou plusieurs clusters, en fonction de la quantité de données à stocker. Un cluster ne peut contenir les données que d'un seul fichier ; deux fichiers ne peuvent pas partager le même cluster.
En plus du contenu d'un fichier, il faut stocker ses métadonnées (son nom, ses permissions, la date de création et de dernière modification, la liste des clusters qui contiennent les données, etc.). Ces métadonnées sont stockées dans des structures nommées « File Records », qui sont elles-mêmes stockées dans un fichier spécial nommé $MFT (pour Master File Table). Les File Records ont une taille fixe, qui est presque toujours de 1024 octets (1 kio) [3].
On peut donc se représenter le stockage d'un fichier de la manière suivante :
Donc si on a un fichier de 1 octet, que l'on stocke sur un système de fichier NTFS qui a des clusters de 4 kio et des File Records de 1 kio, on peut en arriver à la conclusion qu'il occupe effectivement 5 kio sur le disque (1 kio dans la MFT + 1 cluster de 4 kio)... Voilà, problème résolu ! 😁️
... Mais en fait non, car les choses ne sont pas si simples ! Et pour comprendre ça, il faut que je parle plus en détail de la MFT et des enregistrements qu'elle contient.
Chaque File Record contient différents attributs, et ce sont ces attributs qui stockent tout ce qui concerne nos fichiers. On va par exemple retrouver des attributs comme :
$STANDARD_INFORMATION qui contient les infos de base comme les dates de création, modification, dernier accès au fichier, le propriétaire du fichier,...
$FILE_NAME qui contient le nom du fichier (sous la forme d'une chaine Unicode, donc chaque caractère occupe 2 octets).
Et à vrai dire on peut retrouver cet attribut en double : un avec le nom long du fichier (celui que vous voyez dans l'explorateur de fichier) et un autre avec le nom court, aussi appelé « 8.3 filename ». Ce nom est utilisé pour la compatibilité avec les vieux vieux logiciels et est composé d'un nom de 8 caractères maximum suivi d'un point et d'une extension de 3 caractères maximum (8.3, vous l'avez ? 😁️).
Exemple de short name : "MYTEXT~1.TXT" au lieu de "MyTextFile.txt".
$DATA qui contient les données du fichier (oui les données du fichier en elles-mêmes sont aussi un attribut).
Et il y en a bien d'autres mais on ne va pas rentrer dans les détails.
Ces attributs peuvent être de deux types différents :
- résidents : ils sont stockés directement dans le File Record dans la MFT,
- non-résidents : ils sont stockés dans des clusters spécialement alloués pour eux (l'attribut dans le File Record référence alors ces clusters).
Certains attributs comme $FILE_NAME sont toujours résidents, ils ne peuvent pas être stockés ailleurs. D'autres comme $DATA peuvent être résidents ou non-résidents : s'il y a la place ils sont stockés sur place, dans la MFT, et si ça rentre pas, bah on les colle dehors dans des clusters. Et pour finir certains sont toujours non-résidents, comme $INDEX_ALLOCATION dont on reparlera plus tard.
Vous commencez à le voir venir ? Si un fichier est tout petit, il est possible qu'il soit stocké directement dans la MFT. Si on reprend notre fichier de 1 octet... Et bah il est probable qu'il n'occupe en fait qu'1 kio sur notre disque.
C'est quoi un petit fichier ?
Les petits fichiers peuvent donc être directement stockés dans la MFT. Toute la difficulté ici est d'évaluer si un fichier est assez petit pour tenir dans la MFT ou pas. Il est très difficile de déterminer ça de manière totalement sûre, c'est pourquoi on va l'estimer à la louche. Dans mon cas, je suis parti sur le calcul suivant :
400 + FILE_NAME × 2 + DATA
Où :
- 400 est une estimation large de la taille occupée par les éléments fixes, les entêtes, les attributs qui ne m'intéressent pas et le nom court que je considère toujours présent (même si en pratique c'est pas forcément le cas).
- FILE_NAME × 2 est la taille occupée par le nom du fichier (nombre de caractères multiplié par 2 car il s'agit d'une chaine Unicode).
- DATA est la taille des données.
Si le résultat de ce calcul est inférieur ou égal à la taille d'un File Record (1 kio) alors je considère que $DATA est résident et donc que le fichier est stocké dans la MFT (taille = 1 kio). Sinon je considère qu'il est non-résident et qu'il est donc stocké en dehors de la MFT (taille = 1 kio + n × 4 kio, où n est le nombre suffisant de cluster pour contenir le fichier).
Ici l'estimation est assez large (vaut mieux prévoir plus de place que pas assez), mais sur un grand nombre de fichiers, on tombe pas loin de la vérité.
Petite expérience
Pour illustrer un peu ce qu'on vient de voir, on va faire une petite expérience que je trouve intéressante.
Je crée 2 fichiers parfaitement identiques de 600 octets précisément. L'un sera nommé "a.txt" et l'autre "abcdefghijklmnopqrstuvwxyz.txt". Voici ce que nous apprend Windows sur l'espace disque qu'ils occupent :
- Pour le premier Windows indique qu'il occupe 0 octet sur le disque, malgré le fait que la taille brute du fichier est bien rapportée (600 octets). Cela s'explique par le fait qu'aucun cluster n'a été alloué pour le fichier, et que Windows ne tient pas compte de la place occupée dans la MFT.
- Et pour le second il nous dit qu'il occupe 4096 octets sur le disque... soit 1 cluster (toujours pas de prise en compte de l'enregistrement dans la MFT).
La seule différence entre ces deux fichiers est le nom. Pour le second fichier, le nom occupe plus de place dans le File Record et il n'en reste plus assez pour y stocker directement le contenu du fichier, un cluster est donc alloué.
Et les dossiers dans tout ça ?
On voit généralement les dossiers comme un élément d'organisation, et on oublie souvent qu'eux-mêmes occupent de la place sur le disque. Certes assez peu, mais quand même !
Dans NTFS, tout est fichier, et les dossiers ne font pas exception. Ils sont donc présents dans la MFT au côté des autres fichiers. On peut donc déjà en conclure qu'ils prennent au moins 1 kio d'espace disque.
Mais les dossiers stockent également une référence vers tous les fichiers qu'ils contiennent... ainsi qu'une copie de leurs noms (courts et longs). Un dossier vide occupera donc 1 kio, mais un dossier contenant de nombreux fichiers (et/ou avec des noms très longs) prendra davantage de place.
Dans le File Record d'un dossier, la liste des fichiers est contenue dans l'attribut $INDEX_ROOT, qui est toujours résident. Lorsque le dossier contient trop de fichiers et que ça ne rentre plus, un second attribut nommé $INDEX_ALLOCATION est ajouté. Cet attribut est toujours non-résident et des clusters dédiés lui sont donc alloués. Il est important de noter que ce nouvel attribut ne remplace pas le précédent, il le complète (on y met ce qui ne rentre pas dans le premier).
Pour un dossier vide ou peu rempli on se retrouve donc avec : taille = 1 kio, et pour les dossiers plus volumineux on a le calcul suivant : taille = 1 kio + n × 4 kio, exactement comme pour les fichiers contenant des données.
Comment estimer la place occupée par un dossier ?
Eh bah on va s'y prendre comme pour les fichiers : on va estimer si on a à faire à un « petit » dossier ou pas, en utilisant des estimations larges. Pour ma part je suis parti sur le calcul suivant :
[400] + [FOLDER_NAME × 2] + [FILE_NAMES × 2 + FILE_COUNT × 82] + [FILE_COUNT × 112]
Comme le calcul est un peu plus compliqué que celui des fichiers, j'ai regroupé les termes entre crochets pour pouvoir détailler tout ça. Nous avons donc :
- 400 qui est comme tout à l'heure une estimation large de la place occupée par les éléments fixes et autres entêtes.
- FOLDER_NAME × 2 est la taille occupée par le nom du dossier (×2 car il s'agit toujours d'une chaîne Unicode).
- FILE_NAMES × 2 + FILE_COUNT × 82 est la place totale occupée par le nom long des fichiers contenus dans le dossier que l'on cherche à estimer (82 ici est la place occupée par chaque champ de nom, que l'on doit répéter pour chaque élément).
- FILE_COUNT × 112 est la place totale occupée par les noms courts (8.3 filenames) des fichiers, que l'on considère toujours présents et toujours à 12 caractères au total (là encore il faut savoir que ce n'est pas toujours le cas en pratique mais pour notre estimation ça fera l'affaire).
Avec le résultat de ce calcul on fait la même supposition qu'avec les fichiers : si le tout fait moins de 1024 alors on considère que tout rentre dans la MFT et donc le dossier occupe 1 kio. Et si ça dépasse alors on part sur 1 kio + n × 4 kio où n est le nombre de clusters nécessaires pour stocker les noms courts et longs de l'ensemble des fichiers.
Étant donné qu'en pratique les noms de certains fichiers resteront stockés dans l'attribut résident $INDEX_ROOT, on risque de surestimer le nombre de clusters nécessaires, mais on fera avec... 😄️
La bonne taille pour notre image disque
On sait à présent estimer le poids de nos fichiers et de nos dossiers... Mais il reste encore quelques détails à prendre en compte.
Pour commencer, NTFS comporte un certain nombre de fichiers spéciaux dont on va devoir comptabiliser la taille étant donné que notre but est de produire une image disque capable de stocker le tout. Voici les plus importants :
$MFT, la Master File Table que l'on a déjà vu. On va l'ignorer ici car on l'a déjà grandement comptabilisée lors de l'estimation de nos fichiers et dossiers. Elle contient bien quelques entrées supplémentaires (vers les autres fichiers spéciaux et vers elle-même), mais c'est plutôt négligeable.
$LogFile, qui contient les journaux de toutes les modifications apportées au système de fichier. C'est ce qui permet à NTFS de s'autoréparer en cas de problème (coupure de courant pendant l'écriture d'un fichier par exemple).
Je n'ai trouvé aucune information officielle de Microsoft sur la taille de ce fichier, mais il a globalement été constaté qu'il occupait 0,25 % de la taille totale du volume, avec un maximum de 64 Mio.
Étant donné que cette limite de 64 Mio est atteinte dès lors qu'on a un volume de 25 Gio, on va considérer que ce fichier occupera toujours 64 Mio pour notre estimation.
... Et les autres ($Boot, $Bitmap, $MFTMirr, $UpCase,...) ont des tailles relativement petites et on peut se contenter d'estimer à la louche que l'ensemble pèsera moins de 6 Mio.
Voilà pour NTFS, il nous reste plus qu'un dernier détail à prendre en compte... Le partitionnement !
Pour commencer, notre image disque utilise une table de partition GPT, qui occupe un peu d'espace en début et en fin de disque pour stocker ses métadonnées et la liste des partitions.
Ensuite, l'alignement. On ne peut pas commencer nos partitions n'importe où (NTFS n'apprécie pas, mais alors pas du tout ! [j'en sais quelque chose, j'ai galéré un moment à cause d'une erreur d'alignement ! 😅️]), il faut donc sacrifier un peu d'espace pour aligner correctement notre partition.
Je ne connais pas les contraintes précises pour NTFS, mais la pratique courante aujourd'hui semble être d'aligner les partitions au méga (enfin au mébi-octet), et c'est donc ce que j'ai fait dans Gonto.
Dans le cas de mon image disque, on peut estimer que l'espace perdu entre GPT et l'alignement est de 2 Mio.
On peut donc estimer la taille finale nécessaire pour notre image disque avec la formule suivante :
ESTIMATION_TAILLE_FICHIERS_ET_MFT + 64 Mio + 6 Mio + 2 Mio
Voilà, avec tout ça on a tout ce qu'il faut pour développer une petite fonction faisant l'estimation. 😁️
On veut le code !
J'ai bien évidemment codé tout ça pour les besoins de mon projet, mais je ne vais pas vous recopier le code ici car l'article commence à être un peu trop long. Néanmoins, comme on a ouvert le code de Gonto il y a quelques jours, vous pouvez y jeter un œil si vous le souhaitez, tout est sur GitHub ! 😀️
Vous trouverez la partie concernant l'estimation du poids des dossiers et des fichiers (incluant les enregistrements dans la MFT) par ici :
Et pour ce qui est de l'estimation finale de la taille de l'image disque (avec les « à-côtés » comme le journal NTFS, etc.) vous la trouverez par là :
Notez que le code est sous licence GPLv3+ ce qui vous permet de le réutiliser dans un logiciel libre si vous en avez besoin. 😄️
Quelques chiffres de la vraie vie
Pour terminer, prenons un vrai cas concret de la vraie vie véritable. 😛️
Construisons une image disque pour un petit Unreal Engine 5.4, composé de 216 388 fichiers et de 54 129 dossiers, pour taille brute totale d'environ 139,60 Gio. Par taille « brute totale », j'entends ici la taille que l'on obtient en additionnant la taille brute de tous les fichiers, sans tenir compte des contraintes de stockage.
Voici alors ce que j'obtiens :
| Taille | Diff. taille brute | Diff. estimation | |
|---|---|---|---|
| Taille brute | 139,60 Gio (149 897 810 989 B) | ||
| Estimation | 140,37 Gio (150 726 023 168 B) | +789,84 Mio (828 212 179 B) | |
| Taille réelle | 140,34 Gio (150 687 485 952 B) | +753,09 Mio (789 674 963 B) | -36,75 Mio (38 537 216 B) |
L'estimation d'espace occupé sur le disque par nos fichiers, dossiers et autres éléments de NTFS est de 140,37 Gio, soit 789,84 Mio de plus que la taille brute.
Une fois les fichiers et dossiers effectivement copiés dans l'image disque, on peut constater que l'occupation réelle du disque est de 140,34 Gio, soit 36,75 Mio de moins que l'estimation. On a donc estimé un peu plus que la réalité ('vaut mieux trop que pas assez), mais on est quand même très proche ! Pas mal ! 😎️
Comme j'aime bien les graphiques, je vous en mets un pour bien visualiser le résultat :
Conclusion
Il est important de noter que dans cet article on s'est placé dans le cas le plus favorable possible : un système de fichier tout neuf et qui ne contient que les fichiers qui nous intéressent et qu'on ne modifie plus ensuite. Il ne s'agit pas d'une simplification en soi puisque c'est notre cas d'utilisation, notre but étant de créer des images disques toutes neuves. Pourtant, on a quand même vu que c'était pas si simple. On a dû faire des approximations pour arriver à un résultat ! 😅️
Sur un système de fichier qui a vécu et qui contient déjà d'autres fichiers, l'estimation à priori de l'espace disque nécessaire pour un fichier est une tâche bien plus périlleuse, voire impossible. Sur un système de fichier très fragmenté les fichiers peuvent nécessiter plus d'un enregistrement (File Record) dans la MFT, car ils peuvent être composés de nombreux clusters non contigus, qu'il faudra bien lister quelque part...
De la même façon, si on travaille sur un fichier qui subit des modifications répétées, celui-ci peut se retrouver très fragmenté (nombreux clusters non contigus), et certains des clusters alloués peuvent se retrouver très partiellement remplis, ce qui peut faire pas mal de place perdue.
Comme je l'ai dit en intro, il s'agit d'un rabbit hole. Plus on creuse, plus on s'aperçoit que c'est compliqué. Avec ce genre de problèmes, le plus dur est en fait de se fixer des limites. À un moment il faut s'arrêter de creuser et se demander jusqu'à quel niveau de détail il est pertinent de descendre pour avoir une estimation suffisamment précise pour notre besoin, sans aller trop loin. Parce que bon... On parle ici de distribuer des versions d'Unreal Engine de plus de 100 Gio, on est pas à quelques Mio près en fait ! 😅️
Et donc oui, j'ai peut être creusé un poil trop loin, parce que le sujet était intéressant, mais j'ai quand même su m'arrêter à un moment ! 😉️
Je veux aussi ajouter que d'autres approches au problème auraient également été possibles ici. Comme par exemple de prendre la taille brute des fichiers y ajouter un pourcentage et se dire que c'est suffisant. Ou alors de faire une image trop grande et d'essayer de la réduire par la suite (ça aurait en pratique été plus compliqué ici). Ou encore d'utiliser des VHDs de tailles dynamiques, au risque de perdre en performance (mais il aurait fallu benchmarquer tout ça sérieusement pour savoir quel surcoût ça ajoute vraiment).
Bref, aucune solution n'est parfaite, à chacun de choisir celle qui convient à son besoin et ses contraintes !
J'espère en tout cas que cette petite incursion dans les méandres du stockage de fichier vous aura plu. Si vous voulez creuser davantage [laissez ce lapin tranquille à la fin ! 😅️], je vous mets quelques liens pour approfondir le fonctionnement de NTFS :
- Documentation du projet Linux-NTFS, la plus complète que j'ai pu trouver
- Un article sur la MFT qui m'a pas mal aidé à me lancer
- Documentation NTFS de Microsoft
Voilà, c'est tout pour aujourd'hui ! Je vous dis à bientôt, peut-être, pour de nouveaux articles ! 😄️
| [1] | L'expression anglophone « rabbit hole » est une référence à Alice au pays des merveilles et désigne une situation ou une tâche qui devient de plus en plus complexe, difficile et chronophage à mesure que l'on creuse plus profondément. |
| [2] | 2 Mio est la taille maximale des clusters NTFS depuis Windows 10 version 1709 et permet de créer des partitions allant jusqu'à 8 Pio. Sur les versions antérieures de Windows, la taille maximale des clusters était de 64 kio, ce qui permettait de créer des partitions de 256 Tio maximum (voir la documentation de Microsoft pour plus d'informations). |
| [3] | La taille des File Records est déterminée au moment du formatage de la partition et peut aller de 256 à 4096 octets. En pratique c'est quasiment toujours la taille par défaut de 1024 octets qui est utilisée. |