Disques et systèmes de fichiers
Introduction
Note préalable : les unités de mesure de stockage utilisées dans ce chapitre et dans l’ensemble de ce livre utilisent la représentation de l’usage traditionnel en kilo-octets, selon la règle 1 Ko = 1024 octets, sauf indication contraire.
1. Nomenclature
Suivant le type de contrôleurs et d’interface sur lesquels les disques sont connectés, Linux donne des noms différents aux fichiers spéciaux des périphériques disques. Chaque disque est représenté par un fichier spécial de type bloc. Il en est de même pour chaque partition.
a. IDE
Les disques reliés à des contrôleurs IDE se nomment hd<x> :
-
hda : IDE0, Master
-
hdb : IDE0, Slave
-
hdc : IDE1, Master
-
hdd : IDE1, Slave
Linux utilise une API appelée libata pour accéder à l’ensemble des disques IDE, SCSI, USB, FireWire, etc. Dans ce cas, la nomenclature reprend celle des disques SCSI, abordée au point suivant. De ce fait, la représentation des disques en nomenclature hdx est devenue rare.
b. SCSI, SATA, USB, FireWire, etc.
Les disques reliés à ces types de contrôleurs se nomment sd<x>. L’énumération des disques reprend l’ordre de détection des cartes et adaptateurs SCSI :
-
sda : premier disque SCSI.
-
sdb : deuxième disque SCSI.
-
sdc : troisième disque SCSI.
c. PCIe et NVMe
Depuis quelques années maintenant, les disques SSD utilisent l’interface PCIe pour être connectés à la machine. Ils sont plus rapides que les disques SSD branchés en Sata. Ils utilisent généralement le protocole de communication NVMe. Les disques utilisant ce type de communication se nomment nvme<x>n1. L’énumération des disques reprend l’ordre de détection...
Partitionnement
1. Découpage logique
Un disque peut être représenté par une longue bande d’espace de stockage découpée en cases pouvant contenir une quantité donnée d’informations. Le partitionnement consiste en un découpage logique du disque. Le disque physique, réel, est fractionné en plusieurs disques virtuels, logiques, les partitions. Chaque partition est vue comme un disque indépendant et contient son propre système de fichiers.
2. Organisation d’un disque
a. Le MBR
Le premier secteur est le MBR (Master Boot Record), ou zone d’amorce. D’une taille de 512 octets, il contient dans ses 446 premiers octets une routine d’amorçage destiné à démarrer le chargeur de démarrage (GRUB). Les 64 octets suivants contiennent la table des quatre partitions primaires.
Le MBR est limité à quatre partitions d’une taille de 2,2 To maximum chacune. Il est seulement compatible avec les machines de type BIOS (Basic Input Output System).
Un disque MBR est identifié comme msdos avec la commande parted -l (utilisateur root).
b. Le GPT
GPT (GUID Partition Table) est un nouveau format de table de partitions qui a remplacé le vieillissant MBR. Le format GPT fait partie du nouveau type de microprogramme UEFI (Unified Extensible Firmware Interface) qui remplace le BIOS, mais peut néanmoins être utilisé sur les plateformes BIOS.
GPT permet de gérer jusqu’à 128 partitions de 256 To chacune. L’UEFI n’étant compatible qu’avec des systèmes d’exploitation 64 bits, le couple UEFI/GPT ne fonctionnera qu’avec ce type de système.
Dans le cadre d’un système BIOS/GPT, le lanceur Grub va s’installer dans une partition dédiée appelée Bios Boot Partition (d’une...
Manipulation des systèmes de fichiers
1. Créer un système de fichiers
Une fois les partitions créées, il faut leur donner un format. Pour cela, vous utiliserez la commande mkfs (make filessystem) pour créer un système de fichiers sur un support de stockage (disque, partition, clé USB, etc.). Elle appelle d’autres programmes en fonction du type de système de fichiers sélectionné.
# mkfs -t typefs options périphérique
C’est typefs qui détermine le type de système de fichiers et donc le programme appelé. Il existe un programme par type de système de fichiers :
-
btrfs : mkfs.btrfs
-
ext2 : mkfs.ext2
-
ext3 : mkfs.ext3
-
ext4 : mkfs.ext4
-
ntfs : mkfs.ntfs
-
reiserfs : mkfs.reiserfs
-
vfat : mkfs.vfat (pour tous les formats FAT)
Les options de chaque système de fichiers sont indiquées APRÈS avoir précisé le système de fichiers. Si vous les précisez avant, ce sont les options de mkfs.
Vous pouvez utiliser directement les programmes correspondant au type de système de fichiers à écrire.
Les systèmes de fichiers ext2, ext3 et ext4 acceptent un jeu de paramètres communs :
Paramètre |
Signification |
-b |
Taille des blocs en octets, multiple de 512. Si la taille n’est pas précisée, elle sera déterminée par la taille de la partition. Tout fichier créé sur le disque occupe au moins un bloc et donc, si on manipule un grand nombre de petits fichiers, il faut mettre une valeur basse (ex : 1024). |
-c |
Vérification des mauvais blocs avant de créer le système de fichiers. On peut aussi utiliser la commande badblocks. |
-i |
Ratio octets/inode. La taille de la table des inodes est calculée en fonction de la taille totale du système de fichiers.... |
Quotas disques
1. Définitions
Les quotas permettent de poser des limites à l’utilisation de systèmes de fichiers. Ces limites sont de deux types :
-
inodes : limite le nombre de fichiers.
-
blocs : limite la taille disque.
Les quotas sont implémentés par système de fichiers individuels et pas pour l’ensemble des systèmes de fichiers. Chaque utilisateur peut être géré de manière totalement indépendante. Il en est de même pour les groupes. Pour chaque utilisation (inode ou bloc), vous pouvez mettre en place trois limites dans le temps :
-
Limite dure (hard) : quantité maximale d’inodes ou de blocs utilisés que l’utilisateur ou le groupe ne peuvent absolument pas dépasser. Dans ce cas, plus rien ne sera possible (création de fichier ou fichier dont la taille dépasse la limite).
-
Limite douce (soft) : quantité maximale d’inodes ou de blocs utilisés que l’utilisateur ou le groupe peuvent temporairement dépasser. Dans ce cas, les créations et modifications seront possibles jusqu’à un certain point : on ne peut pas dépasser la limite dure et le délai de grâce.
-
Un délai de grâce : durant ce temps, l’utilisateur peut continuer à travailler sur le système de fichiers. Le but est qu’il revienne à terme sous la limite douce. Le délai dépassé, la limite douce devient la limite dure. Quoi qu’il arrive, l’utilisateur ne pourra jamais dépasser la limite dure.
2. Mise en place
Vous allez mettre en place les quotas sur la partition /home en respectant les étapes suivantes :
Modifiez les options de partition dans /etc/fstab. On rajoute dans les options usrquota (utilisateur) ou grpquota (groupe), ou les deux.
LABEL=/home...
RAID
Le principe du RAID a été abordé au chapitre Installation lors des installations particulières. Une fois le système installé, voici comment gérer ses volumes RAID logiciel et pallier toute défaillance.
Presque toutes les opérations utilisent la commande mdadm. Elle s’installe via apt ou la Logithèque Ubuntu. Les volumes RAID sont nommés md0, md1... (Multiple Devices).
Vous devriez disposer de disques de même capacité.
1. Création d’un RAID
Les volumes RAID ont déjà été créés lors de l’installation de la version serveur. Mais vous pouvez décider d’ajouter deux disques supplémentaires pour créer un RAID0 ou un RAID1 pour vos répertoires personnels. Pour cette présentation rapide, partons sur le postulat suivant : vous avez deux disques /dev/sdc et /dev/sdd à mettre en RAID.
Vous pouvez utiliser les disques entiers ou y créer des partitions de type fd. Vous obtenez deux partitions /dev/sdc1 et /dev/sdd1.
La commande RAID est formée de la façon suivante :
mdadm [mode] périphérique_raid [options] périphériques
a. RAID0
La création d’un RAID se fait avec l’argument --create ou -C :
# mdadm --create /dev/md0 --level=raid0 --raid-devices=2 /dev/sdc1
/dev/sdd1
La syntaxe parle d’elle-même et les paramètres seront aussi utilisés pour les autres types de RAID. Vous pouvez également respectivement utiliser les arguments -l et -n à la place de --level et --raid-devices. Rappelez-vous que ce niveau de RAID n’a pas de redondance : vos données sont perdues en cas de crash car leurs morceaux sont éparpillés sur les deux disques.
b. RAID1
La création d’un RAID1 ne présente aucune difficulté....
LVM
Tout comme pour le RAID, LVM a été présenté lors des installations particulières du chapitre Installation. Voici comment manipuler vos volumes après l’installation, via l’utilisation d’un nouveau volume physique /dev/sdc1 qu’on va ajouter ou supprimer d’un groupe vg01 et d’un volume logique data01. Une liste complète des commandes LVM est disponible avec man lvm.
1. Volumes physiques (PV)
a. Créer un volume physique
Un volume physique peut être un disque complet ou une partition classique au sein d’un disque. Dans ce cas, la partition doit être de type 0x8e. Utilisez la commande pvcreate pour créer un ou plusieurs volumes physiques :
# pvcreate /dev/sdc1
Physical volume "/dev/sdc1" successfully created
b. Détails d’un volume physique
La commande pvdisplay permet de visualiser l’ensemble des volumes physiques accessibles sur votre système. Elle peut prendre aussi un nom de volume spécifique.
# pvdisplay /dev/sdc1
"/dev/sdc1" is a new physical volume of "10,00 GB"
--- NEW Physical volume ---
PV Name /dev/sdc1
VG Name
PV Size 10,00 GB
Allocatable NO
PE Size (KByte) 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID KWfJuL-wBmv-ecD1-u1Wt-Ba3d-KK2b-iryDra
PE signifie Physical Extend, extension physique. Dans chaque VG (Volume Group), et donc PV, le constituant...
Cas particulier de ZFS
1. Présentation de ZFS
Vous l’avez sans aucun doute remarqué lors de l’installation de votre distribution Ubuntu Desktop, il est possible de formater le disque en ZFS (expérimental). ZFS (Zettabyte File System) est une combinaison d’un système de fichiers, d’un gestionnaire de volumes logiques (comme LVM) et d’un RAID (0, 1, 5 et 6). Il permet la compression à la volée, offre des capacités de stockage élevées (16 exaoctets, soit 16 milliards de milliards d’octets ou 16 milliards de Go !), possède un mécanisme d’autoréparation et crée des clichés instantanés (snapshots) de votre système ! De quoi rendre ce système de fichiers particulièrement intéressant…
Malheureusement, ZFS n’est pas intégré au kernel de Linux pour des raisons de licence. De plus, il est gourmand en ressources et ne sera pas forcément utile pour toutes les configurations. Il restera sans doute réservé au monde des serveurs de stockage.
Néanmoins, il est possible de formater son système Ubuntu Desktop avec ce système de fichiers dès l’installation, depuis la version 19.10, et ainsi de tester ZFS. Il est également possible d’installer les paquets permettant de gérer ZFS ultérieurement (zfs-dkms zfsutils-linux)
Le lien avec grub est actuellement assuré par le service zsys.
2. Création de pools
ZFS utilise des pools, des ensembles de disques ou de parties de disques, comme espace de stockage non dédié dans lequel il viendra allouer des volumes en mode bloc (comme des partitions).
La liste des pools est visible avec :
# zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT ...
Mise en pratique
Étude de cas
Questions
1/ En vous référant à la copie d’écran ci-dessus, de combien de disques physiques dispose cette machine ?
2/ Combien comptez-vous de partitions pour chaque disque ?
3/ Le LVM est-il utilisé sur ces disques ?
4/ Grâce à quelle commande pourriez-vous connaître la destination de /dev/sda2 et /dev/sda5 ?
5/ Grâces à quelle commandes pourriez-vous obtenir des informations sur les volumes sous LVM ?
Réponses
1/ La machine dispose de trois disques : sda, sdb et sdc.
2/ Trois partitions sur sda, une sur sdb et aucune sur sdc.
3/ Il est impossible de le déterminer à l’aide de ces commandes seules.
4/ fdisk -l /dev/sda affichera les informations de partitionnement de ce disque :
En l’occurrence, /dev/sda1 est la partition système amorçable montée sur /, /dev/sda2 est une partition étendue qui contient /dev/sda5, la partition d’échange du système (swap).
5/ Les commandes pvdisplay, vgdisplay et lvdisplay permettront de lister respectivement les volumes physiques, les groupes de volumes et les volumes logiques.
Ci-dessous, le résultat de la commande lvdisplay.
Questions
1/ Quelle commande utiliser pour étendre de 2 Go la taille du volume logique ci-dessus ?
2/ Quel a été l’impact de cette extension sur le système de fichiers correspondant ?
3/ Comment ajouter 2 Go au système de fichiers ?
Réponses
1/ La commande lvextend va permettre cette extension avec comme paramètre 512 LE de 4 Mo, soit 2 Go :
2/ Aucun impact car le système de fichiers n’a pas été redimensionné. Le résultat de la commande df -k ci-dessous montre en effet une taille...