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

46

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?

Bensuperpc
la source

Réponses:

79

Vraisemblablement, vous verrez un aperçu de l'erreur "Il ne reste plus d'espace sur le périphérique":

# 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 dans la pratique, vous atteignez cette limite beaucoup plus tôt que "4 milliards de fichiers". Vérifiez vos systèmes de fichiers à la fois df -het df -ipour savoir combien d’espace est disponible.

# 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 la taille moyenne de vos fichiers n’est pas de 4 Ko, vous manquez d’espace inode-space beaucoup plus tôt que d’espace de stockage. Il est possible de spécifier un autre ratio ( mke2fs -N number-of-inodesou -i bytes-per-inodeou -T usage-typetel que défini dans /etc/mke2fs.conf).

Frostschutz
la source
1
Merci pour votre réponse. Parfois, je suis inquiet, j’ai plus de 400 millions de fichiers dans ma partition principale (RAID 50), j’ai beaucoup de dépôts git, c’est pour la sécurité si cela devait arriver
Bensuperpc Le
5
@ensuperpc: Si de nombreux fichiers ne sont pas utilisés régulièrement (uniquement à des fins de sauvegarde), vous pouvez envisager de placer chaque projet dans son propre fichier tar. Cela réduit considérablement le nombre de fichiers, ainsi que l'espace occupé si vous utilisez une option de compression.
jamesqf le
27
@jamesqf Si vous ne l'avez pas déjà fait, essayez de l'exécuter git repackdans chaque référentiel git pour combiner tous les objets séparés dans un fichier de pack.
user253751
13
+1 Etant donné que vous utilisez simplement touch, aucune fantaisie echo, vous montrez également un point important et une idée fausse souvent formulée: il est possible de remplir un disque avec des fichiers vides.
rexkogitans le
6
@jamesqf git repackne perd aucune fonctionnalité, il reste toujours le même rapport git, le tarrend illisible pour de nombreux programmes dans l'attente d'un projet ou d'un référentiel git
Ferrybig
52

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

Dans le scénario que vous décrivez, le transfert sera abandonné une fois la limite atteinte.

Stephen Kitt
la source