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.
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
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
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
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
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.