$LogFile
NTFS implémente la récupération du système de
fichiers en utilisant une technique de traitement transactionnel : le journal.
Dans cette technique, toutes les sous-opérations sont enregistrées dans un
fichier journal avant d'être reportées sur le disque dur, à la manière d'une
base de données.
Les opérations mises en œuvre sur les structures de fichiers, en général,
concernent plusieurs secteurs distincts répartis sur le volume. Les
modifications ne peuvent toutes être portées sur le disque en une seule
fois, mais doivent être effectuées en séquence. Évidemment, les systèmes
tiennent compte de l'éventualité d'une panne qui empêche le déroulement
complet de la séquence et entraîne une incohérence. Ceci est obtenu en définissant
pour chaque opération l'ordre qui donnera le minimum de dégât en cas de
panne. En particulier, il est préférable de perdre de l'espace disque plutôt
que de risquer d'allouer deux fois le même bloc à deux objets différents.
En fait, il est presque toujours possible de rétablir la cohérence et
retrouver les blocs non alloués, mais cela peut être coûteux en temps.
Dans le cas des SGF modernes, le risque est aggravé par le fait que bien
souvent les opérations sont effectuées dans des tampons en mémoire, et que
l'écriture de ces tampons sur disque est effectuée plus tard, pour gagner en
performance et en efficacité (principe de l'écriture paresseuse). Par
exemple, une création de fichier donnera souvent lieu dans un avenir proche
à une ou plusieurs allocations d'espace disque. Le report des écritures de
la table bitmap peut avoir pour conséquence qu'elle ne sera écrite qu'une
seule fois lorsque tout sera terminé.
La structuration d'un volume en NTFS contient un fichier particulier, dit
fichier journal, qui va avoir un rôle analogue au fichier journal des systèmes
de gestion de bases de données classiques, dans lequel sera mémorisée la séquence
des actions effectuées sur le disque dans le but de pouvoir soit les refaire
soit les défaire après une panne. Cette utilisation fait appel à la notion
de transaction, qui signifie, entre autre, que l'on garantit que toutes les opérations
élémentaires de la transaction sont effectuées, même en cas de panne, ou
que aucune n'est faite. Expliquons brièvement le déroulement des opérations
lors de la création d'un fichier avec allocation d'espace. Les opérations
sont les suivantes:
- Initialisation d'une transaction.
- Création d'un descripteur du fichier dans la MFT.
- Création de l'entrée dans le répertoire parent,
- Mise à l'état non libre des bits correspondants aux clusters alloués,
dans la bitmap,
- Clôture de la transaction.
Les opérations 2, 3 et 4 sont faites dans des tampons en mémoire, et lors de
la clôture de la transaction, il est probable que ces tampons n'ont pas
encore été écrits sur disque. Chacune de ces opérations donne lieu à un
enregistrement dans le fichier journal qui décrit comment "refaire"
et comment "défaire" l'opération correspondante. En fait ces
enregistrements sont mis dans des tampons en mémoire, en vue d'une écriture
ultérieure, comme pour tout fichier. Cependant le gestionnaire de ces tampons
fera en sorte que les tampons du fichier journal soient écrits sur disque
avant l'écriture des autres tampons. De plus, périodiquement, l'état des
transactions ainsi que la liste des tampons en mémoire non encore écrits sur
disque sont enregistrés dans le fichier journal. En cas de panne une analyse
du fichier journal permet de savoir les transactions clôturées dont les
actions n'ont pas été portées physiquement sur disque et qui doivent donc
être refaites, ou les transactions non clôturées dont les actions portées
physiquement sur disque doivent être défaites.
retour