01 - Systèmes de fichiers

Introduction

En Linux il n’existe qu’une seule racine : /.

Les autres systèmes de fichiers ne seront pas des racines comme dans Windows.

Tous les périphériques matériels, incluant les disques, se retrouvent dans le répertoire /dev.

Les disques seront présents sous forme de fichier de type bloc.

Il n’est pas possible de les utiliser directement, il faudra:

  • Créer une ou plusieurs partitions

  • Formater la partition (création d’un système de fichiers)

  • Monter la partition (lui donner un chemin d’accès)

Ajout de disques

Lorsque vous ajoutez un disque dans une machine Linux (disque réel ou virtuel), un nouvel objet apparait dans le répertoire /dev.

Il sera nommé sd[x] pour les disques SCSI ou hd[x] pour les disques IDE.

La 3eme lettre sera assignée dans l’ordre. Si “a” est pris alors ce sera “b”, si “b” est pris ce sera “c”.

Attention: un disque ne possède pas de numéro à la fin.

Pour voir tous vos disques, vous pouvez utiliser:

$ ls /dev/sd*
$ ls /dev/hd*
$ ls /dev/nvme*

Avec VMWare, la règle d’assignation des noms de disques dans les VMs est la suivante:

  • Un disque sera nommé sd[a-z] si le pilote utilisé est SCSI.

  • Un disque sera nommé hd[a-z] si le pilote utilisé est IDE.

Les partitions sont ensuite numérotées pour chaque disque:

  • sda1, sda2,…

  • hda1, hda2,…

  • nvme0n1p1, nvme0n1p2,…

Création de partitions

Après l’ajout de disques, ils doivent être partitionnés.

La commande fdisk permet de manipuler et afficher les partitions.

fdisk -l permet d’afficher toutes les partitions de tous les disques présents.

$ fdisk -l

Disque /dev/sda : 64.4 Go, 64424509440 octets, 125829120 secteurs
Unités = secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x00011277

Périphérique Amorçage  Début         Fin      Blocs    Id. Système
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200   125829119    61864960   8e  Linux LVM

Disque /dev/mapper/centos-root : 41.1 Go, 41120956416 octets, 80314368 secteurs
Unités = secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets


Disque /dev/mapper/centos-swap : 2147 Mo, 2147483648 octets, 4194304 secteurs
Unités = secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets


Disque /dev/mapper/centos-home : 20.1 Go, 20073938944 octets, 39206912 secteurs
Unités = secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets

On voit les tailles (en blocs), le type, s’il s’agit de la partition d’amorçage.

Il est possible de créer un maximum de 4 partitions principales sur un disque ou alors une partition principale, une partition étendue dans laquelle on peut créer autant de partitions que l’on souhaite.

La création de partition se fait grâce à fdisk.

Pour créer des partitions, on utilise le disque, pas les partitions (jamais de numéro à la fin):

$ fdisk /dev/sdb

ou

$ fdisk /dev/nvme0n2

Ensuite plusieurs options sont disponibles mais la création standard se fait avec les commandes suivantes:

  • n Nouvelle partition

  • p Partition principale

  • Entrée Accepter le numéro de partition par défaut (s’il y en a un sinon le spécifier)

  • Entrée Numéro du bloc de départ (peut être accepté ou spécifier)

  • Entrée Numéro du bloc de fin(peut être accepté ou spécifier)

  • w Sauvegarder et quitter (avant ça aucune modification n’a eu lieu)

Une fois les partitions créées, elles apparaissent dans /dev.

Les partitions de /dev/sda seront donc:

  • /dev/sda1

  • /dev/sda2

ou

  • /dev/nvme0n2p1

  • /dev/nvme0n2p2

C’est sur ces partitions que nous pourrons travailler: création de systèmes de fichiers et montage.

Création du système de fichiers

Une fois les partitions créées, elles ne sont toujours pas utilisables car il n’y a pas système de fichier dessus.

Il faudra en créer un grâce à la commande mkfs.

Chaque partition du disque peut avoir un système de fichier différent: FAT, FAT32, EXT2, EXT3, EXT4, BTRFS, XFS… (Linux ne gère pas NTFS).

Deux façons existent de créer un système de fichier:

$ mkfs -t ext4 /dev/sdb1
$ mkfs.ext4 /dev/sdb1

ou

$ mkfs -t ext4 /dev/nvme0n2p1
$ mkfs.ext4 /dev/nvme0n2p1

Les deux commandes sont équivalentes.

Maintenant les partitions sont utilisables, il ne reste qu’à leur donner un chemin d’accès pour pouvoir y accéder.

Montage des systèmes de fichiers

Maintenant que nous avons des partitions utilisables, il faut pouvoir y accéder.

Il faut les placer quelque part, leur donner un chemin d’accès.

Pour ceci nous allons les placer dans un répertoire vide (n’importe où dans l’arborescence).

Si le répertoire n’est pas vide, les données disparaitront jusqu’à ce que vous démontiez le système de fichiers.

Chaque partition doit avoir son propre chemin d’accès.

Vous ne pouvez pas placer plusieurs partitions dans le même répertoire.

Une fois la partition montée dans le répertoire, tout ce que vous écrirez dans le répertoire sera placé dans la partition.

Deux méthodes existent pour monter un système de fichier:

  • Une méthode manuelle mais non persistante (au prochain redémarrage la partition ne sera plus montée).

  • Une méthode automatique et permanente.

La méthode manuelle

$ mount [partition] [chemin]
$ mount /dev/sdb1 /root/data

ou

$ mount /dev/nvme0n2p1 /root/data

Pour valider l’opération:

$ df -h

Maintenant, lorsque vous accédez au répertoire dans lequel est montée la partition, vous écrirez dans la nouvelle partition.

Dans notre exemple, il suffira d’écrire dans le répertoire: /root/data.

Vous pouvez monter autant de partitions que vous le souhaitez mais dans des répertoires différents.

La commande mount permet de monter un système de fichiers mais ce montage ne sera pas permanent et il aura disparu en cas de redémarrage de la machine.

La méthode automatique

Pour le rendre permanent, il faudra modifier le fichier /etc/fstab qui contient les partitions à monter au démarrage.

ATTENTION: une erreur dans le fichier /etc/fstab empêche le système de démarrer au-delà du niveau d’exécution 1.

Il faudra alors corriger le problème pour pouvoir aller plus loin.

Voici comment modifier le fichier /etc/fstab, en ajoutant la ligne suivante:

/dev/sdb1 	/root/data	ext4     defaults        0 0

Laboratoire 1

Éteignez votre machine.

Ajoutez un disque.

Créez une partition.

Formatez la partition.

Montez la dans la répertoire /disque.

Redémarrez votre système.

Est-ce que le disque est toujours monté?

Rendez le permanent.

RAID

Les systèmes de stockage doivent être protégés contre les pannes, en particulier les pannes de disque.

Pour la résistance aux pannes il y a les différents niveaux de RAID (Redundant Array of Independant Disks).

Le RAID consiste à stocker plusieurs fois les données sur plusieurs disques pour que la panne d’un disque ne cause pas de problème.

RAID 0

Raid 0: seul niveau de raid qui n’apporte aucune sécurité supplémentaire aux données.

Permet d’augmenter la taille du disque et de ses partitions.

Permet d’améliorer les performances en lecture et écriture car les données peuvent être traitées en parallèle.

Gros inconvénient, en cas de perte d’un disque, toutes les données sont perdues.

Il vaut mieux que tous les disques soient de la même taille sinon de l’espace sera perdu.

Le coût n’est pas élevé car tout l’espace de stockage peut être utilisé pour les données.

RAID 1

Raid 1: aussi appelé miroir.

Les données sont écrites simultanément sur les 2 disques.

Permet la redondance des données: en cas de panne d’un disque, il est déconnecté du miroir et seul le disque encore fonctionnel sera accessible.

Une fois le disque en panne remplacé le miroir peut être reconstruit manuellement ou automatiquement.

Les lectures peuvent être plus performantes si lues en parallèles sur les 2 disques.

Solution simple à mettre en œuvre mais coûteuse car seul la moitié de l’espace disque est utilisable.

RAID 0+1 et RAID 1+0

Raid 0 + 1 et Raid 1 + 0 (Raid 10) comme leur nom l’indique, ils combinent le Raid 0 et le Raid 1.

Le Raid 1+0 offre de meilleures performances et une meilleure fiabilité car la perte d’un disque n’entraine pas la perte de tout le volume.

Le Raid 0+1 permet de faire un miroir à 3 grappes dont on peut retirer une grappe pour sauvegarde sans perte de données.

RAID 5

Raid 5: Très fiable, très performant.

Il faut un minimum de 3 disques.

La moitié des données est écrite sur un disque puis l’autre moitié sur le deuxième disque puis une données de contrôle sur le troisième disque.

Il y a rotation, les données de contrôle ne sont pas toute sur le même disque.

En cas de perte d’un disque, il peut être remplacé et les données perdues seront reconstruites grâce aux données restantes et aux données de contrôle.

La perte de 2 disques entraine la perte de toutes les données.

Solution économique car seulement un disque est perdu au profit des données de redondance, plus il y a de disques plus c’est économique.

Inconvénient: 3 disques minimum sont nécessaires.

RAID 6

Raid 6: le plus fiable.

Les données de redondance sont écrites plusieurs fois sur les disques.

Si elles sont écrites en double il sera possible de perdre 2 disques sans perte de données.

En cas de perte de 2 disques, la reconstruction peut être longue et coûteuse en terme de ressources.

Un minimum de 4 disques est nécessaire.

Plus il y a de disques moins la solution est coûteuse, comme pour Raid 5.

Et les autres

Raid 2: obsolète

Raid 3 et Raid 4: similaire à Raid 5 mais les données de parité sont sur un seul disque.

La différence entre les deux est que Raid 3 travaille par octet et Raid 4 par blocks.

Ne sont pas utilisés et donc ne seront pas étudiés.

Pour information, il existe aussi d’autres combinaisons de Raid qui sont peu utilisées.

Laboratoire 2

Le but du lab est de créer une partition RAID 5 et de transférer le contenu de /home sur cette partition et de la monter dans /home à la place de l’ancienne: les données utilisateurs seront alors protégées contre les pannes.

Éteignez votre machine et ajoutez 4 disques durs de taille identique.

Démarrez votre machine.

Créez le RAID 5 avec l’utilitaire mdadm:

$ mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd

Cette commande crée un nouveau disque (le groupe RAID 5 sera vu comme un seul nouveau disque) nommé /dev/md0.

Le niveau de RAID est RAID 5 (level=5).

Il est composé de 3 éléments.

Validez la création à l’aide de:

$ mdadm --detail /dev/md0

Formatez la partition RAID 5:

$ mkfs.ext4 /dev/md0

Monter le RAID5 dans /mnt.

Copiez le contenu de /home dans la partition qui est montée dans /mnt.

Corrigez le propriétaire des répertoires copiés dans /mnt.

À cette étape prenez un snapshot de votre machine.

Ajoutez la partition dans /etc/fstab.

Avant de redémarrer votre système, assurez-vous que vous connaissez le mot de passe de root car en cas de problème, seul root sera capable de se connecter au système.

Vous pouvez redémarrer le système.

/home devrait se trouver sur la partition RAID 5.

Laboratoire 3

Que faire en cas de panne d’un des disques?

Il s’agit donc maintenant de simuler un panne d’un des disques en le retirant du RAID 5:

$ mdadm --manage /dev/md0 --set-faulty /dev/sdb
$ mdadm --manage /dev/md0 --remove /dev/sdb

Vérifiez l’état du RAID avec :

$ mdadm --detail /dev/md0

Ajoutez le disque qui ne fisait pas partie du RAID 5:

$mdadm --manage /dev/md0 --add /dev/sde

Vérifiez la reconstruction à l’aide de

$ mdadm --detail /dev/md0

LVM

LVM (Logical Volume Manager) permet une gestion beaucoup plus souple des disques.

LVM permet de créer des volumes, supprimer des volumes mais surtout de redimensionner des volumes à chaud.

LVM permet aussi la prise d’instantanés pour les backups.

Apporte de la flexibilité par rapport au partitionnement classique.

Il s’agit de la couche de plus haut niveau de la gestion des disques.

Architecture

Trois composantes définissent LVM.

Volumes Physiques (PV)

  • Ce sont les disques physiques

  • Les commandes pour les gérer commencent par pv…

Groupes de Volumes (VG)

  • Regroupement de volumes physiques, permet d’agréger leur espace

  • Les commandes pour les gérer commencent par vg…

Volumes Logiques (LV)

  • Ce sont les partitions créées sur les groupes de volumes

  • Les commandes pour les gérer commencent par lv…

Gestion des disques avec LVM

Les étapes de création d’un volume sont les suivantes:

  • Installer des disques physiques

  • Déclarer les disques dans LVM (définition des PV)

  • Créer un groupe contenant les disques (définition des VG)

  • Créer les partitions (définition des LV)

  • Formater les LV

  • Monter les LV

Ajout des disques physiques

La première étape dans la gestion des volumes LVM est d’ajouter les disques physiques comme volumes physiques.

Ceci permet de spécifier à LVM quels disques physiques peuvent être utilisés par LVM.

Pour configurer un disque physique comme étant un volume physique LVM:

$ pvcreate /dev/sdb

Il est possible d’ajouter plusieurs disques physiques d’un seul coup:

$ pvcreate /dev/sdb /dev/sdc ...

Les commandes suivantes permettent de visualiser les volumes physiques:

$ pvscan
$ pvdisplay

Configuration des groupes de volumes

Une fois les volumes physiques créés, il faut créer un groupe de volumes qui permettra de les regrouper en un seul espace de stockage:

$ vgcreate vgGroup /dev/sdb /dev/sdc

Ce groupe contient deux disques (deux volumes physiques LVM).

C’est maintenant tout cet espace de stockage qui pourra être maniuplé.

Il est possible d’ajouter des volumes physiques à un groupe de volumes:

$ vgextend vgGroup /dev/sdd

Pour visualiser les groupes de volumes:

$ vgscan
$ vgdisplay

Configuration des volumes logiques

Pour créer un volume logique:

$ lvcreate -L [taille]G -n  lv1 vgGroup1

Un nouveau périphérique est alors ajouté dans /dev, son chemin d’accès est:

$ /dev/vgGroup/lv1

C’est ce volume logique qui pourra être utilisé comme un disque ordinaire mais avec des fonctionnalités supplémentaires comme les instantanés ou la possibilité de modifier la taille.

Utilisation des volumes logiques

Pour formater le volume:

$ mkfs.ext4 /dev/vgGroup/lv1

Et pour monter le volume (à noter que c’est le volume logique qui est monté et non pas les disques physiques):

$ mount /dev/vgGroup/lv1 /mnt

Vous pouvez vérifier que le volume est monté correctement:

$ df -h

Créez des fichiers sur ce volumes pour tester leur existence après avoir augmenté la taille du volume.

Augmentation de la taille d’un disque

Il s’agit maintenant d’augmenter la taille du volume.

La première étape consiste à ajouter un volume physique:

$ pvcreate /dev/sdd

Ensuite il faut ajouter le volume physique au groupe de volumes:

$ vgextend vgGroup /dev/sdd

Puis enfin c’est la taille du volume logique qui est augmentée:

$ lvextend -L +8G /dev/vgGroup/lv1

Il faut ensuite augmenter la taille du système de fichier. Pour ceci il faut démonter le volume, le vérifier et augmenter la taille puis le remonter.

Démontez le volume:

$ umount /mnt

Vérifier le volume:

$ e2fsck -f /dev/vgGroup/lv1

Étendre le système de fichiers:

$ resize2fs -p /dev/vgGroup/lv1

Remontez le système de fichiers:

$ mount /dev/vgGroup/lv1 /mnt

Laboratoire 4

Au cours des étapes suivantes, valider chacune des commandes à l’aide de pvs, pvscan, pvdisplay, vgs, vgscan, vgdisplay, lvs, lvscan et lvdisplay.

Dans une VM, ajouter 5 disques de 2 Go.

Configurer ces 5 disques comme volumes physiques dans LVM.

Créer un groupe de volumes contenant 4 volumes physiques (sdb, sdc, sdd, sde).

Créer un volume logique de 4Go.

Partitionner, formater et monter le volume créé.

Créer des fichiers sur le volume.

Ajouter le 5ème volume physique au groupe de volume.

Agrandir le volume logique de 3Go.

Écrire des fichiers sur le volume.

Réduction de la taille

Pour réduire la taille d’un groupe de volume en supprimant un volume physique, il faut d’abord s’assurer qu’il y a suffisamment d’espace.

Il est possible de réduire la taille d’un volume logique.

Pour cela il faut d’abord démonter le volume puis vérifier le système de fichier, réduire le système de fichier puis réduire le volume logique.

Il peut être possible ensuite de supprimer un volume physique du groupe de volume.

Pour vérifier le système de fichier:

$ e2fsck -f /dev/group1/vol1

Pour le redimensionner:

$ resize2fs /dev/group1/vol1 10G

Puis réduire le volume logique:

$ lvreduce -L -8G /dev/group1/vol1

Puis il est possible de supprimer le disque du groupe de volume:

$ vgreduce group1 /dev/[vol]

Il est beaucoup plus difficile de réduire la taille d’un volume XFS.

Instantanés

Pour créer un instantané:

$ lvcreate -s -n vol-snap -L[taille] /dev/group1/vol1

Pour le supprimer:

$ lvremove /dev/group1/vol-snap

Pour le fusionner:

$ lvconvert --merge /dev/group1/vol-snap

Pour fusionner ou supprimer un snapshot, il est préférable de démonter le snapshot et l’original.

Il peut aussi être nécessaire de désactiver et réactiver un groupe de volume :

$ vgchange -an /dev/group
$ vgchange -ay /dev/group

Après chaque commande, il est possible de voir l’état du snapshot à l’aide des commandes suivantes:

  • lvs

  • lvscan

  • lvdisplay

Laboratoire 5

Créer deux volumes RAID 5 et combinez les en un volume LVM.

Laboratoire 6

Créer un snapshot, le monter et modifier des fichiers sur le snapshot.

Choisir et exécuter une des options: fusionner ou supprimer l’instantané.

Réduire la taille du volume en supprimant sdb du groupe de volumes.

Supprimer tous les volumes physiques de LVM.