GNU/Linux >> Tutoriales Linux >  >> Linux

Los administradores de sistemas de Linux quieren saber:¿Adónde se fue mi espacio en disco?

La disparidad de hardware:acaba de comprar una nueva y agradable unidad de 1 TB, pero las herramientas de disco de su sistema Linux informan que tiene 977 GB. Oye, ¿a dónde fueron esos 23 GB?

En ninguna parte, y dependiendo de su opinión, ¡todavía está allí o nunca estuvo allí! Esta diferencia proviene de los fabricantes de discos y los programadores de sistemas operativos que utilizan diferentes unidades de medida. Los fabricantes de discos utilizan medidas métricas reales, por lo que 1000 GB =1 TB. Sin embargo, en el mundo de la informática, no operamos a la potencia de 10, operamos a la potencia de dos, entonces para nosotros, 1024 GB =1 TB. Esta diferencia en las unidades de medida es la diferencia entre 1 TB o 977 GB.

¡Vaya, eso es increíblemente molesto! Sin mencionar que no está realmente basado en estándares, que es algo de lo que se trata la comunidad de código abierto, ¿verdad? Esencialmente, en la industria informática, hemos abusado del hecho de que 1024 está muy cerca de 1000. Sin embargo, a medida que obtenemos archivos, memoria, unidades, paquetes, etc., cada vez más grandes, esta diferencia es cada vez más notable.

¿Así que, qué debe hacerse? Los organismos internacionales de normalización, como la Comisión Electrotécnica Internacional (IEC) y la Organización Internacional de Normalización (ISO), han creado una unidad de medida para tener en cuenta la diferencia de uso entre el sistema métrico real y la aproximación aproximada que hemos estado utilizando en informática. Ingrese el GiB y TiB (las otras unidades más pequeñas y más grandes siguen la misma nomenclatura). Esencialmente, 1024 GiB =1 TiB. Esto significa que aún puede comprar su unidad de 1 TB, pero las utilidades de disco deben informarlo como 977 GiB para reflejar que la utilidad de disco está usando un factor de 1024 para la medición, no el factor de medición métrico, 1000.

Las versiones modernas de herramientas ya han comenzado a utilizar este método. Por ejemplo, vea mi fdisk resultado de la utilidad de un sistema Red Hat Enterprise Linux 8.2 a continuación:

Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes

Aquí hay un artículo sobre el prefijo binario si desea obtener más detalles.

La discrepancia del sistema de archivos

El contenido a continuación se basa en un sistema de archivos extendido tradicional que se implementa en muchos Linux diferentes, específicamente en ext4. Sin embargo, Red Hat Enterprise Linux ahora implementa XFS como el sistema de archivos predeterminado. Hacia el final de esta sección, hay una discusión específica sobre cómo estos temas afectan a XFS. Por ahora, centrémonos en ext4.

La situación:un usuario informa que el sistema de archivos está lleno, pero cuando miro el disco libre (df ) salida, veo lo siguiente:

[root@somehost ~]# df -h
Filesystem             Size  Used  Avail  Use%  Mounted on
/dev/vdb1              991M  924M     0  100%  /mnt

De la salida anterior, observa que el Tamaño se informa en 991 MB, pero el Usado es de 924 MB, claramente no está lleno. Sin embargo, cuando un usuario ejecuta un comando para consumir más espacio en disco, como dd comando, reciben el siguiente mensaje:

[user@somehost mnt]$ dd if=/dev/zero of=bigfile2
dd: writing to 'bigfile2': No space left on device

Sin embargo, si usan touch para crear un archivo, ven esto:

[user@somehost mnt]$ touch file3

[user@somehost mnt]$ ls
bigfile  file3  lost+found

Además, si root crea un archivo usando dd , funciona sin problemas, como se muestra a continuación:

[root@somehost mnt]# dd if=/dev/zero of=root-file count=100
100+0 records in
100+0 records out
51200 bytes (51 kB, 50 KiB) copied, 0.000748385 s, 68.4 MB/s

[root@somehost mnt]# ls
bigfile  file3  lost+found  root-file

Claramente, la creación de archivos es exitosa a través de dd or touch si eres root! ¿Qué está pasando?

El motivo touch funciona es que el sistema de archivos no tiene bloques de datos para almacenar archivos contenidos . Sin embargo, el sistema de archivos tiene muchos inodos (indicadores de archivos) disponibles. Eso se confirma usando otra opción con el df comando:

[root@somehost mnt]# df -i
Filesystem             Inodes  IUsed   IFree IUse%  Mounted on
/dev/vdb1               65536     14   65522        1%  /mnt

El touch El comando crea un archivo vacío, lo que significa que consume un inodo para almacenar los metadatos del archivo, pero no consume ningún bloque de datos asociado.

La creación de archivos del usuario raíz funciona porque el sistema de archivos ext4 mantiene un espacio reservado al que los usuarios sin privilegios no pueden acceder. Solo la raíz, o los procesos de propiedad de la raíz, pueden escribir archivos para consumir este espacio en disco. Para los sistemas de archivos ext2, ext3 y ext4, puede inspeccionar estos datos, almacenados en el superbloque del sistema de archivos, utilizando el tune2fs dominio. En el resultado a continuación, eliminé la mayoría de los datos informados por tune2fs para que pueda mostrar el espacio total y reservado:

[root@somehost mnt]# tune2fs -l /dev/vdb1
tune2fs 1.45.4 (23-Sep-2019)
Filesystem volume name:   <none>
Last mounted on:          /mnt

<<< OUTPUT ABRIDGED >>>

Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              65536
Block count:              261888
Reserved block count:     13094
Free blocks:              253029
Free inodes:              65525
First block:              0
Block size:               4096

<< OUTPUT ABRIDGED>>

En el resultado anterior, observe el recuento de bloques reservados parámetro. Según mkfs.ext4 página man, por defecto es el cinco por ciento del espacio del sistema de archivos. En este sistema de archivos, ocupa aproximadamente 51 MiB de espacio.

Recuento de bloques reservados x tamaño de bloque =cantidad en bytes
13094 x 4096 =53633024 bytes

Luego puede convertir los Bytes a KiB o MiB dividiendo el número resultante por 1024 para aumentar las unidades de medida como mejor le parezca. Aquí hay un ejemplo:

53633024 Bytes / 1024 =52376 KiB
52376 KiB / 1024 =51,15 MiB

El sistema de archivos en su conjunto es de aproximadamente 1 GiB, por lo que un recuento de bloques reservados del cinco por ciento pondría el espacio de bloque de reserva en aproximadamente 50 MiB.

Este conjunto de bloques reservados es lo que el dd propiedad de la raíz utilizado para almacenar datos en el ejemplo anterior que funcionó mientras el usuario seguía sin almacenar archivos en el sistema de archivos aparentemente "completo". Los administradores pueden usar tune2fs para aumentar o disminuir el número de bloques reservados en un sistema de archivos. Sin embargo, si aumenta esta cantidad mientras el sistema de archivos está activo, debe haber espacio libre disponible contiguo al área de bloques reservados existente del disco para acumular más bloques reservados. En general, si desea reservar más de lo predeterminado, le recomiendo que haga esto cuando formatee el sistema de archivos usando una opción para mkfs.ext4 dominio. Este proceso garantiza que haya suficiente espacio contiguo para asignar la cantidad de bloques reservados que desea.

Por último, dependiendo del sistema de archivos, la herramienta que está utilizando para inspeccionar el sistema de archivos o su distribución, es posible que vea que las herramientas informan que el uso del sistema de archivos supera el 100%. Si viera un informe de herramienta 102 % utilizado, le indica que se ha consumido el 100 % del espacio en disco accesible para el usuario en el sistema de archivos, y que también ha consumido algunos de esos bloques reservados.

Entonces, ¿qué pasa con XFS? Anteriormente en la sección, mencioné que Red Hat Enterprise Linux 7 y 8 usan XFS como su formato de sistema de archivos predeterminado. XFS utiliza bloques reservados, pero reserva menos que los formatos de sistema de archivos extendidos y no permite que ningún usuario acceda a ese espacio. El espacio está reservado para que lo utilice el propio sistema de archivos XFS. Debido a que el espacio reservado tiene un propósito diferente:permitir que el sistema de archivos utilice el espacio para las operaciones del sistema de archivos y ocultar el espacio del sistema, es menos fácil informar sobre el uso de las utilidades XFS. Aún así, se puede hacer usando una combinación de xfs_info , mirando el número y el tamaño del bloque, convirtiéndolo en KiB y comparándolo con la salida de un df .

Terminar

Entonces, ¿dónde está su espacio de disco "perdido"? Está oculto en las diferentes unidades de medida utilizadas para informar la capacidad del disco. La forma en que se informa y utiliza este espacio también varía según el sistema de archivos y las herramientas.

[ ¿Quiere probar Red Hat Enterprise Linux? Descárgalo ahora gratis. ]


Linux
  1. Use df para verificar el espacio libre en disco en Linux

  2. Verifique el espacio en disco usado en Linux con du

  3. Determinar el uso del disco en Linux usando el comando "du"

  4. probando sin espacio en disco en linux

  5. ¿Cómo saber dónde está atascado un programa en Linux?

Cómo verificar el uso del espacio en disco en Linux usando Ncdu

Diskonaut:un navegador de espacio en disco terminal para Linux

¿Cómo limpiar algo de espacio en disco en una instancia de Linux?

Cómo verificar el espacio libre en disco en Linux

¿Rastreando dónde se ha ido el espacio en disco en Linux?

Comando Linux df para verificar el espacio en disco