• 12 hours
  • Medium

Free online content available in this course.

course.header.alt.is_video

course.header.alt.is_certifying

Got it!

Last updated on 11/22/23

Gérez le système de fichier ext4

Dans le chapitre précédent, vous avez formaté une partition au format ext4 qui est le système de fichier par défaut d’Ubuntu. Dans cette partie, vous allez en apprendre un peu plus sur ce format de fichier puis vous verrez comment redimensionner votre partition.

Optimisez une partition ext4 avec tune2fs

Sur votre serveur vm-serveur , tapez la commande :

$ sudo tune2fs -l /dev/sdb1

pour afficher les informations de votre partition /dev/sdb1 . Comme vous pouvez le voir, il y a beaucoup d’informations. Ici, nous allons seulement détailler les plus importantes.

Filesystem volume name:   <none>
Filesystem UUID: 8c2d60b0-9435-4852-b857-d2fd367d3e79

Actuellement, vous avez identifié votre partition par son nom de périphérique /dev/sdb1 .

La limite de cette nomination c’est que les noms de périphériques sont attribués en fonction du premier disque détecté… et ça peut changer. En particulier si vous vous amusez à brancher vos disques sur un connecteur différent.

Ext4 vous propose donc un identifiant aléatoire unique (le UUID) pour identifier votre disque ainsi que la possibilité de définir un label, un nom personnalisé qui sera peut-être plus compréhensible par un humain. Vous pourrez ensuite utiliser ces noms dans votre fichier /etc/fstab et dans la plupart des commandes qui manipulent des partitions.

Filesystem state:         clean

Bonne nouvelle ! Votre système de fichier est "propre", c’est-à-dire qu’il fonctionne normalement. Nous verrons plus loin comment le réparer en cas de problème.

Inode count:              65536
Block count:              261883
Reserved block count:     13094
Block size:               409

Sur votre partition, les données sont stockées sous forme de blocs. Ici, la taille d’un bloc est fixée à 4096 octets, soit 4ko. Nous avons 261883 blocs de 4ko ce qui correspond bien à 1Go de stockage. Un fichier occupera au minimum un bloc de 4ko et un fichier de plus de 4ko occupera autant de blocs que nécessaire.

Schéma indiquant le remplissage des blocs de 4ko sur un système de fichier ext4 pour des fichiers de 1ko, 6ko et 15ko
Ext4 écrit les fichiers par blocs

Si vous deviez stocker principalement des milliers de fichiers de 1ko, il pourrait être intéressant de diminuer la taille des blocs pour limiter l’espace perdu.

Pour que le système puisse retrouver les blocs de données qui correspondent à un fichier, il stocke l’adresse des blocs dans un noeud d’index qu’on appelle inode. Sur votre partition, vous avez ainsi 65536 inodes disponibles ; ce qui veut dire que vous ne pourrez pas créer plus de 65536 fichiers sur cette partition.

Enfin, vous voyez que 13094 blocs sont réservés. En effet, par défaut, 5% des blocs sont réservés à l’utilisateur root. C’est principalement utile pour permettre à l’utilisateur root de pouvoir se connecter à un système dont le disque serait plein.

On peut utiliser tune2fs pour modifier tous ces attributs :

  • Pour mieux identifier votre partition de données, vous allez l’appeler DATA1 (option -L ).

  • Sur une partition dédiée à du stockage de données, vous n’avez pas besoin de blocs réservés. Vous allez donc supprimer cette réservation (option-m 0 ).

$ df -h /dev/sdb1
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1       991M  2.6M 922M   1% /var/data1

$ sudo tune2fs -m 0 -L DATA1 /dev/sdb1
tune2fs 1.44.1 (24-Mar-2018)
Setting reserved blocks percentage 0% (0 blocks)

$ df -h /dev/sdb1
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1       991M  2.6M 973M   1% /var/data

Voilà, on a gagné 50Mo de stockage. Vous pouvez maintenant remplacer  /dev/sdb1  par  LABEL=DATA1  dans votre fichier  /etc/fstab  .

Redimensionnez une partition ext4

Sur votre disque de données  /dev/sdb  de 1Go, vous n’avez créé qu’une partition qui s’étend sur tout le disque. On peut imaginer des cas où on aurait besoin, a posteriori, de disposer de deux partitions sur ce disque. Par exemple, pour créer une nouvelle partition de 200Mo, on aurait besoin de :

  • réduire notre système de fichier ext4 de 1Go à 800Mo

  • réduire la partition /dev/sdb1 à 800Mo également

  • créer une partition /dev/sdb2 de 200Mo

  • formater cette partition /dev/sdb2

Schéma des 3 couches de stockage, le disque physique, la partition et le système de fichier faisant tous 1Go de taille pour l'instant
Les trois couches à prendre en compte : le disque physique, la partition, le système de fichier

Pour réduire une partition ext4, il est nécessaire qu’elle soit démontée :

$ sudo umount LABEL=DATA1 #Équivalent à umount /dev/sdb1

On va ensuite préparer la partition grâce à la commande e2fsck qui va vérifier que votre système de fichier est propre et rassembler les blocs au début de partition si besoin.

On pourra alors procéder au redimensionnement avec resize2fs 

$ sudo e2fsck -f /dev/sdb1
e2fsck 1.45.5 (07-Jan-2020)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
DATA1: 12/65536 files (0.0% non-contiguous), 8860/261883 block
$ sudo resize2fs /dev/sdb1 700M
resize2fs 1.45.5 (07-Jan-2020)
Resizing the filesystem on /dev/sdb1 to 179200 (4k) blocks.
The filesystem on /dev/sdb1 is now 179200 (4k) blocks long
Même schéma des 3 couches de stockage mais avec le système de fichier qui a été réduit à 700Mo
Le système de fichier a été réduit à 700Mo mais la partition fait toujours 1Go

Voilà, notre système de fichiers fait maintenant 700Mo.

À ce stade, la partition /dev/sdb1 fait encore 1Go. Nous allons la réduire à 800Mo et créer une seconde partition de 200Mo grâce à gdisk .

En réalité, ce qu’il faut faire pour notre première partition, c’est la supprimer puis la recréer. Heureusement, cette opération ne touche pas aux données mais seulement à la table de partition.

Commencez par supprimer la partition :

$ sudo gdisk /dev/sdb
GPT fdisk (gdisk) version 1.0.5

Partition table scan:
 MBR: protective
 BSD: not present
 APM: not present
 GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): d
Using 

Créez ensuite un nouvelle partition de 800Mo :

Command (? for help): n
Partition number (1-128, default 1):
First sector (34-2097118, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-2097118, default = 2097118) or {+-}size{KMGTP}: 800M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem

Pour la seconde partition,gdisk vous propose directement de la placer à la suite de la première et de l’étendre jusqu’à la fin du disque : ça vous va très bien, confirmez.

Indiquez simplement 8200 pour le code hexadécimal de la partition ce qui correspond à une partition de swap (il fallait bien choisir d’en faire quelque chose).

Command (? for help): n
Partition number (2-128, default 2):
First sector (34-2097118, default = 1640448) or {+-}size{KMGTP}:
Last sector (1640448-2097118, default = 2097118) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8200
Changed type of partition to 'Linux swap

Vérifiez que la table de partition est correcte :

Command (? for help): p
Disk /dev/sdb: 2097152 sectors, 1024.0 MiB
Model: VBOX HARDDISK
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 52A98F48-8F15-4DC8-8483-A65140F9AF00
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 2097118
Partitions will be aligned on 2048-sector boundaries
Total free space is 4061 sectors (2.0 MiB)

Number  Start (sector)    End (sector)  Size     Code  Name
  1          2048         1638400   799.0 MiB  8300 Linux filesystem
  2            1640448         2097118   223.0 MiB  8200 Linux swa

Si c’est bon, vous pouvez enregistrer les changements :

Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully
Même schéma des 3 couches de stockages mais avec une partition de 800Mo et une partition de 200Mo
Vous avez maintenant 2 partitions et un système de fichier sur la 1ère

Il vous reste maintenant à ajuster la taille de votre système de fichier ext4 à la taille de la partition :

$ sudo resize2fs /dev/sdb1
e2fsck 1.45.5 (07-Jan-2020)
Resizing the filesystem on /dev/sdb1 to 204544 (4k) blocks.
The filesystem on /dev/sdb1 is now 204544 (4k) blocks long

Voilà l’astuce : sans indication de taille, resize2fs ajuste la taille du système de fichier à la taille disponible sur la partition. Ça vous évite de calculer à l’octet près l’espace à ajouter.

Pour utiliser votre espace de swap nouvellement créé, il suffit de formater la partition puis d’indiquer au noyau Linux que cet espace est prêt à être utilisé :

$ sudo mkswap /dev/sdb2
Setting up swapspace version 1, size = 223 MiB (233807872 bytes)
no label, UUID=fe6fce3a-bc50-4121-95b7-f7112254d25a
$ sudo swapon /dev/sdb2

Enfin, pour activer cette partition de swap au démarrage, ajoutez la ligne suivante à votre fichier  /etc/fstab  :

/dev/sdb2    none    swap    sw    0 0
Même schéma des 3 couches de stockage mais avec un système de fichier ext4 de 800Mo sur la 1ere partition et un système de fichier swap de 200Mo sur la 2e
Partitionnement final avec une partition ext4 de 800Mo et une partition de swap de 200Mo

Bravo, vous avez partitionné votre disque de données !

En résumé

  • L’espace disponible sur une partition ext4 est limité par le nombre de blocs et par le nombre d’inodes.

  • On modifie des attributs du système de fichiers ext4 par la commande  tune2fs

  • Pour réparer un système de fichiers ext4, vous utiliserez la commande  e2fsck

Dans le prochain chapitre, vous verrez comment vous prémunir de défaillances matérielles grâce à la technologie RAID.

Example of certificate of achievement
Example of certificate of achievement