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. ]