web-dev-qa-db-fra.com

Que se passe-t-il si la limite de 4 milliards de fichiers est dépassée dans une partition ext4?

Que se passe-t-il si la limite de 4 milliards de fichiers est dépassée dans une partition ext4, avec un transfert de 5 milliards de fichiers par exemple?

48
Bensuperpc

Vraisemblablement, vous verrez une certaine saveur d'erreur "Aucun espace laissé sur l'appareil":

# truncate -s 100M foobar.img
# mkfs.ext4 foobar.img
Creating filesystem with 102400 1k blocks and 25688 inodes
---> number of inodes determined at mkfs time ^^^^^
# mount -o loop foobar.img loop/
# touch loop/{1..25688}
touch: cannot touch 'loop/25678': No space left on device
touch: cannot touch 'loop/25679': No space left on device
touch: cannot touch 'loop/25680': No space left on device

Et en pratique, vous atteignez cette limite beaucoup plus tôt que "4 milliards de fichiers". Vérifiez vos systèmes de fichiers avec les deux df -h et df -i pour connaître l'espace restant.

# df -h loop/
Filesystem      Size  Used Avail Use% Mounted on
/dev/loop0       93M  2.1M   84M   3% /dev/shm/loop
# df -i loop/
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/loop0      25688 25688     0  100% /dev/shm/loop

Dans cet exemple, si vos fichiers ne sont pas de taille 4K en moyenne, vous manquez d'espace inode beaucoup plus tôt que l'espace de stockage. Il est possible de spécifier un autre ratio (mke2fs -N number-of-inodes ou -i bytes-per-inode ou -T usage-type tel que défini dans /etc/mke2fs.conf).

80
frostschutz

Une fois la limite atteinte, les tentatives ultérieures de création de fichiers échoueront avec ENOSPC , indiquant que le système de fichiers cible n'a pas de place pour les nouveaux fichiers.

Dans le scénario que vous décrivez, cela entraînera généralement l'abandon du transfert une fois la limite atteinte.

52
Stephen Kitt