Sur une instance ECS Linux, la capacité d'un disque cloud indiquée par la commande df peut différer de la capacité achetée. Ce comportement est normal et ne signale aucune erreur. L'écart s'explique par l'espace occupé par les métadonnées du système de fichiers, les inodes et l'espace réservé au système.
Description du problème
Un disque cloud de 200 GiB est attaché à une instance ECS Linux. Après initialisation du disque, exécutez la commande df -h : la capacité affichée n'est que de 197 GiB.
La capacité totale (Size) indiquée par la commande
df -hne correspond pas à la capacité achetée dans la console.La somme de l'espace utilisé (Used) et de l'espace disponible (Avail) n'est pas égale à la capacité totale (Size).
[root@xxx]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 916M 0 916M 0% /dev
tmpfs 936M 12K 936M 1% /dev/shm
tmpfs 936M 536K 936M 1% /run
tmpfs 936M 0 936M 0% /sys/fs/cgroup
/dev/vda3 40G 4.1G 34G 11% /
/dev/vda2 200M 5.8M 195M 3% /boot/efi
tmpfs 188M 0 188M 0% /run/user/0
/dev/vdb1 197G 118M 189G 1% /mnt
La capacité des disques cloud achetés dans la console Alibaba Cloud est mesurée en gibioctets (GiB). Cette rubrique utilise la commande df -h à titre d'exemple. Si vous utilisez la commande df -H, l'utilisation des partitions est exprimée en gigaoctets (GB).
La commande
df -hutilise une base de 1024 et affiche les tailles en unités binaires (KiB, MiB, GiB).La commande
df -Hutilise une base de 1000 et affiche les tailles en unités décimales (KB, MB, GB).
Par exemple, une partition de exactement 40 GiB peut s'afficher sous la forme 40G avec la commande df -h. La même partition peut s'afficher sous la forme 43G avec la commande df -H, car 40 GiB (40 × 1024³ octets) équivaut à environ 43 GB.
Causes
Question 1 : La capacité totale (Size) affichée par la commande df -h ne correspond pas à la capacité achetée dans la console
Surcharge du système de fichiers
Lorsque vous formatez et montez un disque cloud de 200 GiB sous Linux, sa capacité affichée peut n'être que de 197 GiB. Le système de fichiers nécessite en effet de l'espace pour les métadonnées, ce qui réduit la capacité disponible pour vos données.
Problème 2 : Used + Avail n'est pas égal à Size
Cet écart est généralement dû à deux facteurs : l'espace consommé par les inodes et l'espace réservé au système. Consultez la section Méthodes de dépannage pour savoir comment calculer cet espace consommé.
Utilisation des inodes
Un système de fichiers alloue un inode à chaque fichier et répertoire afin de stocker des attributs, tels que les permissions et la propriété. Ces inodes consomment eux-mêmes de l'espace disque, que la commande df -h n'inclut pas dans les champs Used ou Avail.
Espace réservé au système
Les systèmes de fichiers Linux réservent également une partie de l'espace disque pour l'usage du système. Cet espace réservé empêche la saturation complète du système de fichiers, garantissant ainsi la stabilité et la sécurité du système. Il n'est pas inclus dans les champs Used ou Avail rapportés par la commande df -h.
Méthodes de dépannage
Consultez les détails de la partition
Exécutez la commande suivante pour afficher les informations de partition du disque cloud.
sudo tune2fs -l /dev/[$Partition] | grep -E "count|size:"
Dans cette commande, /dev/[$Partition] représente le nom de la partition du disque cloud, par exemple /dev/vdb1. Remplacez le nom de la partition selon votre configuration.
Le résultat ressemble à ce qui suit :
[root@xxx]# sudo tune2fs -l /dev/vdb1 | grep -E "count|size:"
Inode count: 13107200
Block count: 52428539
Reserved block count: 2199325
Block size: 4096
Fragment size: 4096
Group descriptor size: 64
Flex block group size: 16
Mount count: 1
Maximum mount count: -1
Inode size: 256
Required extra isize: 32
Desired extra isize: 32
Calculez l'espace des inodes
Pour calculer l'espace total consommé par les inodes, exécutez la commande suivante :
sudo tune2fs -l /dev/[$Partition] | awk '/Inode count:/{c=$3} /Inode size:/{split($0,a,":"); s=a[2]} END{if(c && s) printf "Inode space: %.2f GiB\n", c*strtonum(s)/(1024^3); else print "Error: Could not find Inode information."}'
Dans cette commande, /dev/[$Partition] représente le nom de la partition du disque cloud, par exemple /dev/vdb1. Remplacez le nom de la partition selon votre configuration.
Vous pouvez également utiliser la formule suivante pour calculer l'espace consommé par les inodes :
Calculez l'espace réservé
Pour calculer l'espace total réservé au système, exécutez la commande suivante :
sudo tune2fs -l /dev/[$Partition] | awk '/Reserved block count:/{r=$4} /Block size:/{b=$3} END{if(r && b) printf "Reserved space: %.2f GiB\n", r*b/(1024^3); else print "Error: Could not find reserved block or block size information."}'
Dans cette commande, /dev/[$Partition] représente le nom de la partition du disque cloud, par exemple /dev/vdb1. Remplacez le nom de la partition selon votre configuration.
La commande renvoie le résultat suivant :
[root@ixxxxxxxxxxxx]# sudo tune2fs -l /dev/vdb1 | awk '/Reserved block count:/{r=$4} /Block size:/{b=$3} END{if(r & b) printf "Reserved space: %.2f GiB\n", r*b/(1024^3); else print "Error: Could not find reserved block or block size information."}'
Reserved space: 8.39 GiB
Vous pouvez également utiliser la formule suivante pour calculer l'espace réservé au système :