Blog ENI : Toute la veille numérique !
-25€ dès 75€ sur les livres en ligne, vidéos... avec le code FUSEE25. J'en profite !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici

Les disques et le système de fichiers

Représentation des disques

Chaque disque connu du système est associé à un fichier spécial en mode bloc. Il en est de même pour les partitions.

1. Nomenclature

Suivant le type de contrôleur et d’interface sur lesquels les disques sont connectés, Linux leur associe des fichiers spéciaux différents. Le nom de ces fichiers spéciaux dépend du type du contrôleur disque.

a. Disques IDE

Ce type de disque est devenu rare, la norme SATA ayant remplacé la norme IDE depuis de nombreuses années. Les disques reliés à des contrôleurs IDE (appelés aussi PATA (Parallel ATA) ou ATAPI) sont associés à des fichiers spéciaux dont le nom est hdx, x étant une lettre minuscule, dépendant du contrôleur et de la position du disque par rapport à son contrôleur :

  • hda : IDE0, Principal

  • hdb : IDE0, Secondaire

  • hdc : IDE1, Principal

  • hdd : IDE1, Secondaire

  • etc.

Il n’y a pas de limites au nombre de contrôleurs IDE, hormis le nombre de ports d’extension de la machine (slots PCI). De nombreuses cartes additionnelles et convertisseurs existent permettant de lire d’anciens disques IDE.

Les lecteurs de CD-Rom, DVD et graveurs de type IDE/ATAPI sont vus comme des disques IDE et respectent cette nomenclature.

Le noyau Linux utilise par défaut une API appelée libata...

Opérations de bas niveau

Différentes commandes Linux permettent de gérer les périphériques disques au niveau matériel, via leur contrôleur.

Certaines de ces commandes ou de leurs options permettent de modifier la configuration d’un disque, elles doivent être utilisées avec prudence.

Informations sur les disques

La commande hdparm permet d’effectuer un grand nombre de manipulations directement sur les périphériques disques gérés par la bibliothèque libata, c’est-à-dire les disques de type SATA, ATA (IDE) et SAS.

La commande sdparm permet le même type d’opérations pour les disques SCSI.

Les options -i ou -I fournissent des informations sur les caractéristiques d’un disque. La première fournit les informations depuis le noyau, obtenues au moment du boot, la seconde interroge directement le contrôleur du disque et fournit des informations plus détaillées.

Exemple

# hdparm -I /dev/sda 
 
/dev/sda: 
/dev/sda: 
 
ATA device, with non-removable media 
        Model Number:       ST9160821AS 
        Serial Number:      5MA3G4KT 
        Firmware Revision:  3.BHD ...

Choisir un système de fichiers

L’arborescence globale du système de fichiers Linux est constituée d’un ou plusieurs systèmes de fichiers autonomes.

Un système de fichiers permet de structurer un espace de stockage, sous forme de fichiers et de répertoires. Cette organisation interne à l’espace de stockage est rendue accessible aux applications, sous forme de répertoires et de fichiers, par l’opération de montage sur un répertoire de l’arborescence globale.

Un système de fichiers non monté est vu comme un ensemble d’octets non structuré, accessible comme un tout, sans qu’il soit possible d’utiliser son organisation en répertoires et fichiers.

Il existe différents types de systèmes de fichiers, qui peuvent être combinés entre eux au sein de l’arborescence globale du système de fichiers Linux.

1. Principe

Si les principes de base sont souvent les mêmes entre les divers types de systèmes de fichiers Linux, les implémentations et l’organisation logique des données dans les espaces de stockage varient fortement.

Les systèmes de fichiers Linux sont conformes aux normes POSIX, mais peuvent proposer des extensions (ACL, selinux, etc.).

Un système de fichiers associe un ou plusieurs noms à un ensemble de données et gère l’accès à son contenu : création, modification, suppression, déplacement, ouverture, lecture, écriture, fermeture. Chaque type de système de fichiers est pris en charge par un pilote spécifique, qui communique avec le noyau pour permettre aux applications d’accéder aux éléments contenus dans l’espace de stockage. Le pilote et le noyau assurent les opérations nécessaires : mécanismes de protection des accès (les permissions, les propriétaires), les accès concurrents, etc.

a. Représentation

Outre l’organisation et le stockage des informations, le système de fichiers doit fournir à l’utilisateur une vision structurée des données, permettant de les distinguer, de les retrouver, de les traiter et de les manipuler sous forme de fichiers au sein d’une arborescence de répertoires avec...

Partitionnement

Le partitionnement consiste en un découpage logique du disque. Le disque physique, réel, est fractionné en plusieurs disques virtuels, les partitions. Chaque partition est vue comme un disque indépendant et contient son propre système de fichiers.

1. Les méthodes de partionnement

Il existe deux méthodes de partitionnement : MBR, prévu pour les machines à base de BIOS, et GPT, pour les machines à base de UEFI. Ces dernières sont aussi compatibles avec le partitionnement BIOS, la réciproque n’étant pas vraie.

2. Partitionnement MBR (Master Boot Record)

La méthode de partitionnement MBR (Master Boot Record) s’appelle ainsi car la table de partition principale est située dans ce secteur particulier du disque.

a. MBR et BIOS

Le partitionnement MBR date du début des années 1980, à l’époque où les PC fonctionnaient en mode 16 bits, et a subi des modifications pour gérer le 32 bits. La position d’un bloc est codée sur 32 bits, et la taille d’un bloc est de 512 octets. La taille maximale d’un disque est donc de 2 To (2 puissance 32 x 512 octets).

Si vous achetez un disque dur de plus de 2 To, vous devez disposer d’une machine compatible et utiliser le mode de partitionnement GPT.

Cette méthode de partitionnement est encore très utilisée, mais la disponibilité des machines basées sur UEFI et disposant de disques d’une capacité supérieure à 2 To la rende de moins en moins courante.

Même si les supports physiques sont limités à 2 To, il est possible d’étendre un système de fichiers sur plusieurs disques et donc lui permettre de dépasser cette limite.

b. MBR

Le premier secteur d’un disque est le MBR, Master Boot Record, ou zone d’amorce. D’une taille de 512 octets il contient dans ses 446 premiers octets un programme d’amorçage destiné soit à démarrer le système d’exploitation sur la partition active, soit à lancer un chargeur de démarrage (bootloader). Les 6 derniers octets de ce bloc peuvent contenir une signature optionnelle sur 4 octets et 2 octets nuls. Les 64 octets suivants contiennent la table des quatre partitions primaires. Les deux derniers...

Manipuler les systèmes de fichiers

L’arborescence globale des répertoires et fichiers d’un système Linux est constituée d’un ou plusieurs systèmes de fichiers, stockés sur un ou plusieurs espaces de stockage (disques, partitions, volumes logiques LVM). Différentes commandes permettent de gérer ces systèmes de fichiers (création, modification, suppression) qui peuvent être de types différents.

1. Définitions de base

Un système de fichiers gère des blocs de données dans un espace de stockage. Il organise les données dans des fichiers, stockés dans une arborescence structurée par des répertoires. Des structures permettent de gérer les attributs généraux de l’espace de stockage du système de fichiers.

L’espace de stockage peut être physique (disque, partition) ou logique (volume logique LVM). Il existe également des systèmes de fichiers virtuels, gérés en mémoire vive.

a. Bloc

Le bloc est l’unité de base, atomique, de stockage du système de fichiers. Un fichier occupe toujours un nombre entier de blocs. Ainsi, si un fichier ne contient qu’un seul octet et qu’un bloc possède une taille de 4096 octets, 4095 octets sont inutilisés.

Certaines commandes affichent la taille des fichiers en blocs, comme du, df ou find. La taille d’un bloc est de 512 octets pour certaines commandes, 1024 pour d’autres.

b. Superbloc

Chaque système de fichiers Linux dispose d’au moins un superbloc (superblock). Un superbloc est une zone de métadonnées qui contient des informations sur le système de fichiers et son état :

  • Type de système de fichiers

  • Taille

  • État

  • Position d’autres zones de métadonnées (autres superblocs, table d’inodes, etc.)

Linux tente en premier lieu de lire le superbloc primaire, le premier du système de fichiers. Il peut arriver que celui-ci soit corrompu. Dans ce cas les données du disque ne sont plus accessibles. Un système de fichiers Linux dispose de copies (backups) du superbloc à plusieurs endroits du disque. Les écritures sur ces divers superblocs étant synchrones, ils sont tous identiques et peuvent permettre d’accéder...

Accéder aux systèmes de fichiers

Les applications ne peuvent accéder aux répertoires et fichiers d’un système de fichiers que si ce dernier est « monté » dans l’arborescence globale du système Linux. L’opération de montage peut être manuelle ou automatique.

1. La commande mount

La commande mount permet d’accéder à l’arborescence de répertoires et de fichiers d’un système de fichiers, en l’accrochant à un répertoire existant dans l’arborescence globale.

Syntaxe

mount [-t typefs|-a] [-o options] [FicSpecial|-L label|-U UUID] 
[point_de_montage] 

Sans option ni argument, la commande affiche les informations sur les systèmes de fichiers montés.

Avec les arguments désignant le système de fichiers et le point de montage, elle attache le répertoire racine du système de fichiers spécifié au répertoire point de montage (mountpoint) de l’arborescence globale. Si l’un des deux arguments est absent, la commande lit le fichier /etc/fstab et cherche une ligne contenant l’argument fourni, pour effectuer le montage avec les informations fournies.

Le système de fichiers à monter peut être spécifié par le fichier spécial associé, par son label (option -L) ou par son UUID (option -U).

Si le type de système de fichiers n’est pas indiqué par l’option -t, la commande le détermine à partir des attributs du système de fichiers.

S’il y avait des éléments auparavant dans le point de montage, ils sont masqués par le montage et donc inaccessibles. Ils redeviendront accessibles si le système de fichiers est démonté.

L’option -a permet de monter l’ensemble des systèmes de fichiers déclarés dans le fichier /etc/fstab en montage automatique.

Exemple

Un système de fichiers de type ext4 a été créé sur la partition 1 du deuxième disque, on le monte sur le répertoire existant /mnt/DATA :

# mount -t ext4 /dev/sdb1 /mnt/DATA 

Liste des systèmes de fichiers montés, pour les disques sd* :

# mount | grep '/dev/sd[a-z]' 
/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64, ...

Contrôler le système de fichiers

Il est important de surveiller l’utilisation des systèmes de fichiers. Comme leur taille est fixe, ils peuvent arriver à saturation et empêcher les applications ou le système lui-même de fonctionner correctement.

Les types de systèmes de fichiers récents peuvent généralement être agrandis, en particulier s’ils utilisent des volumes logiques LVM.

Un système de fichiers peut être corrompu, il est donc nécessaire de le contrôler et éventuellement de le réparer.

1. Suivi de l’espace disque par système de fichiers

La commande df (disk filesystem) permet d’obtenir des informations d’occupation de chaque système de fichiers monté. Sans argument, elle fournit des informations sur tous les systèmes de fichiers. Avec en argument un identifiant de système de fichiers monté, un point de montage ou un répertoire, elle donne des informations sur le système de fichiers correspondant.

Exemple

# df 
Sys. de fichiers        blocs de 1K Utilisé Disponible Uti% Monté sur 
/dev/mapper/fedora-root    15718400 6504544    9213856  42% /
/dev/sda1                   1038336  229732     808604  23% /boot 
/dev/sdb1                  10051792   36888    9484576   1% /mnt/DATA 

L’unité par défaut est le kilo-octet (option par défaut -k). L’option -m affiche les résultats en Mo.

Exemple

# df -m /mnt/DATA/ 
Sys. de fichiers blocs de 1M Utilisé Disponible Uti% Monté sur 
/dev/sdb1               9817      37       9263   1% /mnt/DATA 

L’option -i permet d’obtenir des informations sur l’utilisation des inodes.

Exemple

# df -i /mnt/DATA/ 
Sys. de fichiers Inœuds IUtil. ILibre IUti% Monté sur 
/dev/sdb1          629K     11   629K    1%...

Le swap

Si le système d’exploitation ne dispose plus de suffisamment de mémoire vive, il peut décharger temporairement des pages de la mémoire physique vers une ou plusieurs zones d’échange sur disque, constituant l’espace de swap. Ce mécanisme permet d’utiliser plus de mémoire que l’ordinateur n’en dispose réellement, au prix d’une altération des performances. Si un processus a besoin de pages mémoire stockées dans la zone de swap, le système les recharge automatiquement dans la mémoire vive pour les rendre accessibles à nouveau.

1. Taille optimale de l’espace de swap

Il n’y a pas de règles strictes sur la taille du swap. Cependant les quelques règles courantes suivantes sont valables dans la plupart des cas :

  • Moins de 1 Go de RAM : deux fois la taille de la RAM.

  • 1 Go à 4 Go : la taille de la RAM.

  • Plus de 4 Go : 4 Go, plus ou moins, selon l’utilisation des processus.

Si le système "swappe" fréquemment et que tous les indicateurs montrent que l’espace mémoire disponible est faible, il faut ajouter de la mémoire physique.

Certains administrateurs système font le choix de limiter l’espace de swap, voire de le désactiver. De même, certains éditeurs de logiciels déconseillent la mise en œuvre de swap dans le cadre de l’utilisation de leurs produits (openshift, kubernetes, gestion de conteneurs).

2. Créer une partition de swap

Le plus souvent, l’espace de swap est constitué par une partition (ou un volume logique LVM).

La partition devrait être créée avec le type 0x82 (ou 0x8200 pour GPT).

La commande mkswap crée un système de fichiers de type swap sur le volume ciblé.

Exemple

# mkswap /dev/sdb3 
Configure l'espace d'échange (swap) en version 1, taille = 1 GiB 
(1089466368 octets) 
pas d'étiquette, UUID=5feef437-1f93-4eba-a6ee-7e03b7efda71 

L’option -L de la commande permet d’attribuer...

Les droits d’accès

L’un des rôles du système d’exploitation est de contrôler l’accès aux données. Linux met en place un mécanisme de gestion des droits d’accès sur les fichiers et les répertoires, en fonction des comptes utilisateurs et des groupes d’utilisateurs.

1. Les droits de base

Les droits d’accès d’un fichier ou d’un répertoire sont spécifiés pour trois types d’accès : lecture, écriture et exécution/accès, accordés ou non à trois catégories d’utilisateurs : le propriétaire, le groupe propriétaire et les autres.

Quand un processus demande à utiliser un fichier ou un répertoire, le noyau détermine à quelle catégorie il appartient par rapport à la ressource, et contrôle si le type d’accès demandé est autorisé pour cette catégorie.

Une exception à ce mécanisme est le compte administrateur (root, UID 0), qui a accès complet à tous les fichiers et les répertoires.

a. Droits et compte utilisateur

À sa création par l’administrateur, un compte utilisateur se voit affecter un UID (User Identifier) unique. Les comptes utilisateurs sont définis dans le fichier /etc/passwd. De même chaque utilisateur est rattaché à au moins un groupe (son groupe principal), chaque groupe possédant un identifiant unique, le GID (Group Identifier). Les groupes sont définis dans /etc/group.

Le nom du compte utilisateur ne sert qu’à obtenir ses attributs dans le fichier /etc/passwd, le système utilise uniquement les UID et GID pour gérer le contrôle d’accès.

La commande id permet d’obtenir les informations du compte utilisateur courant.

Exemple

$ id 
uid=1000(pba) gid=100(users) groupes=7(lp),16(dialout),33(video), 
100(users) 

Propriétaire et groupe d’un fichier

Chaque fichier physique est associé à un UID et un GID définissant son propriétaire et son groupe propriétaire. Ces attributs sont définis dans l’inode et s’appliquent donc à tous les liens physiques qui pointent vers lui.

Le contrôle des droits d’accès pour les liens...