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.
Pour le chiffrement des disques, voir cette page.
Cette page explique le minimum à connaître sur un système GNU/Linux (ligne de commande, système de fichiers…)
1. Partitions |
2. Montage |
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 :
- /bin commandes de base en mode console (votre bureau permet en général de faire cela en quelques clics) :
- bash un des shells en mode console
- cat, more, less pour visualiser des fichiers de texte
- cd, move, rm, mkdir, rmdir… pour organiser fichiers et répertoires
- chown, chmod pour décider des droits sur les fichiers
- mount, umount pour monter ou démonter des partitions
- Notes : il s'agit maintenant d'un lien vers /usr/bin (depuis Debian 10 Buster)
- /boot images du noyau Linux chargé à l'allumage de la machine, parfois sur partition dédiée, voir section boot.
- /dev descripteurs des périphériques (devices).
- /etc fichiers de configuration et des scripts pour la gestion du système. Personne ne semble savoir d'où vient ce nom de répertoire ; «edited texts config» a été proposé.
- /home comptes et données des utilisateurs : devrait toujours figurer sur une partition à part, pour pouvoir garder vos données en cas de réinstallation du système, voir section home
- /lib bibliothèques (ensemble de fonctions partagées par différentes applications), modules et firmwares…
- /opt certaines applications extérieures à votre distribution (LibreOffice pour Debian 5 «Lenny» et 6 «Squeeze»)
- /proc tous les processus lancés : applications, commandes du système…
- /root répertoire du super-utilisateur (ce dernier est également appelé root).
- /run fichiers temporaires du système
- /sbin commandes plus proches du système (mais le superutilisateur peut les utiliser)
- Notes : il s'agit maintenant d'un lien vers /usr/sbin (depuis Debian 10 Buster)
- /sys ensemble de fichiers concernant le système (périphériques)
- /tmp fichiers temporaires pour logiciels comme Audacity ou logiciels de gravure, documents édités à partir d'un téléchargement… on peut souvent s'en passer en configurant le répertoire de sauvegarde temporaire de ces logiciels. Le contenu de ce répertoire peut saturer la partition / !
- /usr applications installées pour les utilisateurs et leur documentation, souvent le plus important en volume :
- /usr/bin exécutables ou scripts de lancement des applications
- /usr/include fichiers d'entêtes ou de code prêts à être inclus
- /usr/sbin exécutables du système
- /usr/share fichiers (icones…) pour les applications installées
- /usr/share/doc documentation des applications installées
- /usr/share/fonts contient les fontes installées
- /usr/src sources des applications à compiler (les headers du noyaux y sont alors nécessaires)
- /usr/X11R6 système X Window
- /var fichiers-journaux de connexion, impressions… le plus souvent réservés à root.
- /var/log contient les journaux systèmes, dont le fichier dmesg produit lors du boot (visible avec la commande dmesg dans une console).
- /var/cache/apt/archives contient les paquets deb téléchargés lors d'une installation.
#apt clean les supprime.En mode super-utilisateur:#[Enter]En mode super-utilisateur: su - [Enter] - /var/spool contient les fichiers à envoyer à l'imprimante
- /var/www endroit par défaut pointé par http://localhost si le serveur apache est installé sur votre système
- et d'autres répertoires où des médias sont «montés» (clés USB ou CD…) : le système peut utiliser /cdrom, /media, /mnt pour le montage des périphériques. En éditant /etc/fstab, on peut choisir les noms de répertoires (/data, /usbkey, /camera…).
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…
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é).
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).
#mount -t ext4 /dev/sdc1 /archivesEn mode super-utilisateur: su - [Enter]
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 :
#mount -t iso9660 /dev/sr0 /media/cdromEn mode super-utilisateur: su - [Enter]
Pour monter une image CD comme système de fichier visible en /repertoire
#mount -o loop -t iso9660 image.iso /repertoireEn mode super-utilisateur: su - [Enter]
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.
- la première colonne contient le descripteur de périphérique. Les descripteurs de type /dev/sda2 sont souvent remplacés par un identifiant de type UUID=800d0aa1-5f4e-1ad9-c299-3c6875a43010. Pour lister les identifiants UUID des périphériques montés :
#blkid.En mode super-utilisateur: su - [Enter] - la deuxième est le point de montage du périphérique sur l'arborescence du système de fichiers. / représente le système entier; /home contient les partitions des utilisateurs, /archives a été prévu comme partition supplémentaire pour les données
- la troisième indique le type de partition. ext3 et ext4 : système de fichiers linux journalisé; vfat: partition MSDOS/Win95 ; swap : partition d'échange (RAM virtuelle); iso9660: cdrom (ne sert que pour les CDROM de données, et non pour les CD-audio : les lecteurs et graveurs n'utilisent pas ce système ; udf (Universal Disk Format) pour les DVD, BlueRay…
- la quatrième prescrit le mode d'utilisation :
- ro (read-only) ne permet que la lecture du périphérique; rw lit et écrit;
- user : confère les droits à la personne qui ouvre; nouser ne permet le montage qu'à root ou à l'owner
- auto : s'ouvre automatiquement à l'ouverture du système; noauto : nécessite l'ouverture explicite
- defaults signifie rw, suid, exec (permet l'exécution de programmes ou scripts)
- async permet de différer l'écriture réelle des données sur le périphérique (sync est préférable pour les périphériques USB)
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
# 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)
En mode super-utilisateur: su - [Enter]
2.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…
- sur la partition d'un système Debian :
#apt clean efface les fichiers .deb téléchargés pour installation, ensuite inutilesEn mode super-utilisateur: su - [Enter]- snap et flatpack sont des systèmes parallèles qui utilisent très vite quelques Go, à éviter! Si une application n'existe pas sur votre distribution, préférez une AppImage, moins gourmande en utilisation d'espace.
- sur la partition /home (avec un analyseur d'utilisation de disque) :
- certains caches sont encombrés d'icones miniatures et résidus d'applications désinstallées. À effacer avec discernement !
- certains fichiers accumulés pourraient être transférés sur une autre disque.
2.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
2.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.
- if= (input file) est ce qui est lu (fichier ou partition)
- of= (output file) l'endroit (partition ou fichier) où les données sont écrites
Attention ! cette manipulation vers un périphérique efface irrémédiablement sa structure et ses données.
#dd if=/dev/sdb1 of=/home/toto/cle-usb.img bs=1M status=progressEn mode super-utilisateur: su - [Enter]
… 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.
- bs=1M permet d'utiliser de gros blocs (la vitesse de transfert par défaut bs=512 décroît très fort avec le nombre de blocs à transférer)
- status=progress affiche le pourcentage d'octets transférés
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 !) :
#dd if=/home/toto/debian-13.img of=/dev/sdc bs=1M status=progress # syncEn mode super-utilisateur: su - [Enter]
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