Es bien sabido que los archivos de texto vacíos tienen cero bytes:
Sin embargo, cada uno de ellos contiene metadatos , que según mi investigación, se almacenan en inodes y usan espacio .
Dado esto, me parece lógico que es posible llenar un disco simplemente creando archivos de texto vacíos. ¿Es esto correcto? Si es así, ¿cuántos archivos de texto vacíos necesitaría para llenar un disco de, digamos, 1 GB?
Para hacer algunas comprobaciones, ejecuto df -i
pero aparentemente esto muestra el% de inodes que se utilizan (?) En lugar de cuánto pesan.
Filesystem Inodes IUsed IFree IUse% Mounted on
udev 947470 556 946914 1% /dev
tmpfs 952593 805 951788 1% /run
/dev/sda2 28786688 667980 28118708 3% /
tmpfs 952593 25 952568 1% /dev/shm
tmpfs 952593 5 952588 1% /run/lock
tmpfs 952593 16 952577 1% /sys/fs/cgroup
/dev/sda1 0 0 0 - /boot/efi
tmpfs 952593 25 952568 1% /run/user/1000
/home/lucho/.Private 28786688 667980 28118708 3% /home/lucho
disk-usage
inode
file-metadata
luchonacho
fuente
fuente
Respuestas:
Esta salida sugiere
28786688
inodos en general, después de lo cual el próximo intento de crear un archivo en el sistema de archivos raíz (dispositivo/dev/sda2
) volveráENOSPC
("No queda espacio en el dispositivo").Explicación: en el diseño original del sistema de archivos * nix, el número máximo de inodos se establece en el momento de creación del sistema de archivos. Se asigna un espacio dedicado para ellos. Puede quedarse sin inodos antes de quedarse sin espacio para datos, o viceversa. El sistema de archivos predeterminado de Linux más común
ext4
todavía tiene esta limitación. Para obtener información sobre los tamaños de inodo en ext4, consulte la página de manual de mkfs.ext4.Linux soporta otros sistemas de archivos sin esta limitación. Encendido
btrfs
, el espacio se asigna dinámicamente. "La estructura de inodo es relativamente pequeña y no contendrá datos de archivos incrustados ni datos de atributos extendidos". (ext3 / 4 asigna algo de espacio dentro de los inodes para atributos extendidos ). Por supuesto, aún puede quedarse sin espacio en disco creando demasiados metadatos / entradas de directorio.Pensando en ello, tmpfs es otro ejemplo donde los inodes se asignan dinámicamente. Es difícil saber qué
df -i
significaría en la práctica el número máximo de inodos reportados por estos sistemas de archivos. No atribuiría ningún significado al valor que se muestra."XFS también asigna inodes dinámicamente. También lo hace JFS. Lo mismo hizo / reiserfs. Lo mismo ocurre con F2FS. Los sistemas de archivos tradicionales de Unix asignan inodos estáticamente en tiempo mkfs, y también lo hacen FSes modernos como ext4 que rastrean su herencia, pero en estos días eso es La excepción, no la regla.
"Por cierto, XFS le permite establecer un límite en el porcentaje máximo de espacio utilizado por los inodes, por lo que puede quedarse sin inodos antes de llegar al punto en el que no puede agregar archivos existentes. (El valor predeterminado es 25% para FSes menos de 1 TB, 5% para sistemas de archivos de hasta 50 TB, 1% para más grande que eso.) De todos modos, este uso del espacio en metadatos (inodes y mapas de extensión) se reflejará en forma regular
df -h
"- Peter Cordes en un comentario a esta respuestafuente
28786688-667980=28118708
archivos vacíos, en efecto me quedaré sin inodos y "romperé mi sistema"?df -h
@luchonacho.Crear archivos vacíos implica usar lo siguiente:
El número de inodos disponibles a menudo se determina cuando se crea un sistema de archivos, y no se puede cambiar (algunos sistemas de archivos como Btrfs o XFS asignan inodos dinámicamente). Eso es lo que mide
df -i
. Cuando te quedas sin inodos, no puedes crear nuevos archivos o directorios, incluso si tienes espacio en disco disponible.Las entradas de directorio también ocupan espacio, desde el espacio disponible en disco. Puede ver esto mirando el tamaño de un directorio: siempre es un múltiplo del tamaño del bloque, y cuando un directorio contiene muchos archivos, su tamaño aumenta. Si se queda sin espacio en disco, es posible que no pueda crear nuevos archivos o directorios en un directorio que esté "lleno" ( es decir , donde agregar un nuevo archivo implicaría asignar un nuevo bloque), incluso si tiene inodos disponibles.
Entonces, sí, es posible quedarse sin espacio en disco utilizando solo archivos vacíos.
fuente
Argumento de lógica pura:
Un nombre de archivo consta de una cantidad de bytes distinta de cero. Incluso con la compresión máxima teórica en un hipotético sistema de archivos diseñado para permitir la cantidad máxima absoluta de nombres de archivo, cada nombre de archivo consumirá al menos un bit en algún lugar de su disco físico. Probablemente más, pero "1 bit por archivo" es el mínimo trivial.
Calcule la cantidad de bits que posiblemente caben en sus platos, y ese es un número máximo teórico de archivos (vacíos o no vacíos) que puede almacenar en él.
Entonces, la respuesta es sí. Eventualmente, se quedará sin espacio, sin importar qué almacenamiento esté usando, si continúa agregando archivos vacíos. Obviamente se acabará mucho antes del máximo calculado de esta manera, pero se acabará.
fuente
Simplemente no, pero puede quedarse sin inodos en Linux, que será lo mismo que quedarse sin espacio.
puedes probar algo como esto en tu caparazón
n=0; while :; do touch $n; let n=n+1; done
Solo asegúrese de ejecutarlo en la máquina virtual o se quedará sin inodos muy rápido.
fuente
rm -fr inodetest
para deshacerte de todos esos archivos vacíos y volver a funcionar normalmente. :)No puede llenar el disco haciendo archivos vacíos; el disco todavía tendrá mucho espacio para nuevos archivos. Pero sí, puede agotar el suministro finito de inodos libres del sistema de archivos, momento en el que no puede crear archivos nuevos (aunque su disco, en lo que respecta al espacio utilizado, está prácticamente vacío). Solo se usa la lista de inodos del sistema de archivos, no el disco ... por lo que el sistema de archivos está lleno, mientras que el disco está prácticamente vacío. La tabla de inodo usa espacio en el disco, pero la tabla no crece cuando agrega archivos, al igual que una hoja de papel no crece cuando escribe en sus líneas.
(una respuesta en un comentario de Baard Kopperud)
fuente