Dernière mise-à-jour :

104.6 - Créer et modifier des liens physiques et symboliques (2/60)

Système de Fichiers Unix

Chaque partition sous un système Unix peut héberger une des structures suivantes :

superbloc

inode

bloc de données

blocs d'indirection

Superbloc

Le superbloc contient :

la taille des blocs

la taille du système de fichiers

le nombre de montages effectués pour ce système de fichiers

un pointeur vers la racine du système de fichiers

les pointeurs vers la liste des inodes libres

les pointeurs vers la liste des blocs de données libres

Le Superbloc est dupliqué tous les 8 ou 16Mo sous ext3 et ext4. Pour réparer un système de fichiers en restaurant un Superbloc, utilisez la commande suivante :

# e2fsck -f -b 8193 /dev/sda1 [Enter]

Pour visualiser l'emplacement du Superbloc primaire et ses sauvegardes, utilisez la commande suivante :

root@debian6:~# dumpe2fs /dev/sda1 | grep -i superbloc
dumpe2fs 1.41.12 (17-May-2010)
superbloc Primaire à 0, Descripteurs de groupes à 1-1
superbloc Secours à 32768, Descripteurs de groupes à 32769-32769
superbloc Secours à 98304, Descripteurs de groupes à 98305-98305
superbloc Secours à 163840, Descripteurs de groupes à 163841-163841
superbloc Secours à 229376, Descripteurs de groupes à 229377-229377
superbloc Secours à 294912, Descripteurs de groupes à 294913-294913
superbloc Secours à 819200, Descripteurs de groupes à 819201-819201
superbloc Secours à 884736, Descripteurs de groupes à 884737-884737

root@debian7:~# dumpe2fs /dev/sda1 | grep -i superbloc
dumpe2fs 1.42.5 (29-Jul-2012)
superbloc Primaire à 0, Descripteurs de groupes à 1-1
superbloc Secours à 32768, Descripteurs de groupes à 32769-32769
superbloc Secours à 98304, Descripteurs de groupes à 98305-98305
superbloc Secours à 163840, Descripteurs de groupes à 163841-163841
superbloc Secours à 229376, Descripteurs de groupes à 229377-229377
superbloc Secours à 294912, Descripteurs de groupes à 294913-294913
superbloc Secours à 819200, Descripteurs de groupes à 819201-819201
superbloc Secours à 884736, Descripteurs de groupes à 884737-884737
superbloc Secours à 1605632, Descripteurs de groupes à 1605633-1605633

root@debian8:~# dumpe2fs /dev/sda1 | grep -i superbloc
dumpe2fs 1.42.12 (29-Aug-2014)
superbloc Primaire à 0, Descripteurs de groupes à 1-1
superbloc Secours à 32768, Descripteurs de groupes à 32769-32769
superbloc Secours à 98304, Descripteurs de groupes à 98305-98305
superbloc Secours à 163840, Descripteurs de groupes à 163841-163841
superbloc Secours à 229376, Descripteurs de groupes à 229377-229377
superbloc Secours à 294912, Descripteurs de groupes à 294913-294913
superbloc Secours à 819200, Descripteurs de groupes à 819201-819201
superbloc Secours à 884736, Descripteurs de groupes à 884737-884737
superbloc Secours à 1605632, Descripteurs de groupes à 1605633-1605633

Inodes

Chaque fichier est représenté par un inode. L'inode contient :

le type de fichier, soit -, d, l, b, c, p, s

les droits d'accès, par exemple rwx rw- r–

le nombre de liens physiques soit le nombre de noms

l'UID du créateur ou l'UID affecté par la commande chown s'il y a eu une modification

le GID du processus créateur ou le GID affecté par la commande chgrp

la taille du fichier en octets

la date de dernière modification de l'inode, soit le ctime

la date de dernière modification du fichier, soit le mtime

la date du dernier accès, soit le atime

les adresses qui pointent vers les blocs de données du fichier

Graphiquement, on peut schématiser cette organisation de la façon suivante :

Pour mieux comprendre, tapez la commande suivante :

root@debian6:~# ls -ld /dev/console /dev/loop0 /etc /etc/passwd
crw------- 1 root root 5, 1 4 juil. 14:34 /dev/console
brw-rw---- 1 root disk 7, 0 4 juil. 14:34 /dev/loop0
drwxr-xr-x 121 root root 12288 4 juil. 15:05 /etc
-rw-r--r-- 1 root root 1298 27 avril 2011 /etc/passwd

root@debian7:~# ls -ld /dev/console /dev/loop0 /etc /etc/passwd
crw------- 1 root root 5, 1 juin 26 16:17 /dev/console
brw-rw---T 1 root disk 7, 0 juin 26 16:17 /dev/loop0
drwxr-xr-x 133 root root 12288 juil. 4 16:36 /etc
-rw-r--r-- 1 root root 1657 juin 26 15:42 /etc/passwd

root@debian8:~# ls -ld /dev/console /dev/sda /etc /etc/passwd
crw------- 1 root root 5, 1 Oct 15 15:27 /dev/console
brw-rw---- 1 root disk 8, 0 Oct 15 15:27 /dev/sda
drwxr-xr-x 134 root root 12288 Oct 15 15:27 /etc
-rw-r--r-- 1 root root 2202 Oct 15 13:27 /etc/passwd

Le premier caractère de chaque ligne peut être un des suivants :

- - un fichier

d - un répertoire

l - un lien symbolique

b - un périphérique du type bloc

c - un périphérique du type caractère

p - un tube nommé pour la communication entre processus

s - un socket dans un contexte réseau

Pour visualiser le numéro d'inode, utilisez l'option -i :

root@debian6:~# ls -ldi /dev/console /dev/loop0 /etc /etc/passwd
1251 crw------- 1 root root 5, 1 4 juil. 14:34 /dev/console
2041 brw-rw---- 1 root disk 7, 0 4 juil. 14:34 /dev/loop0
194689 drwxr-xr-x 121 root root 12288 4 juil. 15:05 /etc
201193 -rw-r--r-- 1 root root 1298 27 avril 2011 /etc/passwd

root@debian7:~# ls -ldi /dev/console /dev/loop0 /etc /etc/passwd
1196 crw------- 1 root root 5, 1 juin 26 16:17 /dev/console
3269 brw-rw---T 1 root disk 7, 0 juin 26 16:17 /dev/loop0
260609 drwxr-xr-x 133 root root 12288 juil. 4 16:36 /etc
262280 -rw-r--r-- 1 root root 1657 juin 26 15:42 /etc/passwd

root@debian8:~# ls -ldi /dev/console /dev/sda /etc /etc/passwd
5676 crw------- 1 root root 5, 1 Oct 15 15:27 /dev/console
6938 brw-rw---- 1 root disk 8, 0 Oct 15 15:27 /dev/sda
260609 drwxr-xr-x 134 root root 12288 Oct 15 15:27 /etc
262545 -rw-r--r-- 1 root root 2202 Oct 15 13:27 /etc/passwd

Blocs de données

Les données sont stockées dans des blocs de données. Dans le cas d'un répertoire, le bloc de données contient une table qui référence les inodes et les noms des fichiers dans le répertoire. Cette table s'appelle une table catalogue.

Le nom d'un fichier n'est pas stocké dans l'inode mais dans une table catalogue. Cette particularité nous permet de donner deux noms différents au même fichier. Pour ajouter un nouveau nom à un fichier, il convient de créer un lien physique.

Liens Physiques

Un lien physique se crée en utilisant la commande suivante :

ln nom_du_fichier nom_supplémentaire

Pour illustrer ce point, tapez la ligne de commande suivante :

root@debian8:~# cd /tmp; mkdir inode; cd inode; touch fichier1; ls -ali
total 8
11619 drwxr-xr-x 2 root root 4096 Jan 21 11:56 .
199 drwxrwxrwt 14 root root 4096 Jan 21 11:56 ..
11775 -rw-r--r-- 1 root root 0 Jan 21 11:56 fichier1

Notez bien le numéro de l'inode du fichier fichier1. Notez aussi que le numéro dans le troisième champs de la ligne de fichier1 a la valeur 1 :

11775 -rw-r–r– 1 root root 0 Jan 21 11:56 fichier1

Créez maintenant un lien physique :

# ln fichier1 fichier2 [Entrée]

Visualisez le résultat :

root@debian8:/tmp/inode# ln fichier1 fichier2
root@debian8:/tmp/inode# ls -ali
total 8
11619 drwxr-xr-x 2 root root 4096 Jan 21 11:57 .
199 drwxrwxrwt 14 root root 4096 Jan 21 11:56 ..
11775 -rw-r--r-- 2 root root 0 Jan 21 11:56 fichier1
11775 -rw-r--r-- 2 root root 0 Jan 21 11:56 fichier2

Notez les deux lignes suivantes :

11775 -rw-r–r– 2 root root 0 Jan 21 11:56 fichier1
11775 -rw-r–r– 2 root root 0 Jan 21 11:56 fichier2

Les deux fichiers, fichier1 et fichier2, sont référencés par le même inode. Le nombre de liens est donc augmenté de 1 (le numéro dans le troisième champs).

Important : Un lien physique ne peut être créé que dans le cas où les deux fichiers se trouvent dans le même filesystem et que le fichier source existe.

Liens Symboliques

Un lien symbolique est un raccourci vers un autre fichier ou répertoire. Un lien symbolique se crée en utilisant la commande suivante :

ln -s nom_du_fichier nom_raccourci

Pour illustrer ce point, tapez la ligne de commande suivante :

root@debian8:/tmp/inode# ln -s fichier1 fichier3
root@debian8:/tmp/inode# ls -ali
total 8
11619 drwxr-xr-x 2 root root 4096 Jan 21 11:58 .
199 drwxrwxrwt 14 root root 4096 Jan 21 11:56 ..
11775 -rw-r--r-- 2 root root 0 Jan 21 11:56 fichier1
11775 -rw-r--r-- 2 root root 0 Jan 21 11:56 fichier2
11776 lrwxrwxrwx 1 root root 8 Jan 21 11:58 fichier3 -> fichier1

Notez que le lien symbolique est référencé par un autre inode. Le lien symbolique pointe vers le fichier1.

Important : Un lien symbolique peut être créé même dans le cas où les deux fichiers se trouvent dans deux filesystems différents et même dans le cas où le fichier source n'existe pas.

<html>

Copyright © 2004-2017 Hugh Norris.<br><br> <a rel=“license” href=“http://creativecommons.org/licenses/by-nc-nd/3.0/fr/”><img alt=“Licence Creative Commons” style=“border-width:0” src=“http://i.creativecommons.org/l/by-nc-nd/3.0/fr/88x31.png” /></a><br />Ce(tte) oeuvre est mise à disposition selon les termes de la <a rel=“license” href=“http://creativecommons.org/licenses/by-nc-nd/3.0/fr/”>Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Pas de Modification 3.0 France</a>.

</html>