Adresse (hexa) |
Contenu |
Taille |
000 | Instruction de saut à la routine de boot | 3 |
003 | Nom du fabricant et n° version(p.ex.NTFS) | 8 |
00B | Octets par secteur (0x200 = 512) | 2 |
00D | Secteurs par cluster (variable) | 1 |
00E | Nbre secteurs réservés (0x00) | 2 |
010 | inutilisé (0x00) | 1 |
011 | inutilisé (0x0000) | 2 |
013 | inutilisé (0x0000) | 2 |
015 | Descripteur de support (0xF8 pour un disque dur) | 1 |
016 | inutilisé (0x0000) | 2 |
018 | Nbre de secteurs par piste (variable) | 2 |
01A | Nbre de têtes (variable) | 2 |
01C | Distance entre 1er secteur du volume et 1er secteur du support | 4 |
020 | inutilisé (0x0000) | 4 |
024 | inutilisé (0x0000) | 4 |
028 | Nombre total de secteurs | 8 |
030 | N°logique de cluster de $MFT (Master File Table) | 8 |
038 | N°logique de cluster de $MFTMirr (Miroir de Master File Table) | 8 |
040 | Nombre de cluster par segment de fichier | 4 |
044 | Nombre de clusters par block d'index | 4 |
048 | N° de série du disque (créé au formatage à partir de la date) | 8 |
050 | Checksum | 4 |
054 à 1FD |
Routine de boot | 426 |
1FE | AA55 (code d'identification, id.secteur de partition) | 2 |
Remarques :
Il existe en effet plusieurs versions de ce type de partition, liées
au système d'exploitation qui les a créées (ou modifiées).
Elles sont identifiées par un n° qui
ne correspond pas au n° de
version du système.
On en dénote 4 :
Version NTFS Année Systèmes d'exploitation Version Windows Nouveautés apportées 1.0 1993 Windows NT 3.1
Windows NT 3.5
Windows NT 3.513.1
3.5
3.512.0 1996 Windows NT4 jusqu'au SP3 4.0 3.0 2000 Windows NT4 à partir du SP4
Windows 2000 jusqu'au SP24.0
5.0
- chiffrement
- gestion des quotas
- gestion de "fichiers clairsemés"
(fichiers comportant de grandes plages
de zéros binaires)- points de montage
(monter une partition quelconque dans un dossier)- journalisation USN
("update sequence number")3.1 2001 Windows 2000 à partir du SP3
Windows XP
Windows 2003
Windows Vista5.0
5.1
5.2
6.0possibilité d'avoir un disque en lecture seule
(nouveau flag FILE_READ_ONLY_VOLUME)
Ces différentes versions peuvent poser des problèmes de compatibilité dans le cas de multiboot, et si un système donné veut atteindre une partition crée par un autre système plus récent.
Ainsi, une version de NT4 SP3 ne pourra pas accéder à une
partition NTFS créée sous Windows 2000. Mais cela peut se corriger
en installant au moins le SP4 sous NT4.
Toutefois, compte tenu des informations supplémentaires contenues dans une
NTFS 3.0, que NT4 ignore (quotas et chiffrement), il sera impossible
d'effectuer une vérification (à l'aide de CHKDSK) d'une NTFS 3.0 sous NT4
(même après installation du SP4 ou supérieur). Seules les lecture et
écriture seront possibles sous ce système. La vérification et/ou
réparation devra s'effectuer obligatoirement sous Windows 2000 (ou au delà).
Sous Windows XP, il existe l'utilitaire FSUTIL.EXE (mode
console) qui permet d'obtenir (et définir) un grand nombre d'informations
précises sur une partition.
Il est utilisable directement
sous Windows 2000.
Il se lance dans une fenêtre de commandes, suivi d'un nombre variable de paramètres.
Commandes Rôles behavior Contrôle le mode du système de fichiers query Interroge les paramètres du mode de système de fichiers disable8dot3
allowextchar
disablelastaccess
quotanotify
mftzoneset Change les paramètres du mode de système de fichiers disable8dot3
allowextchar
disablelastaccess
quotanotify
mftzone1 ou 0
1 ou 0
1 ou 0
De 1 à 4 294 967 295 secondes
De 1 à 4dirty Gère le bit d'impureté du volume query
setInterroge le bit d'intégrité
Définit le bit d'intégritéfile Commandes fichier spécifiques findbysid
queryallocranges
setshortname
setvaliddata
setzerodata
createnewTrouve un fichier par identificateur de sécurité
Interroge l'étendue allouée à un fichier
Définit le nom court d'un fichier
Définit la longueur de données valide d'un fichier
Définit la donnée zéro d'un fichier
Crée un nouveau fichier d'une taille spécifiéefsinfo Informations du système de fichiers drives
drivetype
volumeinfo
ntfsinfo
statisticsListe tous les lecteurs
Recherche du type de lecteur
Recherche les informations du volume
Recherche les informations spécifiques aux volumes NTFS
Interroge les statistiques du système de fichiershardlink Gestion des liaisons permanentes create Crée une liaison permanente objectid Gestion des ID objets query
set
delete
createInterroge l'identificateur d'objet
Modifie l'identificateur d'objet
Supprime l'identificateur d'objet
Crée l'identificateur d'objetquota Gestion des quotas disable
track
enforce
violations
modify
queryDésactive le suivi et l'application des quotas
Active le suivi des quotas
Active l'application des quotas
Affiche les violations de quotas
Définit les quotas de disque pour un utilisateur
Interroge les quotas de disquereparsepoint Gestion du point d'analyse query
deleteInterroge un point d'analyse
Supprime un point d'analysesparse Contrôle de fragmentation des fichiers setflag
queryflag
queryrange
setrangeDéfinit la fragmentation
Interroge la fragmentation
Interroge l'étendue
Définit l'étendue de la fragmentationusn Gestion USN (Update Sequence Number) createjournal
deletejournal
enumdata
queryjournal
readdataCrée un journal USN
Supprime un journal USN
Énumère les données USN
Interroge les données USN d'un volume
Lit les données USN d'un fichiervolume Gestion du volume dismount
diskfreeDémonte un volume
Détecte la quantité d'espace libre sur un volume
Exemple :
E:\WINNT\system32>fsutil fsinfo ntfsinfo e:
Numéro de série du volume NTFS : 0xb0ec120aec11cc0a
Version : 3.0
Nombre de secteurs : 0x00000000007d043e
Nombre total de clusters : 0x00000000000fa087
Clusters libres : 0x000000000006fb2c
Total réservé : 0x0000000000000000
Octets par secteur : 512
Octets par cluster : 4096
Oct./segment d'enreg. de fich. : 1024
Clust./segment d'enreg. de fich. : 0
Longueur de données valide MFT : 0x000000000300b000
LCN de démarrage MFT : 0x0000000000000004
LCN de démarrage MFT2 : 0x000000000007d043
Début de la zone MFT : 0x0000000000003000
Fin de la zone MFT : 0x000000000001f420
Bien que sa structure soit radicalement différente, la MFT est un peu à une
partition "NTFS" ce que la FAT est à une partition "FAT".
Cette table n'a pas d'emplacement prédéfini sur le disque, à la différence
de la FAT qui se situe à partir du secteur 2 d'une partition FAT (et avec une
taille fixe).
Son adresse est inscrite dans le secteur de boot (offset
0x30), et peut varier suivant les circonstances (secteur défectueux
p.ex.), étant donné qu'un "mirroring" de cette table (adresse
en 0x38) est effectué en permanence.
La MFT est constituée d'entrées de 1ko chacune, à raison d'une entrée par fichier (ou répertoire) existant dans la partition. Chaque entrée contient successivement les attributs suivants :
Quand un nouveau fichier est créé, le système créé les attributs nécessaires dans une nouvelle entrée de la MFT, mais il y a un problème évident :
La plupart des attributs ont une taille variable (Nom(s), données) et dépassent facilement le ko.
Un fichier raccourci (.lnk) arrive à tenir sans problème dans une
entrée la MFT, si bien que son accès est très rapide. Par ailleurs, comme les
attributs habituels des fichiers sont stockés dans la MFT, les opérations de
recherches de fichiers (FindFirst, FindNext) ne nécessitent pas
d'autre accès disque que celui de la MFT.
C'est pourquoi chercher un fichier sur une NTFS est beaucoup plus
rapide que sur une FAT!
(En FAT, si on recherche p.ex. tous les .txt sur un disque, il va falloir parcourir toute l'arborescence de chaque sous-répertoire, donc vraisemblablement explorer tout le disque)
Au départ (NT 3.x), la taille de chaque entrée était de 4 ko, mais MicroSoft l'a réduite à 1 ko avec NT4 pour perdre moins de place dans la MFT.
Cette fonction est apparue avec Windows 2000.
Elle consiste à "greffer" une partition quelconque (n'ayant pas de lettre
attribuée) dans un répertoire d'une partition NTFS existante.
On retrouve le principe de montage de partitions du monde UNIX (et
Linux), à l'aide de la commande "mount" bien connue.
Sous Windows 2000 (et au délà), elle s'appelle "mountvol".
Elle permet ainsi d'avoir un nombre infini de partitions, en
s'affranchissant de la contrainte de nommage avec les 26 lettres de l'alphabet.
NB: le gestionnaire de disques (à savoir la MMC DISKMGMT.MSC) permet
d'effectuer les m^mes opérations, mais avec une interface graphique
Exemples :
mkdir j:\mnt\ |
puis |
mkdir j:\mnt\users |
D:\>mountvol /? Crée, supprime, ou affiche les informations d'un point de montage de volume. MOUNTVOL [lecteur:]chemin Nom_volume MOUNTVOL [lecteur:]chemin /D MOUNTVOL [lecteur:]chemin /L |
|
chemin | Spécifie le répertoire NTFS existant dans lequel le point de montage résidera. |
Nom_volume | Spécifie le nom du volume qui est la cible du point de montage. |
/D | Supprime le point de montage du volume du répertoire spécifié. |
/L | Liste le nom de volume monté pour le répertoire spécifié. |
MOUNTVOL j:\mnt\users \\?\Volume{2aec422c-e788-11d5-ad1e-806d6172696f}\ |
Le nom de volume, (assez ésotérique!) est obtenu :
D:\>mountvol |
Autre exemple :
Une partition (BART) n'a pas pu se voir attribuer de lettre. Création d'un sous répertoire
\mnt\bart dans la partition U: de type NTFSPour l'instant, "U:\mnt\bart" apparaît comme un dossier Détermination du nom physique de la partiton "BART" par examen de l'affichage de mountvol sans paramètres Montage de la partition "BART" en tant que u:\mnt\bart Dans l'explorateur, on constate que l'icône du dossier bart a été changée (disque et non plus dossier) Dans les propriétés du dossier "U:\mnt\bart" , on voit que c'est un volume monté On peut arriver au même résultat en utilisant le gestionnaire de disques DISKMGMT.MSC:
(clic droit sur la partition, menu "Modifier la lettre de lecteur...")
On peut donc avoir un nombre INFINI d'unités de disques, et non seulement de disques durs :
en effet, cela fonctionne aussi avec les lecteurs de CD (ainsi, on peut faire apparaître un graveur de CD comme "J:\mnt\graveur" !)
La seule condition requise est que la partition servant au montage soit obligatoirement de type
NTFS.
on peut monter une partition ou un CD ayant déjà une lettre
(mais l'intérêt d'une telle opération est assez réduit).
Grâce à ce système, on peut très bien avoir un PC ne comportant qu'une seule lettre (C:) (+ les disquettes),
TOUTES les autres partitions n'apparaissant que sous la forme de sous
répertoires.
Vu son importance, un chapitre entier est désormais consacré à cette fonctionnalité.
Cette fonctionnalité existe depuis toujours, ou presque, dans UNIX! (et est requise d'ailleurs par tout OS conforme à POSIX)
Un lien symbolique (à ne pas confondre avec un raccourci) est un fichier virtuel qui pointe vers un fichier réel. Il va apparaître dans un répertoire cible, mais se limitera à une entrée dans le répertoire, et un lien symbolique dans la MFT, faisant la liaison entre le fichier réel et l'endroit où il apparaît virtuellement.
A l'opposé, un raccourci est un authentique fichier, bien réel, à extension ".lnk", qui contient des infos diverses qui seront interprétées par le shell pour aller chercher le fichier d'origine.
Un inconvénient d'un raccourci est qu'il ne "passe" pas les réseaux (si on monte un disque réseau, et que l'on clique sur un raccourci dans ce disque, on aura des surprises, le shell allant chercher le fichier sur la machine locale et non pas sur la machine distante). Il n'y a pas cet inconvénient avec un "vrai lien symbolique", puisque dès qu'un veut y accéder, il y a immédiatement un ré-aiguillage automatique vers le fichier d'origine.Il faut bien avoir en tête savoir que les liens symboliques ne sont possibles qu'avec des partitions NTFS. Donc les logiciels habituels, prévus pour tourner indifféremment sur des FAT ou des NTFS, n'ont pas prévu cela.
Une restriction : fichier (ou dossier) d'origine et lien symbolique doivent résider sur le même disque logique.
Si on veut programmer un peu, et - TRÈS IMPORTANT - si on a Windows 2000, on peut utiliser la (nouvelle) fonction suivante de la KERNEL32.DLL :
BOOL CreateHardLink(LPCTSTR pszFileName,
LPCTSTR pszExistingFileName,
LPSECURITY_ATTRIBUTES
lpSecurityAttributes);
cette fonction se trouve à l'index 59 (CreateHardLinkA) et 60 (CreateHardLinkW) (versions ANSI et UNICODE) de la kernel32.dll de Windows 2000 SEULEMENT.
Elle n'existe pas dans la kernel32.dll de NT4, bien que les liens symboliques soient possibles dans la MFT.Pour créer un lien, on lui passe :
- pszFileName : le nouveau chemin (= le lien)
- pszExistingFileName : le chemin du fichier réel
- lpSecurityAttributes : pointeur éventuel (car il peut être égal à "null") vers une structure contenant un nouveau descripteur de sécurité (cela permet d'avoir un contrôle d'accès au lien différent de celui du
fichier réel)Une fois que l'on a appelé "CreateHardLink", le répertoire donné pour le lien contient un nouveau fichier (en apparence). Si on ouvre ce fichier, on ouvre en réalité le fichier d'origine.
Voici à titre d'exemple un petit programme (en mode console) de création de lien symbolique :
Téléchargement : (gratuit!)
module exécutable : hardlink.exe code source : hardlink.cpp syntaxe : hardlink <chemin_reel> <nom_du_lien>
avec :
<chemin_reel> : le nom du fichier ou dossier pour lequel on veut créer un lien <nom_du_lien> : l'emplacement du lienexemple : hardlink d:\boot.ini d:\winnt\temp\boot.ini
Il est également possible de
créer des liens symboliques à l'aide de l'utilitaire
FSUTIL de Windows XP
Syntaxe :
FSUTIL hardlink create <fichier lien> <fichier existant>
Exemple :
E:\>fsutil hardlink create e:\hosts.txt e:\winnt\system32\drivers\etc\hosts
Liaison permanente créée pour e:\hosts.txt <<===>> e:\winnt\system32\drivers\etc\hosts
La fonction Createhardlink
ne permet de créer des liens symboliques que vers des fichiers.
Pour créer un lien vers un dossier, la méthode à utiliser est
différente.
Il faut faire appel à la fonction CREATEDIRECTORY et à une structure
non documentée FSCTL_SET_REPARSE_POINT
On trouvera un exemple de mise en pratique de cette méthode sur l'excellent site de chez Sysinternals :
"Junction" (exécutable et source disponibles)
Tout ce qui précède n'est qu'un aperçu des possibilités offertes par
NTFS et sa MFT. Beaucoup sont encore inutilisées, ou partiellement utilisées.
Au niveau des inconvénients, la MFT peut s'avérer assez gourmande en espace
disque (puisque 1 ko par fichier quel qu'il soit, en plus de la taille réelle
du fichier s'il est >1 ko)
C'est une opération magnétique, effectuée :
Le programme de formatage bas niveau détermine la
taille de secteurs à utiliser (512 octets en
principe), le nombre de têtes, le nombre de pistes (ou cylindres)
et le nombre de secteurs
par piste, tout cela à partir d'informations codées "électriquement"
dans le disque dur par le constructeur.
Dans le cas d'une disquette, ces infos sont standardisées, fonction du
type de support (p.ex. pour les disquettes Haute Densité 3"1/2 : 512
octets par secteur, 2 têtes, 80 pistes,18 secteurs par piste, soit 1.44Mo de
capacité), ou transmises en paramètres au programme :
format a: /F:taille
/T:pistes /N:secteurs
Ce programme vérifie tous les secteurs un par un, en les magnétisant et en lisant le résultat, et stocke sur le disque des informations d'erreur éventuelle et d'identification pour chaque secteur. En effet, un secteur va être accédé par la suite par un n° logique, or ce n° ne correspond jamais à l'ordre physique des secteurs, pour des questions de performances. Compte tenu de l'inertie du mécanisme et du temps de lecture lui-même, quand on lit un secteur (LOGIQUE) donné, il est impossible de lire "posément" le suivant immédiat (géométriquement parlant), car la tête a souvent dépassé le début! On est alors obligé de faire un tour quasi complet.
Donc le suivant (LOGIQUE) a intérêt à être PHYSIQUEMENT plus loin (non contigu du précédent). Ce décalage correspond à ce qu'on appelle le "facteur d'entrelacement" (Interleaving" en anglais). Il dépend de la vitesse de rotation du disque et de la vitesse de traitement du contrôleur de disque. Par exemple, un facteur de "6" signifie qu'il faut "sauter" 5 secteurs physiques après avoir accédé à un secteur pour accéder au secteur logique suivant.
C'est pourquoi le formatage bas niveau d'un disque dur :
Ce programme varie suivant les disques, et est généralement fourni par le constructeur du disque (ou disponible sur son site Web). Il est rarement interchangeable d'une marque à une autre. A ce stade, il n'est encore question que de disque PHYSIQUE dans son ensemble, indépendamment de tout système d'exploitation.
L’opération qui suit le formatage bas niveau est le partionnement, abondamment décrit plus haut.
Puis a lieu, pour chaque partition, le Formatage logique.
Il consiste en la "préparation" des zones de
rangements (= les cloisons dans les compartiments créés) et est effectué par
l'outil FORMAT (sous DOS, Windows), WINDISK (sous NT), MKFS
(sous Linux), ...
Ce cloisonnement va permettre d'organiser et de
prévoir un "catalogue" (vierge au début) de tout ce qu'on va mettre dans le
compartiment par la suite. Cette organisation varie suivant les systèmes
de fichiers prévus (supportés par le système d'exploitation
correspondant).
Si on prend le cas de DOS (ou Windows 9x), le formatage logique va créer successivement :
Les opérations de "préparation" d'un disque avant usage sont donc :
Disque dur :
- formatage bas niveau (chez le constructeur, effectué UNE FOIS POUR TOUTES, sauf accident grave)
- partitionnement (par l'utilisateur, effectué en principe une fois, mais peut être complété, mis à jour, éventuellement)
- formatage logique de chaque partition (par l'utilisateur, effectué en principe une fois, avant ou au cours de l'installation d'un système d'exploitation dans le cas d'une partition système, une ou plusieurs fois dans le cas d'une partition non système)
Disquette :
- formatage bas niveau et, IMMÉDIATEMENT après, formatage logique (par l'utilisateur, ou depuis quelques années maintenant par le fabricant).
- Il n'y a pas de partitionnement sur une disquette, donc il n'y a pas de MBR, car elle ne contient qu'une seule partition.
Le programme de partition, décrit précédemment, et situé à l'adresse 0000:7C00, :
Ce (mini) programme cherche sur le disque un (ou deux) autre(s) programme(s)
et lui passe la main.
Le nom de ce programme est également stocké dans le secteur de boot (à la fin
généralement).
Ce(s) programme(s) s'appelle(nt) :
Dans le cas de DOS, il contient la majeure partie de l'OS. Dans le cas de NT (et aussi de Linux), ce programme n'est qu'une étape intermédiaire, avant de charger réellement l'OS.
Ce sont les 2 fichiers systèmes du précédent DOS (p.ex. 6.22), le processeur de commande et les 2 fichiers de démarrage habituels AUTOEXEC.BAT et CONFIG.SYS, tous renommés car Windows 95 utilise les mêmes. Quand on appuie sur la touche F8 lors du démarrage de Windows 95, on peut choisir de booter sur l'ancien OS (DOS). Dans ce cas, Windows 95 effectue les opérations suivantes :
Le contrôle est passé alors à IO.SYS "DOS", mais le secteur de
boot n'est pas modifié. Ainsi, si on reboote (donc sous DOS à ce moment là), le
programme de boot va tester l'existence du fichier WINBOOT.SYS,
et c'est lui qui va être chargé à la place de IO.SYS.
Le renommage des fichiers va alors être inversé (MSDOS.SYS
MSDOS.DOS, ....)
NB : Si on a renommé ou détruit sous DOS le fichier winboot.sys,
Windows 95 ne pourra pas démarrer