Partitions et système de fichier avec GNU/Linux

EN Unix, les données, les périphériques et processus sont reliés à un unique système de fichier, dont le sommet ("/") est appelé racine, ou root. Tout se passe de façon de plus en plus automatique, mais il est parfois utile de savoir comment cela se passe.

Cette page explique le minimum à connaître sur un système GNU/Linux (ligne de commande, système de fichiers...)

1. Partitions

1.1 swap
1.2 root
1.3 boot
1.4 home
1.5 Autres

2. Montage

2.1 mount
2.2 fstab
2.3 hdparm
2.4 df
2.5 lsblk
2.6 dd

Les fichiers et répertoires sont traités sur une autre page.

1. Partitions

Les clés USB, disques durs de type IDE/ATAPI et SCSI sont maintenant reconnus par le système sous les descripteurs /dev/sda pour le premier, /dev/sdb... Pour Debian, les lecteurs de CD ou DVD est néanmoins considéré comme sr0.

À cause du BIOS, les disques durs ne peuvent être partagés qu'en un maximum de quatre partitions primaires ou physiques (de sda1 à sda4), mais d'autres peuvent être désignées comme «logiques» (sda5, sda6...), ces dernières étant des sous-partitions de partitions primaires alors appelées «étendues».

Ces partitions sont formatées, c'est-à-dire que les données sont organisées selon un schéma, qui varie selon le système d'exploitation. ext2 est un format qui permet la restauration de fichiers effacés, mais ext3 est journalisé, ce qui permet la restauration des dernières modifications même en cas d'éteinte sauvage de l'ordinateur (plus fréquent que les plantages) ; ext4 est la norme de la deuxième décennie, mais sera remplacé à terme par btrfs. Je déconseille les formats exotiques tel que reiserfs: des transferts de fichiers moyens entre une partition reiser et une ext3 se sont révélés désastreux (gros fichiers mutilés).

Le système d'exploitation commence à perdre du temps lorsqu'une partition commence être saturée: l'analogie de l'entrepôt quasi-rempli permet d'imaginer les déplacements supplémentaires nécessaires à l'insertion de nouvelles marchandises. Cela dépend de la grosseur des fichiers manipulés, mais 90% semble être la limite à partir de laquelle les accès au disque prennent plus de temps.

Une partition /home entièrement saturée ne permet plus au bureau de se lancer. Il faut alors lancer le système en mode rescue et supprimer quelques gros fichiers (mc est alors très pratique) pour résoudre ce problème.

Contrairement à une croyance populaire, les partitions Unix fragmente les fichiers, en cas de partitions très encombrées, mais le système s'arrange pour les défragmenter en tâche de fonds.

1.1 Partition swap

Cette partition est utilisée à des sauvegardes temporaires pour décharger la RAM (mémoire vive, mémoire de travail du processeur). En ce sens, elle permet au système de ne pas trop ralentir en recréant ce qu'il a été obligé d'effacer faute de place. Cela dit, l'écriture et la relecture sur disque dur prennent également du temps (c'est moins vrai pour les disque SSD), ces processus sont en tout cas plus lents que la véritable RAM.

On réserve traditionnellement de une à deux fois la taille de la mémoire vive installée sur une machine, à concurrence de 2Go. Si vous disposez de 512Mo de RAM, 800Mo devraient suffire. Certains estiment pouvoir s'en passer à partir de 8Go (en 2018).

En cas de sauvegarde de l'état de la RAM vers le disque dur d'un portable (fonction suspend to hard disk), la swap doit contenir au moins une fois la grandeur de la mémoire RAM.

1.2 Partition racine /

C'est la seule partition absolument nécessaire, puisqu'elle contient les répertoires nécessaires au système. Elle est d'ailleurs appelée root (racine) et a pour adresse / . En UNIX, les différents périphériques viennent s'accrocher à cette partition (il n'existe pas de «disques» A:, C:, D:...). Sont entre autres rattachés à la racine les répertoires suivants:

Rappel: la partition / doit être reformatée (c'est en tout cas recommandable) en cas de réinstallation de GNU/Linux, entraînant la disparition de tous les répertoires qu'elle contient. Il est donc conseillé de réserver une partition /home séparée de celle du système. Le fichier /etc/fstab contient les informations indiquant au système de l'emplacement des répertoires résidant sur d'autres partitions.

Si le répertoire /home est située sur une partition à part, une installation familiale (comprenant Gnome ou KDE et les petits jeux qui leur sont associés, ainsi que de nombreuses applications comme la suite OpenOffice, les applications FireFox, VLC, Gimp, Rosegarden, Audacity...) tient facilement dans une partition / de 7 à 10Go. Je n'ai jamais dépassé 10Go alors que j'essaie beaucoup de logiciels (mais très peu de jeux, que je désinstalle par après) et que je bricole beaucoup.

La meilleure politique est (en 2020) d'utiliser un disque SSD de 128Go: quelques 4Go pour la partition swap, 15 à 20Go pour le système (prenant en compte le téléchargement de jeux) et le reste de la place disponible (100Go pour les plus courants) pour la partition /home. Pour les photos et musiques d'utilisation moins courantes et les archives, un disque dur mécanique suffit. Pour savoir si le «disque» sda est mécanique ou non:

Dans une console en mode
simple utilisateur
$
cat /sys/block/sda/queue/rotational

La réponse est 1 pour un disque mécanique, 0 pour un «disque» SDD ou une clé USB.

1.3 Partition /boot

Le répertoire /boot contenant les fichiers permettant de lancer le système, il est fréquent de lui consacrer une partition: en cas de corruption du système de fichiers de la partition / , il sera possible, par l'option de boot «safe-mode» d'inspecter cette partition «de l'extérieur».

Son volume dépend du nombre de noyaux que le système utilise. Comptez 50Mo pour un seul noyau (ici, 28Mo pour le système amd64 4.9.0-4 et 9Mo pour le système de boot grub):

-rw-r--r-- 1 root root   186443 déc 23  2017 config-4.9.0-4-amd64
drwxr-xr-x 5 root root     4096 mar 12 22:50 grub
-rw-r--r-- 1 root root 18291800 aoû  9 20:54 initrd.img-4.9.0-4-amd64
-rw-r--r-- 1 root root  3183748 déc 23  2017 System.map-4.9.0-4-amd64
-rw-r--r-- 1 root root  4212512 déc 23  2017 vmlinuz-4.9.0-4-amd64

1.4 Partition /home

Cette partition contenant l'espace des utilisateurs du système, il est chaudement recommandé de lui réserver une partition, qui pourra être conservée lors d'une réinstallation du système. L'espace réservé à cette partition dépend du nombre d'utilisateurs et de leurs besoins. De qualité moyenne, une photo jpg de 2048x1536 ainsi qu'une minute de mp3 pèsent environ 1Mo; c'est 10 fois plus pour un fichier wav.

1.5 Autre partitions

On peut réserver une grosse partition /archives pour des fichiers de consultation peu courante; pour le répertoire /var si la machine est utilisée comme serveur...

2. Monter une partition

2.1 mount

mount sans argument liste toutes les partitions actuellement montées, même celles du système, comme /proc (il s'agit du fichier /etc/mtab légèrement reformaté). Pour se limiter aux disques et clés USB:

Dans une console en mode
simple utilisateur
$
mount | grep /dev/sd

Avec des arguments, monte un périphérique bien identifié à un endroit précis (répertoire) du système de fichiers (-t ext4 n'est normalement pas nécessaire, le système reconnaissant en général le type de système de fichier).

#En mode super-utilisateur: su [Enter] mount -t ext4 /dev/sdc1 /archives

Pour démonter le second disque dur (ou la clé USB) identifié comme sdb et monté en /media/data, saisir une de ces deux commandes:

#En mode super-utilisateur: su [Enter] umount /dev/sdb
#En mode super-utilisateur: su [Enter] umount /media/data

Pour un CD de données (/dev/sr0 pour le premier lecteur) de données (iso9660) dans le répertoire /media/cdrom:

#En mode super-utilisateur: su [Enter] mount -t iso9660 /dev/sr0 /media/cdrom

Pour monter une image CD comme système de fichier visible en /repertoire

#En mode super-utilisateur: su [Enter] mount -o loop -t iso9660 image.iso /repertoire

La prochaine section explique comment simplifier le montage des périphériques.

2.2 /etc/fstab

Le fichier /etc/fstab contient les connexions entre périphériques et leur situation sur l'arborescence des fichiers. Il n'est modifiable que par le super-utilisateur. Avec Debian, il contient quelque chose qui ressemble à ça:

# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump> <pass>
proc            /proc           proc    defaults         0     0
/dev/sda1       none            swap    sw               0     0
/dev/sda2       /               ext4    defaults,errors=remount-ro  0  1
/dev/sda3       /home           ext3    rw,auto          0     0
/dev/sda4       /archives       ext3    rw,user,noauto   0     0
/dev/sr0        /media/cdrom    udf,iso9660 user,noauto  0     0
/dev/sdb1       /media/usbkey   auto    rw,user,noauto   0     0

Attention: une modification de la ligne consacrée à la partition / risque de rendre le système non bootable.

L'interface graphique reconnaît souvent automatiquement le branchement d'un disque USB ou l'insertion d'un CD ou DVD, qu'il monte dans le répertoire /media/... (sur Debian). Cependant, la ligne:

/dev/sdb1 /media/data auto user,noauto  0  0

dans /etc/fstab permet à un simple utilisateur de monter très simplement le périphérique avec mount /dev/sdb1 ou mount /media/data (attention: auto en troisième position indique que le système doit reconnaître lui-même le type du système de fichier de la partition).

2.3 hdparm

#En mode super-utilisateur: su [Enter] hdparm /dev/sda affiche la géométrie (cylindres/têtes/secteurs) du premier disque dur.
#En mode super-utilisateur: su [Enter] hdparm -t /dev/sda affichage la vitesse de lecture du disque (MB/sec)

2.4 df

liste l'utilisation des partitions montées, en kilo-octets.

Sys. de fichiers blocs de 1K  Utilisé Disponible Uti% Monté sur
udev                 1954264        0    1954264   0% /dev
tmpfs                 393104    30676     362428   8% /run
/dev/sda2           14352956  4747056    8857096  35% /
tmpfs                1965504        0    1965504   0% /dev/shm
tmpfs                   5120        4       5116   1% /run/lock
tmpfs                1965504        0    1965504   0% /sys/fs/cgroup
/dev/sda3           95990980 76501432   14606736  84% /home
tmpfs                 393100       48     393052   1% /run/user/1000

df -H permet un affichage plus compact (méga giga et tera-octets)

tmpfs              384M     30M  354M   8% /run
/dev/sda2           14G    4,6G  8,5G  35% /
tmpfs              1,9G       0  1,9G   0% /dev/shm
tmpfs              5,0M    4,0K  5,0M   1% /run/lock
tmpfs              1,9G       0  1,9G   0% /sys/fs/cgroup
/dev/sda3           92G     73G   14G  84% /home
tmpfs              384M     48K  384M   1% /run/user/1000

Il est possible de récupérer de la place avec #En mode super-utilisateur: su [Enter] apt-get clean (pour la partition contenant le système: fichiers téléchargés .deb des paquetages installés) ou en supprimant les fichiers .png du répertoire caché ~/.bkl-thumbnails (Gnome); pour KDE, c'est dans le répertoire caché ~/.kde

2.5 lsblk

liste les périphériques de block même non montée, en indiquant leur taille et leur point de montage éventuel:

$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 298,1G  0 disk
├─sda1   8:1    0   4,7G  0 part [SWAP]
├─sda2   8:2    0    14G  0 part /
├─sda3   8:3    0  93,1G  0 part /home
└─sda4   8:4    0 186,3G  0 part /grenier
sdb      8:16   1   3,8G  0 disk
└─sdb1   8:17   1   3,8G  0 part /media/toto/F009-64A5
sr0     11:0    1  1024M  0 rom

2.6 dd

Un périphérique contient des données mais également l'organisation de ces données sur le support. dd copie la structure et les données de façon linéaire d'un périphérique dans un fichier, ou l'inverse. Cela permet par exemple de fabriquer une clé bootable permettant d'installer un système GNU/Linux. if (input file) est ce qui est lu, of (output file) est ce qui est écrit.

Attention! cette manipulation vers un périphérique efface irrémédiablement sa structure et ses données.

#En mode super-utilisateur: su [Enter] dd if=/dev/sdb1 of=/home/toto/cle-usb.img

... lit et copie l'entièreté de la partition sdb1 (clé USB par exemple) dans le fichier cle-usb.img dans le répertoire personnel de l'utilisateur toto. On appelle ce genre de fichier «image» parce qu'il est une copie octet par octet de la structure et des données de la partition d'origine, ce qui n'est pas le cas d'une copie de plusieurs fichiers d'un répertoire à l'autre.

mount -o loop -t ext4 fichier.img /home/toto/data

... monte un fichier issu de la commande dd (s'il est issu d'un système de fichier ext4; si cela ne fonctionne pas, tentez avec -t auto) dans le répertoire existant /home/toto/data