On connaissait déjà les Liens NTFS sous XP, mais leur utilisation restait confidentielle. Avec Vista toute la panoplie est livrée accompagnée d'une commande dédiée : mklink. On va voir comment Vista et Windows 7 abusent du procédé. Cela peut-il servir au particulier ? On peut raccourcir des chemins d'accès, résoudre des cas particuliers. L'utilisation la plus populaire est de délocaliser des dossiers systèmes, ça permet d'alléger la partition Windows si elle devient limite. On verra dans la conclusion qu'on peut faire des liens relatifs, très pratiques dans les volumes amovibles susceptibles de changer de lettre. Il faut prendre en compte cette présence de Jonctions dans le système si on veut faire des sauvegardes. Il ne faut pas lever les protections de ces Jonctions (attributs et ACL) sous peine de quelques surprises.
Nouveau : Liens Réels et Symboliques - brillant résumé rédigé par freeAvvArea
Reparse Points
How NTFS Works
NTFS Reparse Points
Reparse points
are files or directories that have blocks of data called reparse data associated
with them.
Pour le NTFS (New Technology File System) les dossiers et fichiers sont des objets. Ces objets ont
des propriétés, comme par exemple les noms courts, les noms longs, les
attributs, les flux. Mais le principe va beaucoup plus loin, on parle de
Filtres, de
Tags, et de
Points d'Analyse, qui est le terme habituellement adopté
pour Reparse Points. Ces Points d'Analyse sont écrits dans la MFT (Master File
Table).
Points d'analyse
Les programmes peuvent intercepter les opérations d'ouverture des objets du
système de fichiers et exécuter leur propre code avant de retourner les données
du fichier. On peut s'en servir pour étendre les fonctionnalités du système de
fichiers comme les points de montage qui peuvent servir à rediriger les données
lues et écrites dans un dossier vers un autre volume ou disque physique.
Liens NTFS
Les Liens NTFS représentent une partie de cette technologie et permettent des
redirections de fichiers au niveau NTFS, alors que les raccourcis (.LNK)
habituels font de la redirection via le Système d'Exploitation.
Liens Réels
NTFS permet d'associer plusieurs noms à un fichier. Les
Liens Réels ou Hard
Links sont appelés
ainsi car ils pointent directement vers les octets du fichier pris pour cible.
Ils sont ainsi très résistants car on ne peut supprimer accidentellement cette
liaison. Déplacer ou supprimer le fichier pris originellement pour cible n'a
aucun effet, et il faudra supprimer tous les liens réels pour supprimer le
fichier. Les Liens réels ne peuvent pointer vers un fichier situé sur un autre
volume.
Soft Links
Par opposition aux Hard Links, les redirections Soft Links sont moins solides :
si on déplace ou supprime la cible, le lien est rompu. Les Jonctions et
les Liens Symboliques sont des Soft Links.
Jonctions
Redirection NTFS vers un dossier. Le chemin est absolu, la cible peut être située sur
un autre volume mais pas sur le réseau. Les Jonctions font double-emploi avec Les Liens Symboliques
mais sont conservés par souci de compatibilité.
Liens Symboliques
Ce sont des Jonctions à un sens plus large. Les Liens Symboliques peuvent
pointer autant des fichiers que des dossiers. Comme pour les Jonctions la cible
peut être située sur un autre volume. À la différence des Jonctions la cible
peut être un objet du réseau. Le lien peut être relatif (exemple :
..\ailleurs\cible.txt) ou absolu (d:\ailleurs\cible.txt)
Points de montage
Les points de montage permettent de monter un volume en tant que
dossier, au lieu de lui attribuer une lettre. Ceci permet de s'affranchir du
nombre limité de lettres ou de ne pas encombrer le Poste de Travail. On peut désigner un volume à la fois par une lettre et
un nom de dossier. Voir le
Gestionnaire de disques (WIN+R, diskmgmt.msc)
Si on ouvre dans l'explorateur de fichiers le dossier c:\Utilisateurs\NomduProfil à priori tout semble normal.
Mais si on affiche les fichiers cachés et les fichiers systèmes (Afficher tous les fichiers), on voit des icones de dossiers affublés de flèches de raccourci. La plupart retournent un message d'interdiction d'accès quand on les clique. Ce sont des Jonctions.
Pour ouvrir une Console de Commandes, le moyen le plus universel est d'entrer cmd dans Exécuter : WIN+R, cmd, Entrée. Pour info avec Vista/W7 on utilise CTL+MAJ+Entrée pour ouvrir la Console en Mode Administrateur.
La commande DIR liste les fichiers et dossiers. Entrer dir /? pour voir son utilisation. Ses commutateurs permettent d'obtenir différentes présentations. Par exemple /S permet de lister les sous-dossiers, alors que /A permet de choisir de spécifier des Attributs. Par exemple /AL va afficher seulement les Liens NTFS, et /A-L va au contraire afficher tout sauf ces Points d'Analyse.
DIR /AL /S permet de ressortir les Liens
NTFS de types <JONCTION>
ou <SYMLINKD>
(Lien Symbolique).
Le résultat de la commande a été expurgé des informations
inutiles pour plus de clarté.
L'affichage du nom donné au Lien est suivi du chemin vers sa cible :
C:\Users\JF>cd\ C:\>dir /AL /S Répertoire de C:\ <JONCTION> Documents and Settings [C:\Users] Répertoire de C:\Program Files <JONCTION> Fichiers communs [C:\Program Files\Common Files] Répertoire de C:\Program Files\Windows NT <JONCTION> Accessoires [C:\Program Files\Windows NT\Accessories] Répertoire de C:\ProgramData <JONCTION> Application Data [C:\ProgramData] *** <JONCTION> Bureau [C:\Users\Public\Desktop] <JONCTION> Desktop [C:\Users\Public\Desktop] <JONCTION> Documents [C:\Users\Public\Documents] <JONCTION> Favoris [C:\Users\Public\Favorites] <JONCTION> Favorites [C:\Users\Public\Favorites] <JONCTION> Menu Démarrer [C:\ProgramData\Microsoft\Windows\Start Menu] <JONCTION> Modèles [C:\ProgramData\Microsoft\Windows\Templates] <JONCTION> Start Menu [C:\ProgramData\Microsoft\Windows\Start Menu] <JONCTION> Templates [C:\ProgramData\Microsoft\Windows\Templates] Répertoire de C:\ProgramData\Microsoft\Windows\Start Menu <JONCTION> Programmes [C:\ProgramData\Microsoft\Windows\Start Menu\Programs] Répertoire de C:\Users <SYMLINKD> All Users [C:\ProgramData] <JONCTION> Default User [C:\Users\Default] Répertoire de C:\Users\All Users <JONCTION> Application Data [C:\ProgramData] <JONCTION> Bureau [C:\Users\Public\Desktop] <JONCTION> Desktop [C:\Users\Public\Desktop] <JONCTION> Documents [C:\Users\Public\Documents] <JONCTION> Favoris [C:\Users\Public\Favorites] <JONCTION> Favorites [C:\Users\Public\Favorites] <JONCTION> Menu Démarrer [C:\ProgramData\Microsoft\Windows\Start Menu] <JONCTION> Modèles [C:\ProgramData\Microsoft\Windows\Templates] <JONCTION> Start Menu [C:\ProgramData\Microsoft\Windows\Start Menu] <JONCTION> Templates [C:\ProgramData\Microsoft\Windows\Templates] Répertoire de C:\Users\All Users\Microsoft\Windows\Start Menu <JONCTION> Programmes [C:\ProgramData\Microsoft\Windows\Start Menu\Programs] Répertoire de C:\Users\Default <JONCTION> Application Data [C:\Users\Default\AppData\Roaming] <JONCTION> Cookies [C:\Users\Default\AppData\Roaming\Microsoft\Windows\Cookies] <JONCTION> Local Settings [C:\Users\Default\AppData\Local] <JONCTION> Menu Démarrer [C:\Users\Default\AppData\Roaming\Microsoft\Windows\Start Menu] <JONCTION> Mes documents [C:\Users\Default\Documents] <JONCTION> Modèles [C:\Users\Default\AppData\Roaming\Microsoft\Windows\Templates] <JONCTION> My Documents [C:\Users\Default\Documents] <JONCTION> NetHood [C:\Users\Default\AppData\Roaming\Microsoft\Windows\Network Shortcuts] <JONCTION> PrintHood [C:\Users\Default\AppData\Roaming\Microsoft\Windows\Printer Shortcuts] <JONCTION> Recent [C:\Users\Default\AppData\Roaming\Microsoft\Windows\Recent] <JONCTION> SendTo [C:\Users\Default\AppData\Roaming\Microsoft\Windows\SendTo] <JONCTION> Start Menu [C:\Users\Default\AppData\Roaming\Microsoft\Windows\Start Menu] <JONCTION> Templates [C:\Users\Default\AppData\Roaming\Microsoft\Windows\Templates] <JONCTION> Voisinage d'impression [C:\Users\Default\AppData\Roaming\Microsoft\Windows\Printer Shortcuts] <JONCTION> Voisinage réseau [C:\Users\Default\AppData\Roaming\Microsoft\Windows\Network Shortcuts] Répertoire de C:\Users\Default\AppData\Local <JONCTION> Application Data [C:\Users\Default\AppData\Local]*** <JONCTION> Historique [C:\Users\Default\AppData\Local\Microsoft\Windows\History] <JONCTION> History [C:\Users\Default\AppData\Local\Microsoft\Windows\History] <JONCTION> Temporary Internet Files [C:\Users\Default\AppData\Local\Microsoft\Windows\Temporary Internet Files] Répertoire de C:\Users\Default\AppData\Roaming\Microsoft\Windows\Start Menu <JONCTION> Programmes [C:\Users\Default\AppData\Roaming\Microsoft\Windows\Start Menu\Programs] Répertoire de C:\Users\Default\Documents <JONCTION> Ma musique [C:\Users\Default\Music] <JONCTION> Mes images [C:\Users\Default\Pictures] <JONCTION> Mes vidéos [C:\Users\Default\Videos] <JONCTION> My Music [C:\Users\Default\Music] <JONCTION> My Pictures [C:\Users\Default\Pictures] <JONCTION> My Videos [C:\Users\Default\Videos]
Etc. Idem avec les autres comptes... |
Les Liens NTFS pèsent zéro octet. En effet ces Liens ne sont pas des fichiers comme les raccourcis LNK et les URL, ça se passe ailleurs (dans l'index).
Noter l'exception pour C:\Users\All Users qui n'est pas une Jonction mais un Lien Symbolique absolu vers un dossier. Un Lien Symbolique peut pointer un objet situé sur le réseau.
Repérées par des *** sont les deux surprises du procédé : des Jonctions qui pointent sur leurs conteneurs. Ces Liens sont normalement cachés, mais ils ont aussi été rendus inaccessibles pour éviter les phénomènes de récursivité dans Explorer :
Liens Récursifs
La présence de ces particularités entraine une certaine incompréhension
d'utilisateurs cherchant à faire des sauvegardes avec des logiciels inadaptés,
ou oubliant le commutateur adéquat dans la commande. Vous trouverez des
illustrations de ces phénomènes de récursivité
ici :
C:\Documents and Settings\All Users\Microsoft c'est kifkif
C:\ProgramData\Microsoft
La vue suivante montre que la présence de ces Jonctions fait que si on essaie d'accéder
directement à C:\Documents and Settings\All Users\Microsoft on abouti en fait en
C:\ProgramData\Microsoft.
Ceci illustre parfaitement le mécanisme des Jonctions. Toute modification dans
un dossier apparaît dans l'autre, car il s'agit ni plus ni moins que du même
dossier, C:\ProgramData\Microsoft. L'autre chemin qui utilise Documents and
Settings n'est qu'un artifice.
Supposons qu'un vieux programme (mal) écrit pour XP ait besoin d'accéder en
dur à C:\Documents and Settings\All
Users\Application Data\Microsoft : il va fonctionner comme s'il était dans
Windows XP grâce au leurre introduit par l'utilisation des Jonctions. Les
Jonctions aident à préserver la compatibilité même avec des programmes ou des
scripts qui font malheureusement appel à des chemins en dur au lieu d'utiliser
les variables
d'environnement.
Merci à Serge N. pour la réécriture de ce
paragraphe.
Jonctions?>
Rien ne distingue dans Explorer les Liens Réels, des fichiers standards. On
utilisera donc Link Shell Extension pour les
marquer d'un symbole particulier. Une fois Link Shell Extension installé, une petite visite
dans windows, system32, et winsxs, sera une révélation.
Comme ci-dessus pour
les Jonctions et les Liens Symboliques, il est possible d'ajouter un item dans
le menu contextuel des fichiers pour lister les éventuels Liens Réels ; voir
HardLinks?>
On a vu que le bien connu "Documents and Settings" de Windows XP est devenu le dossier" Utilisateurs", de son vrai nom "Users" comme il apparaît dans une Console CMD. Pour des raisons de compatibilité "Documents and Settings" existe toujours, mais sous la forme d'une Jonction vers Users. Quand on clique sur la Jonction "Documents and Settings", un désagréable message "Accès refusé" nous invite à aller voir ailleurs. Il faut en effet rompre avec les anciennes habitudes. Maintenant c'est "Users".
Et il en est de même dans "Users" pour le dossier "All Users" remplacé par "c:\ProgramData" et le dossier "Default Users" devenu "c:\Users\Default". On pourrait penser qu'il y a une volonté de supprimer les espaces dans les noms ; mais ce n'est pas le cas, comme le confirme l'examen du contenu des profils dans le tableau ci-dessous. Par ailleurs le vrai nom de "c:\Programmes" est resté "c:\Program Files". Cette francisation "Programmes" est obtenue par le même artifice que pour Utilisateurs, à savoir un fichier caché et système : les fameux Desktop.ini
Windows XP |
Nom anglophone |
Vista/W7 |
Entre parenthèses : nom véritable du dossier | ||
AppData | AppData | |
Application Data | AppData\Roaming | |
Bureau | Desktop | Bureau (Desktop) |
Cookies | Cookies | AppData\Roaming\Microsoft\Windows\Cookies |
Favoris | Favorites | Favoris (Favorites) |
Local Settings | Local Settings | AppData\Local |
Local Settings\Application Data | Application Data | AppData\Local |
Local Settings\Historique | History | AppData\Local\Microsoft\Windows\History |
Local Settings\Temp | Temp | AppData\Local\Temp |
Local Settings\Temporary Internet Files | Temporary Internet Files | AppData\Local\Microsoft\Windows\Temporary Internet Files |
Menu Démarrer | Start Menu | AppData\Roaming\Microsoft\Windows\Menu Démarrer (Start Menu) |
Menu Démarrer\Programmes | Programs | AppData\Roaming\Microsoft\Windows\Start Menu\Programmes (Programs) |
Menu Démarrer\Programmes\Démarrage | Startup | AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Démarrage (Startup) |
Mes Documents | My Documents | Documents |
Mes documents\Ma musique | My Music | Musique (Music) |
Mes documents\Mes images | My Pictures | Images (Pictures) |
Mes documents\Mes Videos | My Videos | Vidéos (Videos) |
Pictures | Images (Pictures) | |
Mes documents récents (Recent) | Recent | AppData\Roaming\Microsoft\Windows\Recent |
Modèles | Templates | AppData\Roaming\Microsoft\Windows\Templates |
SendTo | SendTo | AppData\Roaming\Microsoft\Windows\SendTo |
Voisinage d'impression | PrintHood | AppData\Roaming\Microsoft\Windows\Printer Shortcuts |
Voisinage réseau | NetHood | AppData\Roaming\Microsoft\Windows\Network Shortcuts |
Contacts | Contacts | |
Documents | Documents | |
Download | Download | |
Links | Liens (Links) | |
Music | Musique (Music) | |
Saved Games | Parties enregistrées (Saved Games) | |
Themes | AppData\Roaming\Microsoft\Windows\Themes |
Pour lister les variables et leurs valeurs entrer la commande SET dans une
Console CMD.
Comparer les résultats pour XP et pour W7 :
Variables d'environnement |
Windows XP |
Windows7 |
ALLUSERSPROFILE | C:\Documents and Settings\All Users | C:\ProgramData |
APPDATA | C:\Documents and Settings\JF\Application Data | C:\Users\JF\AppData\Roaming |
CommonProgramFiles | C:\Program Files\Fichiers communs | C:\Program Files\Common Files |
USERPROFILE | C:\Documents and Settings\JF | C:\Users\JF |
Arrivée avec Vista, la commande mklink permet de créer des Liens Réels vers des fichiers du même volume, des Jonctions vers des dossiers du volume ou d'un autre volume, et des Liens Symboliques relatifs ou absolus vers des fichiers ou des dossiers.
C:\>mklink /?
Crée un lien symbolique.
MKLINK [[/D] | [/H] | [/J]] Lien Cible
/D Crée un lien symbolique vers un répertoire. Par défaut,
il s'agit d'un lien symbolique vers un fichier.
/H Crée un lien réel à la place d'un lien symbolique.
/J Crée une jonction de répertoires.
Lien Spécifie le nom du nouveau lien symbolique.
Cible Spécifie le chemin d'accès (relatif ou absolu) auquel
le nouveau lien fait référence.
C:\>
Noter que si /D crée un Lien Symbolique vers un répertoire, mklink sans
commutateur permet de créer un Lien Symbolique vers un fichier. Si le chemin de
la cible est absolu (g:\un-dossier\un-sous-dossier\cible) le lien symbolique
est absolu. Si le chemin donné est relatif (.\un-dossier\un-sous-dossier\cible)
le chemin est dit relatif. Nous verrons les conséquences de ces notions plus
loin.
Voici comment recréer la Jonction "Default User" dans le dossier Users avec la
commande mklink /J.
Comme cette Jonction est habituellement cachée et protégée
on lui redonne les attributs H et R avec la commande ATTRIB.
Si attrib sans
argument n'affiche pas les jonctions, utiliser DIR /AL pour les lister, ou
utiliser la complétion
de commandes en appuyant sur la touche tabulation : ATTRIB [TAB]
La
plupart de ces Jonctions sont interdites d'accès au groupe "Tout le monde".
La raison de cette disposition est expliquée
ici. On
utilisera la commande ICACLS pour rétablir cette restriction.
Pour savoir quels attributs et protections il faut redonner à une jonction regarder sur un autre compte,
ou sur une autre installation (installer au besoin une machine
virtuelle).
DIR /AL affiche les Jonctions et leurs cibles, ATTRIB [TAB]
affiche les attributs, ICACLS montre les ACL.
Première étape, examiner la jonction sur une installation servant de référence :
C:\Users\JF>cd..
C:\Users>dir /al
Répertoire de C:\Users
14/07/2009 07:08 <SYMLINKD> All Users [C:\ProgramData]
14/07/2009 07:08 <JONCTION> Default User [C:\Users\Default]
C:\Users>attrib "Default User"
HR C:\Users\Default User
C:\Users>icacls "Default User"
Default User Tout le monde:(DENY)(S,RD)
Tout le monde:(RX)
AUTORITE NT\Système:(F)
BUILTIN\Administrateurs:(F)
1 fichiers correctement traités ; échec du traitement de 0 fichiers
C:\Users>
Il n'y a plus qu'à corriger la jonction sur la machine concernée, en utilisant les mêmes commandes complétées des commutateurs adaptés :
C:\Users>mklink /J "Default User" Users\Default
Jonction créée pour Default User <<===>> Users\Default
C:\Users>attrib /L "Default User" +H +R
C:\Users>icacls "Default User" /DENY "Tout le monde":(RD) /L
fichier traité : Default User
1 fichiers correctement traités ; échec du traitement de 0 fichiers
C:\User>icacls "Default User"
Default User Tout le monde:(DENY)(S,RD)
Tout le monde:(I)(OI)(CI)(F)
AUTORITE NT\Système:(I)(OI)(CI)(F)
BUILTIN\Administrateurs:(I)(OI)(CI)(F)
1 fichiers correctement traités ; échec du traitement de 0 fichiers
C:\bidon>
Remarquer l'utilisation du commutateur /L qui autorise le traitement des "Links". Suite à l'action de la commande attrib ces Liens seront à nouveau cachés, et le cadenas sera à nouveau visible sur l'icone. Si l'utilisateur affiche les fichiers cachés et systèmes il sera tenté de cliquer sur ce qu'il voit comme des raccourcis. L'accès est alors refusé, résultat de la commande icacls. Le but est que l'utilisateur ne soit pas ensuite tenté de supprimer des fichiers qu'il pourrait croire en double alors qu'ils ne le sont pas. Cela protège également des jonctions récursives observées dans certains dossiers comme Application Data <== cet article montre également comment sauvegarder l'ACL d'un dossier, et comment utiliser cette sauvegarde pour réparer la protection.
Il est préférable d'utiliser le
SID du groupe
"Tout le monde", ça évite les problèmes de langue :
icacls
"Default User" /DENY "*S-1-1-0":(RD)
/L
Certaines jonctions ont l'attribut /i. D'après ce que dit l'aide (attrib /?) le fichier est ainsi indexé, mais sans contenu.
junction-restore-deny-access.vista-7.cmd
Si l'utilisation de lignes de
commandes vous pose problème, ou si vous avez beaucoup de jonctions à traiter, vous
pouvez vous aider de ce batch qui donne les attributs HSI et restaure
l'interdiction d'accès au groupe "Tout le monde".
La commande
fsutil est présente sur XP, Vista, Win7.
On a vu qu'elle pouvait être
utilisée à l'instar de mklink pour créer des Liens Réels
avec fsutil hardlink create.
Par Zebulon :
fsutil
: la trousse à outils de votre disque
E:\>fsutil
---- Commandes prises en charge ----
behavior Contrôle du mode du système de fichiers
dirty Gestion du bit d'intégrité du volume
file Commandes fichier spécifiques
fsinfo Informations du système de fichiers
hardlink Gestion des liens réels
objectid Gestion des ID d'objets
quota Gestion des quotas
repair Gestion de réparation spontanée
reparsepoint Gestion du point d'analyse
resource Gestion du Gestionnaire transactionnel de ressources
sparse Contrôle de fragmentation des fichiers
transaction Gestion des transactions
usn Gestion USN
volume Gestion des volumes
E:\>md dossier
E:\>echo toto>toto.txt
E:\>fsutil hardlink create
Utilisation : fsutil hardlink create <nouveau nom de fichier>
<nom de fichier existant>
Par ex. : fsutil hardlink create c:\foo.txt c:\bar.txt
E:\>fsutil hardlink create totohardlink.txt toto.txt
Liaison permanente créée pour E:\totohardlink.txt <<===>> E:\toto.txt
E:\>type totohardlink.txt
toto
E:\>fsutil reparsepoint
---- Commandes REPARSEPOINT prises en charge ----
query Interroge un point d'analyse
delete Supprime un point d'analyse
E:\>mklink /J dossierj dossier
Jonction créée pour dossierj <<===>> dossier
E:\>fsutil reparsepoint query dossierj
Valeur de la balise d'analyse : 0xa0000003
Valeur de balise : Microsoft
Valeur de balise : Substitut de nom
Valeur de la balise : Point de montage
Décalage nom substitut : 0
Longueur nom substitut : 28
Décalage nom affiché : 30
Longueur nom affiché : 20
Nom substitut : \??\E:\dossier
Nom affiché : E:\dossier
Analyser la longueur des données: 0x0000003c
Données d'analyse :
0000: 00 00 1c 00 1e 00 14 00 5c 00 3f 00 3f 00 5c 00 ........\.?.?.\.
0010: 45 00 3a 00 5c 00 64 00 6f 00 73 00 73 00 69 00 E.:.\.d.o.s.s.i.
0020: 65 00 72 00 00 00 45 00 3a 00 5c 00 64 00 6f 00 e.r...E.:.\.d.o.
0030: 73 00 73 00 69 00 65 00 72 00 00 00 s.s.i.e.r...
E:\>
fsutil hardlink list <nom>
permet de lister les Liens Réels. On ne peut pas faire comme DIR et lister les liens réels présents dans un dossier, mais en indiquant un nom de fichier à la commande, fsutil trouve les enregistrements qui pointent vers les mêmes octets. En conséquence quel que soit le fichier, cible ou Lien Réel, le résultat est le même. Dans l'exercice qui suit, on crée un fichier avec la commande echo, puis un lien réel avec mklink. La commande type montre que le lien réel représente bien les mêmes octets. On applique ensuite la commande fsutil hardlink list au deux fichiers pour constater qu'on obtient bien le même résultat.
F:\>echo test>cible.txt
F:\>mklink /H lienreel.txt cible.txt
Liaison permanente créée pour lienreel.txt <<===>> cible.txt
F:\>type lienreel.txt
test
F:\>fsutil hardlink list cible.txt
\cible.txt
\lienreel.txt
F:\>fsutil hardlink list lienreel.txt
\cible.txt
\lienreel.txt
F:\>HardLink?>
On peut se faire une petite commande (une de plus) qui apparaîtra dans le menu contextuel des fichiers avec ce reg :Ce nouvel item [HardLink?>] permettra de lister les liens réels en rapport avec un fichier.
Si ce bricolage qui permet d'en savoir un peu sur les Liens Réels présents sur le disque dur a retenu votre attention, vous pourriez être intéressés par Link Shell Extension présenté plus loin. En effet, une fois installé, il permet de créer en un clic ce que le traducteur a choisi d'appeler "Liens physiques" et "Liens symboliques". Il ajoute un repère sur tous les Liens Réels, permettant ainsi de les visualiser facilement dans Explorer. enfin, il ajoute un onglet "Lien" aux propriétés des fichiers qui liste les Liens Réels.
En utilisant [HardLink?>] ou Link Shell Extension pour analyser les Liens Réels présents dans Windows et System32 de W7, on verra des tas de choses intéressantes. On comprendra alors le rôle du mystérieux dossier winsxs dont le poids en apparence disproportionné inquiète les utilisateurs. Voir également Jonctions?>
Un Lien Réel est une nouvelle entrée du Directory ou Index vers un fichier (NTFS adds a directory entry for the hard link without duplicating the original file)
Les Liens Réels ne concernent que les fichiers :
mklink /H c:\court\Toto.txt
"c:\très
profonde arborescence\tas de dossiers\toto à la plage.txt"
Pour info les ADS sont également concernés : voir à la fin de cette petite démo.
Le résultat est comme un second fichier mais les deux sont liés : une modification dans un fichier apparaît dans l'autre fichier. Un fichier n'est en effet qu'un paquet d'octets sur le disque dur, et ce que nous montre l'explorateur est une représentation imagée des fichiers. L'icone du fichier n'est pas le fichier, mais une évocation de celui-ci, un lien vers les octets.
L'analogie de la laisse
On utilise parfois l'analogie du chien relié à son maître par une laisse. Appelons-le "Octets". Le chien peut avoir plusieurs laisses. Tant que des laisses existent, le chien est là (en clair les octets du fichier sont accessibles). Si la dernière laisse est coupée, le lien avec le chien est perdu. C'est ce qui se passe quand nous supprimons un fichier, nous coupons la dernière laisse, les octets existent toujours mais ont disparu pour le système, ils ne sont plus accessibles. En informatique si on veut faire attention à ses octets, on surveille aussi ses laisses, sinon on aura besoin de fouiller la Corbeille.
La Corbeille est la ficelle de secours. Si nous la vidons, les octets sont alors livrés aux hasards des écritures et finiront par être remplacés. Si on a vidé la Corbeille et ainsi perdu un fichier important il faut faire en sorte de ne plus écrire sur la partition, et utiliser un logiciel spécialisé pour identifier les octets, les copier sur une autre partition, et leur réattribuer ... une laisse.
Noter qu'avec Vista est apparue une notion d'historique des fichiers dont l'utilisation a été avec bonheur étendue à toutes les versions de Windows 7. Il s'agit du système des Versions Précédentes. Exemple avec Récupération de ntuser.dat à partir d'une version précédente.
La conséquence est qu'on peut supprimer l'un ou l'autre des deux "fichiers" : comme il reste une laisse vers les octets, l'autre fichier, qui pourtant peut porter un nom différent, reste en place. Comme on peut créer plusieurs Liens Réels vers un fichier, celui-ci ne sera perdu que quand on aura supprimé toutes les laisses.
De cette conception, un
Lien
Réel
ne peut pas pointer vers un fichier d'un autre volume.
Sur XP on peut créer un
Lien Réel avec la commande
fsutil
hardlink create. La commande fsutil a été très
partiellement abordée à la section précédente.
Pour examiner ce qui se passe sur un volume quand on opère sur des fichiers, rien de tel qu'une petite clé USB fraîchement formatée. On se sert de l'excellent HxD pour visualiser ses octets. Le contenu du fichier texte étant connu, une simple recherche permet de retrouver les enregistrements :
L'objet habituellement désigné sous le terme de raccourci est un fichier dont l'extension LNK est masquée. On peut faire plusieurs raccourcis vers un même objet (fichier ou dossier). Un raccourci peut pointer un objet situé sur un autre volume. Les propriétés d'un raccourci permettent d'y apporter des modifications, on peut par exemple ajouter des paramètres. Certains raccourcis ont une extension URL, ils utilisent des protocoles propres au web. Comme les raccourcis sont des fichiers, ils occupent de l'espace. Le procédé est indépendant du type de format. Enfin un raccourci ne peut être qu'absolu.
Certaines icones sur le bureau et dans le menu démarrer se comportent comme des raccourcis, mais ne sont pas supprimables et ont des menus contextuels particuliers. Ce sont des objets shell définis dans le registre http://fspsa.free.fr/objets-shell.htm
J'ai reporté en Annexe une section sur l'objet Folder Shortcut. Ça permet de faire de la redirection de dossiers sans utiliser le NTFS. Folder Shortcut intéressera certainement ceux qui sont en FAT32.
Les Liens NTFS
Les Liens Symboliques permettent de réellement créer de nouveaux chemins vers les objets. Dans l'exemple vu plus haut c:\court\Toto.txt désignera réellement les octets du fichier enfoui dans l'arborescence. Les deux chemins coexisteront et seront aussi valables l'un que l'autre.
Liens Réels
Un Lien Réel n'occupe pas de place, c'est un fichier virtuel. Un Lien Réel crée une référence supplémentaire dans la MFT (Master File Table) vers un fichier situé sur le volume. Si le fichier original est supprimé, les Liens Réels qui pointent vers ses octets existent toujours et restent utilisables. Pour que ces octets soient libérés il faut supprimer tous les Liens Réels concernés.
L'exercice suivant montre la création d'un fichier cible suivi de la création d'un Lien Réel. On modifie ensuite tour à tour les contenus de l'un ou l'autre. La suppression de la cible ne supprime pas le contenu du Lien Réel puisqu'il s'agit en fait des mêmes octets, sous deux noms différents :
G:\>echo Je suis un Lien Réel ! >cible
G:\>mklink /H lien cible
Liaison permanente créée pour lien <<===>> cible
G:\>type lien
Je suis un Lien Réel !
G:\>echo On sait ! >>lien
G:\>type cible
Je suis un Lien Réel !
On sait !
G:\>echo Je pars ! >>cible
G:\>del cible
G:\>type lien
Je suis un Lien Réel !
On sait !
Je pars !
G:\>del lienRemarque : dans cet exemple en lignes de commandes on s'est affranchi des extensions en créant des fichiers textes car on affiche leurs contenus avec la commande type. En pratique il faut respecter les extensions des Liens Réels si on veut qu'en cliquant dessus ils s'ouvrent comme prévus. Même chose avec les Liens Symboliques quand ils pointent des fichiers.
Jonctions
Les Jonctions sont basées comme les Liens Symboliques sur un mécanisme du NTFS appelé Reparse Points. À la différence des Liens Symboliques ils ne peuvent désigner que des dossiers, éventuellement situés sur d'autres volumes, et n'utilisent que des chemins absolus. Ils ne peuvent cibler un dossier sur le réseau.
Création d'un dossier cible, création d'une Jonction en utilisant un chemin relatif vers le dossier cible, vérification du Lien absolu enregistré avec dir, déplacement du lien et de la cible dans un dossier, revérification du lien avec dir, constatation que le lien absolu est perdu :
G:\>md cible G:\>mklink /J link cible
Jonction créée pour link <<===>> cible
G:\>dir /AL
<JONCTION> link [G:\cible]
G:\>move link aliens
1 répertoires déplacés.
G:\>move cible aliens
1 répertoires déplacés.
G:\>cd aliens
G:\aliens>dir /AL
<JONCTION> link [G:\cible]
G:\aliens>cd link
Le fichier spécifié est introuvable.En rouge, le chemin est absolu, alors que c'est un chemin relatif qui avait été entré. Les Jonctions ne sont pas concernées par les liens relatifs. On va voir que les Liens Symboliques sont capables d'être relatifs ou absolus.
Cette démo montre la façon dont sont enregistrés les Jonctions dans la MFT. Les enregistrements sont absolus :
Liens Symboliques
Les Liens Symboliques désignent des fichiers ou des dossiers, et peuvent pointer vers d'autres volumes sur le réseau. De cette disposition, la suppression de la cible d'un Lien Symbolique le rend orphelin, comme cela arrive avec les raccourcis. Si le lien est relatif, le déplacement du lien symbolique provoque la perte de la liaison à sa cible. Les Liens Symboliques disposent d'un onglet "Raccourci" dans leurs Propriétés permettant de consulter la Cible du Lien.
Pour créer un lien relatif, il suffit d'indiquer un chemin relatif dans la commande mklink.
Création d'un fichier texte avec la commande echo, création d'un lien symbolique avec mklink, vérification du fonctionnement du lien avec type, déplacement du lien vers un autre dossier avec move, vérification que le lien est cassé (type link ne trouve plus le fichier), déplacement de la cible dans le dossier, vérification du fonctionnement revenu du lien, et vérification du type de lien créé :
G:\>echo Coucou ! >cible
G:\>mklink link cible
Lien symbolique créé pour link <<===>> cible
G:\>type link
Coucou !
G:\>md aliens
G:\>REM Déplacement du lien vers un autre dossier
G:\>move link aliens
1 fichier(s) déplacé(s).
G:\>cd aliens
G:\aliens>type link
Le fichier spécifié est introuvable.
G:\aliens>move \cible .
1 fichier(s) déplacé(s).
G:\aliens>type link
Coucou !
G:\aliens>dir /AL
<SYMLINK> link [cible]
![]()
On en déduit qu'on peut créer un lien relatif en remplaçant la lettre du lecteur par un point.
On en verra des exemples plus loin lors de la copie de liens relatifs.
Pour créer un lien absolu vers un fichier, on indique un chemin absolu :
G:\>echo Coucou !! >cible
G:\>mklink link g:\cible
Lien symbolique créé pour link <<===>> g:\cible
G:\>type link
Coucou !!
G:\>REM Déplacement du lien vers un autre dossier
G:\>move link \aliens
1 fichier(s) déplacé(s).
G:\>cd aliens
G:\aliens>type link
Coucou !!
G:\aliens>move ..\cible .
1 fichier(s) déplacé(s).
G:\aliens>type link
Le fichier spécifié est introuvable.
G:\aliens>dir /AL
<SYMLINK> link [g:\cible]
Lorsqu'on copie un raccourci (LNK ou URL) avec Explorer, on copie le raccourci, il n'y a aucune ambiguïté. Avec les Jonctions et les Liens Symboliques, Explorer ne voit ces objets que comme on a prévu qu'il les voit. Copier les Liens plutôt que leurs Cibles nécessite de pouvoir signifier à l'utilitaire ce que l'on veut copier. Explorer n'a pas de commutateur ou de menu-contextuel ayant cette fonction, il faut utiliser d'autres outils.
Robocopy
Robocopy est une puissante commande de copie. Ses nombreux commutateurs permettent de l'utiliser de différentes façons. Le commutateur le plus connu est sans doute /MIR qui permet de faire une copie miroir d'un dossier. Attention de ne pas se tromper en utilisant cette commande, par exemple le miroir d'un dossier vide vers un dossier empli de données n'est en général pas voulu (la première fois) ! Bon à savoir, un commutateur permet de simuler une manip avant de l'exécuter en réel. Robocopy fait partie de Windows depuis Vista. Cette version n'est pas utilisable sur XP, aller voir téléchargement et utilisations.
Par défaut Robocopy copie non pas les liens NTFS en tant que liens, mais les dossiers et les fichiers qu'ils représentent, en gardant le nom donné au lien. Lors d'opérations de sauvegarde par exemple on voudra éviter de copier ces liens en utilisant les commutateurs comme /XJ (eXclure Jonctions), /XJD (eXclure Jonctions de Dossiers), et /XJF (eXclure Jonctions de Fichiers). Remarque : ce terme utilisé dans l'aide de Robocopy est abusif, il n'existe pas de Jonctions de fichiers, mais des Liens Symboliques de fichiers.
Dans l'exemple on utilise le commutateur /E pour copier aussi les dossiers vides.
Sans le commutateur /XJ la jonction est copiée en tant que dossier, c'est ce que montre le dir.
Avec le commutateur /XJ la jonction n'est pas copiée :
G:\>md dossier1
G:\>md dossier2
G:\>md dossier1\dossier-a-copier
G:\>mklink /J dossier1\jonction-de-dossier-a-copier dossier1\dossier-a-copier
Jonction créée pour dossier1\jonction-de-dossier-a-copier <<===>> dossier1\dossier-a-copier
G:\>robocopy dossier1 dossier2 /E
-------------------------------------------------------------------------------
ROBOCOPY :: Copie de fichiers robuste pour Windows
-------------------------------------------------------------------------------
Début : Sat Oct 03 16:16:17 2009
Source : G:\dossier1\
Dest : G:\dossier2\
Fichiers : *.*
Options : *.* /S /E /COPY:DAT /R:1000000 /W:30
-------------------------------------------------------------------------------
0 G:\dossier1\
Nouveau rép. 0 G:\dossier1\dossier-a-copier\
Nouveau rép. 0 G:\dossier1\jonction-de-dossier-a-copier\
-------------------------------------------------------------------------------
Total Copiés Ignorés Différences Échecs Supplém.
Rép. : 3 2 1 0 0 0
Fichiers : 0 0 0 0 0 0
Octets : 0 0 0 0 0 0
Durées : 0:00:00 0:00:00 0:00:00 0:00:00
Fin : Sat Oct 03 16:16:17 2009
G:\>dir dossier2
<REP> dossier-a-copier
<REP> jonction-de-dossier-a-copier
0 fichier(s) 0 octets
G:\>rd dossier2 /S /Q
G:\>md dossier2REM ====== PHASE 2 : avec commutateur /XJ ==========
G:\>robocopy dossier1 dossier2 /E /XJ
-------------------------------------------------------------------------------
ROBOCOPY :: Copie de fichiers robuste pour Windows
-------------------------------------------------------------------------------
Début : Sat Oct 03 16:18:14 2009
Source : G:\dossier1\
Dest : G:\dossier2\
Fichiers : *.*
Options : *.* /S /E /COPY:DAT /XJ /R:1000000 /W:30
-------------------------------------------------------------------------------
0 G:\dossier1\
Nouveau rép. 0 G:\dossier1\dossier-a-copier\
-------------------------------------------------------------------------------
Total Copiés Ignorés Différences Échecs Supplém.
Rép. : 3 1 2 0 0 0
Fichiers : 0 0 0 0 0 0
Octets : 0 0 0 0 0 0
Durées : 0:00:00 0:00:00 0:00:00 0:00:00
Fin : Sat Oct 03 16:18:14 2009
G:\>dir dossier2
Le volume dans le lecteur G s'appelle GGG=Copie de F=
Le numéro de série du volume est FEE3-87FD
Répertoire de G:\dossier2
03/10/2009 16:18 <REP> .
03/10/2009 16:18 <REP> ..
03/10/2009 16:18 <REP> dossier-a-copier
0 fichier(s) 0 octets
3 Rép(s) 15 443 877 888 octets libresPour résumer, Robocopy copie par défaut les contenus des Jonctions, ce qui explique les désagréments relatés plus haut quand des Jonctions ont pour cible leur propre conteneur (effet "La vache-qui-rit®"). Pour éviter cela on utilise en règle générale le commutateur /XJ et les jonctions sont simplement ignorées. Il n'est pas prévu de copier en tant que Liens des jonctions ou des liens symboliques de dossiers.
Si des Liens Symboliques de fichiers existent dans le dossier source, la copie est effectuée, mais en tant que fichier. Pour ne pas répliquer ces Liens, utiliser /XJ ou /XJF.
Il est toutefois possible, seulement pour les fichiers, de copier les Liens Symboliques au lieu des fichiers avec le commutateur /SL :
/SL:: copy symbolic links versus the target.
/SL:: copie les liens symboliques par opposition à la cible.Dans cet exemple on crée un Lien Symbolique absolu d'un fichier dans source, puis on copie source vers cible avec le commutateur /SL :
U:\>md source
U:\>md cibleU:\>echo coucou >fichier.txt
U:\>REM Création d'un lien symbolique absolu dans source
U:\>mklink source\symbolic.txt u:\fichier.txt
Lien symbolique créé pour source\symbolic.txt <<===>> u:\fichier.txt
U:\>REM /SL copie les Liens au lieu des fichiers :
U:\>robocopy source cible /SL
-------------------------------------------------------------------------------
ROBOCOPY :: Copie de fichiers robuste pour Windows
-------------------------------------------------------------------------------
Début : Sun Oct 04 02:15:48 2009
Source : U:\source\
Dest : U:\cible\
Fichiers : *.*
Options : *.* /COPY:DAT /R:1000000 /W:30
-------------------------------------------------------------------------------
1 U:\source\
Nouveau fichier 0 symbolic.txt
-------------------------------------------------------------------------------
Total Copiés Ignorés Différences Échecs Supplém.
Rép. : 1 0 1 0 0 0
Fichiers : 1 1 0 0 0 0
Octets : 0 0 0 0 0 0
Durées : 0:00:00 0:00:00 0:00:00 0:00:00
Fin : Sun Oct 04 02:15:48 2009
U:\>cd cible
U:\cible>dir
<SYMLINK> symbolic.txt [u:\fichier.txt]
1 fichier(s) 0 octetsLe dossier cible contient le Lien Symbolique et non le fichier.
En lisant "/SL copie les liens symboliques par opposition à la cible" on pourrait espérer que cela serait possible avec les dossiers. Ça ne marche pas, ni avec les Liens Symboliques ni avec les Jonctions, et malgré l'utilisation du commutateur /SL on récupère des dossiers et non des Liens :
U:\>md cible
U:\>md source
U:\>md dossier
U:\>mklink /D source\link-de-dossier u:\dossier
Lien symbolique créé pour source\link-de-dossier <<===>> u:\dossier
U:\>robocopy source cible /SL /E
-------------------------------------------------------------------------------
ROBOCOPY :: Copie de fichiers robuste pour Windows
-------------------------------------------------------------------------------
Début : Sun Oct 04 06:07:23 2009
Source : U:\source\
Dest : U:\cible\
Fichiers : *.*
Options : *.* /S /E /COPY:DAT /R:1000000 /W:30
-------------------------------------------------------------------------------
0 U:\source\
Nouveau rép. 0 U:\source\link-de-dossier\
-------------------------------------------------------------------------------
Total Copiés Ignorés Différences Échecs Supplém.
Rép. : 2 1 1 0 0 0
Fichiers : 0 0 0 0 0 0
Octets : 0 0 0 0 0 0
Durées : 0:00:00 0:00:00 0:00:00 0:00:00
Fin : Sun Oct 04 06:07:23 2009
U:\>dir cible
<REP> link-de-dossier
0 fichier(s) 0 octets
XCOPY
On a vu qu'avec l'arrivée de mklink plusieurs utilitaires avaient reçus des commutateurs supplémentaires adaptés aux Liens NTFS, par exemple /L avec copy, dir, attrib, icacls. Xcopy voit apparaître le commutateur /B. Voici un extrait de l'aide, le commutateur /B a été ajouté tout à la fin :
xcopy /?
/B Copie le lien symbolique et non pas la cible du lien.L'exemple montre l'utilisation de xcopy une première fois avec le commutateur /B, et une seconde fois sans le commutateur.
Xcopy demande toujours confirmation si ce qu'on copie est un fichier ou un dossier. Lorsqu'on copie un dossier, il suffit de terminer le chemin de la destination par une barre oblique inverse \ pour bien signifier que c'est un dossier. Avec un fichier on ne peut pas éviter la question. Si on veut automatiser on utilise une astuce consistant à écrire la réponse (F pour Fichier) dans un fichier dont on injecte le contenu en guise de réponse dans la commande. Le fichier créé avec la commande echo s'appelle ici simplement F. les commandes echo et xcopy sont enchainées avec && :
G:\>md dossier
G:\>echo coucou>fichier.txt
G:\>mklink symbol.txt g:\fichier.txt
Lien symbolique créé pour symbol.txt <<===>> g:\fichier.txt
G:\>REM copie du lien symbolique dans dossier
G:\>echo F>F&&xcopy symbol.txt dossier /B <F
G:symbol.txt
1 fichier(s) copié(s)
G:\>cd dossier
G:\dossier>type symbol.txt
coucou
G:\dossier>dir
<SYMLINK> symbol.txt [g:\fichier.txt]
1 fichier(s) 0 octets
G:\dossier>G :\REM ========= SECONDE PHASE =========
G:\>REM vérification que sans /B c'est un fichier qui est copié
G:\dossier>del symbol.txt
G:\dossier>cd..
G:\>echo F>F&&xcopy symbol.txt dossier <F
G:symbol.txt
1 fichier(s) copié(s)
G:\>cd dossier
G:\dossier>type symbol.txt
coucou
G:\dossier>dir
8 symbol.txt
1 fichier(s) 8 octetsLors de la copie du lien, le résultat est bien identifié comme SYMLINK et pèse zéro octet.
Dans le second cas c'est bien un fichier de huit octets qui a été copié.
Mklink permet de créer des Liens Symboliques de répertoire avec le commutateur /D, ou de fichiers en ne mettant aucun commutateur. En général on défini la cible du lien en indiquant son chemin complet. Mais si on remplace la lettre de lecteur par un point on obtient un lien relatif. Il serait intéressant de savoir copier des liens relatifs de façon à conserver une structure indépendante de la lettre de lecteur, ce serait utile en cas de sauvegarde. Le test suivant est effectué avec la simple commande copy et son commutateur /L
La commande echo crée un fichier texte.
La commande mklink sans
commutateur crée un Lien Symbolique.
Le Lien Symbolique est relatif car la
lettre du lecteur a été remplacée par un point.
On ajoute "-SR" (Symbolique
Relatif) au nom du lien obtenu :
X:\>echo coucou>1.txt X:\>mklink 1-sr.txt .\1.txt Lien symbolique créé pour 1-sr.txt <<===>> .\1.txt X:\>copy /L *.* y: 1-sr.txt 1.txt 2 fichier(s) copié(s). X:\> |
Y:\>dir 22/11/2010 11:40 <REP> . 22/11/2010 11:40 <REP> .. 22/11/2010 11:39 <SYMLINK> 1-sr.txt [.\1.txt] 22/11/2010 11:39 8 1.txt |
Le test final consiste à détruire les fichiers d'origine et à vérifier
le fonctionnement de 1-sr.txt.
Dans cet exemple on symbolise le lien
relatif en ajoutant "--" au nom :
X:\>md structure\dossier\repertoire X:\>md cedossier X:\>echo test>structure\dossier\repertoire\texte.txt X:\>cd cedossier X:\cedossier>mklink texte--.txt ..\structure\dossier\repertoire\texte.txt Lien symbolique créé pour texte--.txt <<===>> ..\structure\dossier\repertoire\texte.txt X:\cedossier>type texte--.txt test X:\cedossier>cd.. X:\>xcopy /S /E /B *.* y: X:cedossier\texte--.txt X:structure\dossier\repertoire\texte.txt 2 fichier(s) copié(s) X:\>rd /S /Q cedossier X:\>rd /S /Q structure X:\>y: Y:\>cd cedossier Y:\cedossier>type texte--.txt test Y:\cedossier>dir texte--.txt 22/11/2010 12:29 <SYMLINK> texte--.txt [..\structure\dossier\repertoire\texte.txt] |
NTFS obligatoire. FAT et exFAT
ne gèrent pas ces liens.
Contrairement aux raccourcis habituels, les Liens NTFS ne se réparent pas
d'eux-mêmes. Si la cible est déplacée ou renommée, le lien est perdu. Cette
remarque ne concerne pas les Liens Réels qui ciblent directement
l'enregistrement (les octets) du fichier. C'est pour cela qu'on les appelle des
Hard Links (liens durs).
Les Jonctions ne concernent que des dossiers.
Mklink /J ou /D pour un fichier est accepté (!), mais le résultat prend l'allure
d'un dossier et ne fonctionne pas.
On peut créer plusieurs Jonctions vers un même dossier. Idem pour les Liens
Symboliques.
Les Jonctions et les Liens Symboliques peuvent cibler vers un autre volume NTFS.
Les Jonctions ne peuvent cibler un dossier situé sur le réseau.
Si on supprime ou renomme la cible le Lien devient sans effet (sauf pour les
liens réels, qui pointent directement les octets du fichier).
Un Lien peut être supprimé ; la cible reste normalement inchangée.
On ne peut pas copier des Liens de dossiers : soit on ne copie rien, soit c'est
le dossier et son contenu qui est copié.
Rien n'est prévu pour se protéger des effets des liens imbriqués, sauf à
interdire leur accès avec icacls /L.
L'accès à certains Liens créés par le système est interdit (icacls
/L).
Le commutateur /XJ empêche
Robocopy de copier les dossiers pointés par les Liens.
Un Lien Réel ne peut concerner qu'un fichier du même volume.
On peut créer plusieurs Liens Réels vers un même fichier.
La suppression du fichier ou d'un Lien Réel n'a aucun effet sur le fichier et
ses autres Liens Réels.
Il faut supprimer tous les Liens Réels et le fichier pour libérer les octets.
Note : comme d'habitude ces octets ne seront réellement libérés qu'après vidage de la corbeille.
http://www.economicexpert.com/a/NTFS:Junction:point.htm
http://www.zebulon.fr/astuces/230-creer-un-lien-symbolique-sous-windows.html
http://fspsa.free.fr/recursivite.htm
Sur Vista les Liens NTFS sont identifiés par une flèche de raccourci sur
l'icone. C'est une bonne initiative car l'un des reproches faits aux jonctions
sur XP étaient leurs discrétions. On peut rapidement s'emmêler les crayons en
confondant dossiers et jonctions.
Le meilleur outil pour créer une Jonction sur XP est l'outil junction de
Sysinternals (voir la section Utilitaires ci-après). Utiliser son commutateur -D
(Delete) pour supprimer sans risque une Jonction. Cependant, j'ai supprimé
directement depuis l'explorateur de fichiers des Jonctions sur XP et Vista sans
que cela supprime la cible.
La suppression d'un Lien NTFS via l'explorateur de fichiers ne devrait pas
entrainer d'incident. Ils sont à présent bien identifiés comme des "raccourcis" par la
petite flèche habituelle sur l'icone (svp résistez à l'envie de ne pas afficher
ces symboles). Mais il n'est pas certain que d'autres logiciels interprètent
bien ces objets et ne suppriment pas la cible avec le Lien.
Il se peut aussi que l'utilisateur, un programme, ou une commande, ne perçoive pas toujours la différence entre
un Lien et sa cible. Les opérations qu'on pense faire sur un lien peuvent en
fait s'appliquer à la cible plutôt qu'au lien. Par exemple la commande attrib va
agir sur la cible si on oublie d'utiliser le commutateur /L.
Comment trouver des Liens Réels
Malgré la longue liste
disponible dans le mode Détails d'Explorer, il n'y a pas de colonne
permettant d'identifier les Liens Réels. Ceux-ci ne sont cependant pas tout à
fait inconnus de l'Explorateur de fichiers puisqu'on note en effet que ceux créés par
l'utilisateur avec la commande mklink adoptent en standard une icone
particulière. Il est probable que Microsoft n'ait pas voulu troubler davantage
les utilisateurs avec ces notions, car les Liens Réels sont pléthore dans Win7.
Ce qui explique d'ailleurs la taille d'apparence démesurée du dossier
winsxs. Plus d'infos avec fsutil,
vu plus haut.
Link Shell Extension ajoute un onglet "Lien" dans les
propriétés des fichiers qui permet de lister les Liens Réels du fichier :
Une Jonction ne peut être qu'un chemin absolu vers un dossier.
On pourra donc utiliser les Jonctions pour créer des liens absolus vers
des dossiers.
Et réserver les Liens Symboliques pour des liens relatifs vers
des dossiers.
Pour les fichiers on pourra utiliser les Liens Symboliques qui ont l'avantage
d'être listés dans une commande DIR /AL.
Si on ne veut pas que ce soit listé
avec DIR, alors faire un Hardlink.
On pourra utiliser des Liens Réels, ils ne seront pas affichés en tant que Liens NTFS par la commande DIR et apparaitront comme des fichiers-répliques du fichier originel. Retenir que ces Liens Réels ne sont que des laisses, et non les octets du fichier. Ce ne sont pas des sauvegardes. Cependant ils doivent tous être supprimés pour que les octets soient rendus à l'univers des octets sans attaches. Alors qu'un Lien Symbolique ou un raccourci peut très bien continuer à pointer vers des octets qui n'existent plus.
L'utilité de ces moyens est démontré par l'utilisation qui en est faite par Vista dans le dossier Users et ses sous-dossiers tels les profils des utilisateurs. D'autres systèmes d'exploitation utilisent ces mêmes méthodes.
Au niveau utilisateur on avait déjà commencé sous XP à se servir des Jonctions pour délocaliser des dossiers du système afin de libérer de la place sur une partition système devenue trop étroite. Ou pour alléger les images de sauvegarde de la partition système. Si sur XP je n'ai jamais vu l'utilisation d'une Jonction pour délocaliser "Documents and Settings", l'expérience semble devenir populaire avec le dossier Users de Vista et Win7. Il faut faire l'opération dès l'installation à cause de, justement, la présence des Jonctions dans les profils. Comme on l'a vu leur copie n'est en effet pas prévue. Quoique leur absence ne soit pas un drame, seule la compatibilité pourrait poser problème, leur recréation est souhaitable et nécessite l'utilisation d'un batch. Mais en procédant dès l'installation, les Jonctions seront créées avec les profils.
Il est regrettable que les Liens NTFS ne fonctionnent pas avec le format exFAT (version pour XP) mis au point pour les volumes amovibles, les liens relatifs auraient été très appréciés (voir l'article sur les changements de lettres des volumes amovibles). On peut bien sûr formater, même sous XP, une clé USB en NTFS, mais ce n'est pas recommandé avec ce système, à cause de l'emprise que prend explorer.exe sur le volume en activant systématiquement la surveillance disque.
Ce problème n'a cependant plus cours sur Vista. Si on est sûr de ne connecter la clé que sur Vista ou Win7, pas de problème, la surveillance disque ne s'active plus automatiquement pour les volumes amovibles. Quand XP aura disparu de la circulation, on pourra abuser des Liens Symboliques relatifs ! Les liens sur une clé USB fonctionneront quelle que soit la lettre attribuée par le système au volume amovible.
Voici un exemple d'utilisation pratique des jonctions pour résoudre un problème de délocalisation de données utilisées intensivement, sur un disque rapide SSD. Cela permet de résoudre simplement la question sans avoir à corriger tous les logiciels devant avoir accès à ces données. C'est ici : De l'utilisation des points de jonctions pour l'optimisation du streaming de samples sonores (MAO)
http://en.wikipedia.org/wiki/NTFS
http://en.wikipedia.org/wiki/NTFS_reparse_point
http://en.wikipedia.org/wiki/NTFS_junction_point
http://en.wikipedia.org/wiki/NTFS_symbolic_link
http://en.wikipedia.org/wiki/Inode
http://fr.wikipedia.org/wiki/Hard_link
http://en.wikipedia.org/wiki/Hard_link
http://fr.wikipedia.org/wiki/Lien_symbolique
http://en.wikipedia.org/wiki/Symbolic_link
http://fr.wikipedia.org/wiki/Master_File_Table
http://www.zebulon.fr/astuces/230-creer-un-lien-symbolique-sous-windows.html
http://www.zebulon.fr/astuces/commenter/1-230-creer-un-lien-symbolique-sous-windows
Dans le noyau de Windows Vista : Partie 1 ; Liens symboliques basés sur des
fichiers
"Un lien symbolique est un fichier virtuel qui pointe vers un fichier réel" :
http://www.bellamyjc.org/fr/theoriemultiboot3.html#liens_symboliques
Création d'un lien symbolique avec la commande FSUTIL
http://www.bellamyjc.org/fr/theoriemultiboot3.html#FSUTIL
XP : délocalisation du dossier C:\Windows\$hf_mig$ et mise en place d'un
jonction pour tromper le système
http://www.bellamyjc.org/fr/windowsxp2003.html#hf_mig
L'effet vache qui rit
XP : délocalisation de Program Files et mise en place d'une jonction pour
tromper le système
Syllabus Systèmes d'Exploitation de Monica Bastreghi
NTFS Documention
par Richard Russon et Yuval Fledel - html
NTFS Documention
par Richard Russon et Yuval Fledel - scribd
http://www.hotline-pc.org/ads.htm
Previewing the Windows NT 5.0 File System ; Hard Links ; Reparse Points ...
TECHNET
: Working
with Files System
TECHNET
: How NTFS Works
(lire jusqu'à la fin !)
MSDN :
About
Directory Management (bis)
-
Programming Considerations (bis)
-
Creating Symbolic Links (bis)
MSDN :
Hard Links and
Junctions
MSDN :
Symbolic Links
MSDN :
Reparse Points
MSDN :
Reparse Point
Tags
MSDN :
Reparse Points
Operations
MSDN :
Reparse Points and
File Operations
MSDN :
Per-User junctions
ans System Junctions
http://para.inria.fr/~remy/poly/system/camlunix/fich.html
http://www.flexhex.com/docs/articles/hard-links.phtml
MKLINK
http://www.howtogeek.com/howto/windows-vista/using-symlinks-in-windows-vista/
http://techblissonline.com/vista-create-or-delete-ntfs-symbolic-link-or-symlinks/
http://technet.microsoft.com/en-us/library/cc753194
http://technet.microsoft.com/en-us/library/cc753194#BKMK_examples
Délocalisation
Win7 (et Vista) : installation : délocalisation de Users, Program Files, et
ProgramData, avant la création du premier profil
http://tuts4tech.net/2009/08/05/windows-7-move-the-users-and-program-files-directories-to-a-different-partition/
Cette technique est indiquée à titre d'information. Je la déconseille, à
moins d'être absolument au courant de ce qu'on fait.
http://google.fr/search?num=99&q=Déplacer+Mes+Documents+par+défaut+et+par+script
http://www.chantal11.com/2010/02/deplacer-son-dossier-utilisateur-par-defaut-et-par-script-windows-7/
Un script pour
délocaliser le dossier Public
Un script pour
délocaliser "Mes Documents"
http://www.forum-seven.com/forum/topic4073.html
What's New in
Folder Redirection and User Profiles
When you use the System Preparation Tool (Sysprep) or Windows Vista Setup to
apply the FolderLocations unattend settings, some system directory junctions do
not point to the new target location
http://www.tutoriaux-excalibur.com/forum-7/documents-and-settings-n-est-pas-accessible-acces-refuse-t999.html
http://google.fr/search?num=99&q=site:tutoriaux-excalibur.com/forum-7+"documents+and+settings"
Access
Control : Understanding Windows File And Registry Permissions
Les
nouvelles ACL améliorent la sécurité dans Windows Vista
http://fspsa.free.fr/recursivite.htm
http://fspsa.free.fr/lettre-lecteur-amovible.htm
http://fspsa.free.fr/lettre-lecteur-amovible.htm#liens-relatifs
http://fspsa.free.fr/robocopy.htm
L'objet Folder Shortcut a pour CLSID {0AFACED1-E828-11D1-9187-B532F1E9575D}. Il permet, avec l'aide d'un fichier Desktop.ini accompagné d'un raccourci Target.lnk d'obtenir un comportement ressemblant aux jonctions : en cliquant sur un dossier TOTO on ouvre un dossier cible TITI qui peut être situé sur un autre volume. Le contenu du véritable dossier TOTO reste caché (héhé). Ce procédé permettra comme pour les jonctions de tromper Windows ou un programme, et de corriger ainsi certains problèmes de délocalisation ou d'installation. Utilisable sur FAT32, c'est indépendant du système de fichiers. C'est implanté sur tous les Windows.
Registre :
HKLM\SOFTWARE\Classes\CLSID\{0AFACED1-E828-11D1-9187-B532F1E9575D}
Utilisation :
On crée dans le dossier A un raccourci nommé TARGET (son nom
complet est donc target.lnk) pointant vers un dossier B.
On ajoute dans le
dossier A un fichier Desktop.ini dont le contenu est :
[.ShellClassInfo]
CLSID2={0AFACED1-E828-11D1-9187-B532F1E9575D}
Flags=2
ConfirmFileOp=0
Il reste à donner l'attribut System au dossier A pour que celui-ci exploite
son Desktop.ini avec la commande attrib +s "chemindudossier"
Pour
retrouver le comportement habituel et pouvoir afficher le contenu de A (et non
le contenu de B), retirer l'attribut.
On voit qu'on passera facilement d'un
état à l'autre simplement avec cette commande attrib (faire des batchs).
Gilles Ronsin a créé un script
automatisant la création des fichiers desktop.ini et target.lnk nécessaires à la
redirection :
http://gilles.ronsin.free.fr/#targetlnk
http://gilles.ronsin.free.fr/fichiers/targetlnk.vbs
Plus d'infos :
http://www.google.fr/search?num=100&q=0AFACED1-E828-11D1-9187-B532F1E9575D
http://www.google.fr/search?tbs=bks%3A1&q=0AFACED1-E828-11D1-9187-B532F1E9575D
http://www.hotline-pc.org/registreshell.htm
http://www.johnlandells.com/reparsing-folders-in-xp
Cet article compare
les Shell Links aux Junctions :
http://www.pearlmagik.com/winbolic/
System.Link.TargetParsingPath
The Shell Link
Object and the Shell Folder Shortcut Object support being the host object of a
shell instance object
http://fr.wikipedia.org/wiki/Captive_NTFS
http://www.ntfs.com/disk-scan.htm
Publié le 21/9/2009