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

3. Montage

3.1 mount
3.2 fstab
3.3 hdparm
3.4 df
3.5 lsblk
3.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 très recommandé) 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 la partition 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 10 à 15Go, voire 20Go. Certains jeux de simulation prennent énormément de place, de l'ordre du Go.

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 :

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…

3. Monter une partition

3.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é).

mount

Pour se limiter aux disques et clés USB on ajoute un filtre avec | grep /dev/sd :

mount | grep /dev/sd

findmnt affiche les partitions de façon un peu plus ordonnée.

Avec des arguments, mount 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

sync demande de clôturer au plus vite les transferts en cours, ce qui ne se fait pas nécessairement en temps réel, même si c'est généralement le cas. Réapparition de l'invite lorsque c'est fini.

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, qui s'occupera du sync :

umount /dev/sdb
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.

3.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).

3.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)

3.4 df

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

Sys. de fichiers blocs de 1K   Utilisé Disponible Uti% Monté sur
/dev/sda2           23854928  18619724    3998112  83% /
/dev/sda3          191197068 166592324   14822728  92% /home
/dev/sda4          267241224 195653056   57943368  78% /data

df -h (human readable) permet un affichage en puissance de 1024 : en Mio, Gio, Tio)

Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
/dev/sda2           23G     18G  3,9G  83% /
/dev/sda3          183G    159G   15G  92% /home
/dev/sda4          255G    187G   56G  78% /data

df -H permet un affichage en puissance de 1000 : en Mo, Go, To)

Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
/dev/sda2           25G     20G  4,1G  83% /
/dev/sda3          196G    171G   16G  92% /home
/dev/sda4          274G    201G   60G  78% /data

Pour récupérer de la place…

3.5 lsblk

liste les périphériques de blocs 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

3.6 dd

Un périphérique contient des données mais également l'organisation de ces données sur le support. dd copie les données d'un périphérique dans un fichier, de façon brute, dans l'ordre des octets rencontrés sur le périphérique, ou l'inverse. Cela permet par exemple de fabriquer une clé bootable permettant d'installer un système GNU/Linux.

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 bs=1M status=progress

… 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.

Pour faire une clé bootable à partir d'un fichier *.img d'installation (mais vérifiez bien que la clé USB dont les données sont sacrifiées est bien sdc !) :

#En mode super-utilisateur: su - [Enter] dd if=/home/toto/debian-13.img of=/dev/sdc bs=1M status=progress
# sync

sync permet de s'assurer que toutes les données sont réellement transférées.

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