¿Qué sucede si se excede el límite de 4 mil millones de archivos en una partición ext4?

46

¿Qué sucede si se excede el límite de 4 mil millones de archivos en una partición ext4, con una transferencia de 5 mil millones de archivos, por ejemplo?

Bensuperpc
fuente

Respuestas:

79

Presumiblemente, verá un poco de error "No queda espacio en el dispositivo":

# 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

Y en la práctica llegas a este límite mucho antes que "4 mil millones de archivos". Verifique sus sistemas de archivos con ambos df -hy df -idescubra cuánto espacio queda.

# 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

En este ejemplo, si sus archivos no tienen un tamaño promedio de 4K, se queda sin espacio de inodo mucho antes que el espacio de almacenamiento. Es posible especificar otra relación ( mke2fs -N number-of-inodeso -i bytes-per-inode, o -T usage-typecomo se define en /etc/mke2fs.conf).

Frostschutz
fuente
1
Gracias por su respuesta, en algún momento estoy preocupado, tengo más de 400 millones de archivos en mi partición principal (RAID 50), tengo muchos repositorios git, era por seguridad si eso sucediera
Bensuperpc
55
@ensuperpc: si muchos de los archivos no se usan regularmente, solo para fines de copia de seguridad, puede considerar colocar cada proyecto en su propio archivo tar. Eso reduce la cantidad de archivos considerablemente, y también el espacio ocupado si usa una opción de compresión.
jamesqf
27
@jamesqf Si aún no lo ha hecho, intente ejecutar git repacken cada repositorio git para combinar todos los objetos separados en un archivo de paquete.
user253751
13
+1 Dado que solo está usando touch, no es lujoso echo, también muestra un punto importante y un concepto erróneo a menudo: es posible llenar un disco con archivos vacíos.
rexkogitans
66
@jamesqf git repackno pierde ninguna funcionalidad, sigue siendo funcionalmente el mismo repositorio de git, lo tarhace ilegible para muchos programas que esperan un proyecto o un repositorio de git
Ferrybig
52

Una vez que se alcanza el límite, los intentos posteriores de crear archivos fallarán ENOSPC, lo que indica que el sistema de archivos de destino no tiene espacio para archivos nuevos.

En el escenario que describe, esto normalmente dará como resultado que la transferencia se cancele una vez que se alcance el límite.

Stephen Kitt
fuente