Notes et transcriptions du cours “Montez un serveur de fichiers sous Linux” disponible sur la plateforme Openclassrooms.
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 système de fichier puis vous verrez comment redimensionner votre partition.
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 (notamment dans /etc/fstab) 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é au démarrage… 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: 4096
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.
Le schéma ci-dessus indique 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 même fichier, il stocke l’adresse des blocs dans un nœud 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.
Sur des partitions très petites avec un grand nombre de fichiers, vous pouvez être à court d’inodes avant d’être à court de blocs.
Vous pouvez vérifier :
df -h
;df -hi
. 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 :
-L
.-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
.
LABEL=DATA1 /mnt/data ext4 defaults 0 0
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 :
Ci-dessous, le schéma des trois couches à prendre en compte : le disque physique, la partition, le système de fichier. Il faudra agir en premier sur la couche la plus haute.
Évidemment, ça n’est pas magique, vous ne pourrez réduire la taille d’une partition que dans la limite de la taille disponible sur cette partition.
Pour réduire une partition ext4, il est nécessaire qu’elle soit démontée :
# Équivalent à umount /dev/sdb1 sudo umount LABEL=DATA1
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
Pour réparer votre système de fichiers en cas de crash, vous pourrez utiliser la commande e2fsck -y /dev/sdb1
qui demandera à e2fsck de réparer automatiquement votre système de fichiers.
En général ça marche assez bien et s’il retrouve des fichiers perdus, il les placera dans le répertoire lost+found
à la racine de la partition.
On peut à présent redimensionner le système de fichier :
sudo resize2fs /dev/sdb1 700M
Ce schéma représente le système de fichier réduit à 700Mo mais la partition fait toujours 1Go.
C’est moins que les 800Mo annoncés, c'est une marge volontaire pour éviter une perte de données liée aux différences d'unités utilisées par les commandes resize2fs et gdisk (le réajustement se fera ultérieurement).
En effet :
resize2fs
calcule les tailles en blocs de 4096 octets ;gdisk
compte en secteurs disques de 512 octets,il est parfois difficile de parfaitement synchroniser la taille du système de fichier avec la taille de la partition.
Ce qui compte, c’est d’éviter à tout prix d’avoir une partition plus petite que votre système de fichiers : c’est comme mettre des chaussures trop petites, ça fait mal ! On pourra agrandir votre système de fichier par la suite pour occuper l’espace vide.
À 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 :
# Démarrer gdisk en mode interactif sudo gdisk /dev/sdb
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 en frappant : W et en confirmant les changements.
Sur le schéma ci-dessous on représente les 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 nous reste maintenant à ajuster la taille de notre système de fichier ext4 à la taille de la partition avec la commande resize2fs
:
$ 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 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
Ci-dessous le schéma présente les 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.
On a bien un partitionnement final avec une partition ext4 de 800Mo et une partition de swap de 200Mo.
Bravo, vous avez partitionné votre disque de données !
tune2fs
;e2fsck
;Dans le prochain chapitre, vous verrez comment vous prémunir de défaillances matérielles grâce à la technologie RAID.