¿Por qué existen tantas formas diferentes de medir el uso del disco?

¿Por qué existen tantas formas diferentes de medir el uso del disco?

Cuando sumo los tamaños de mis archivos, obtengo una cifra. Si corro du, obtengo otra figura. Si ejecuto dutodos los archivos de mi partición, no coincide con las dfafirmaciones que se utilizan. ¿Por qué hay tantas cifras diferentes para el tamaño total de mis archivos? ¿Las computadoras no pueden sumar?

Hablando de sumar: cuando sumo las columnas "Usado" y "Disponible" df, no obtengo la cifra total. Y esa cifra total es menor que el tamaño de mi partición. ¡Y si sumo los tamaños de mis particiones, no obtengo el tamaño de mi disco! ¿Lo que da?

Respuesta1

Sumar números es fácil. El problema es que hay muchos números diferentes para sumar.

¿Cuánto espacio en disco utiliza un archivo?

La idea básica es que un archivo que contenganorteusos de bytesnortebytes de espacio en disco, más un poco de información de control: los metadatos del archivo (permisos, marcas de tiempo, etc.) y un poco de sobrecarga para la información que el sistema necesita para encontrar dónde está almacenado el archivo. Sin embargo hay muchas complicaciones.

Complicaciones microscópicas

Piense en cada archivo como una serie de libros en una biblioteca. Los archivos más pequeños forman un solo volumen, pero los archivos más grandes constan de muchos volúmenes, como una enciclopedia. Para poder localizar los archivos, existe un catálogo de fichas que hace referencia a cada volumen. Cada volumen tiene un poco de sobrecarga debido a las portadas. Si un archivo es muy pequeño, esta sobrecarga es relativamente grande. Además, el propio catálogo de fichas ocupa algo de espacio.

Yendo un poco más técnico, en un sistema de archivos simple típico, el espacio se divide enbloques. Un tamaño de bloque típico es 4KiB. Cada archivo ocupa un número entero de bloques. A menos que el tamaño del archivo sea un múltiplo del tamaño del bloque, el último bloque sólo se utiliza parcialmente. Entonces, un archivo de 1 byte y un archivo de 4096 bytes ocupan 1 bloque, mientras que un archivo de 4097 bytes ocupa dos bloques. Puede observar esto con lso du: si su sistema de archivos tiene un tamaño de bloque de 4 KB, entonces ls -sy duinformará 4 KB para un archivo de 1 byte.

Si un archivo es grande, entonces se necesitan bloques adicionales solo para almacenar la lista de bloques que componen el archivo (estos sonbloques indirectos; sistemas de archivos más sofisticados pueden optimizar esto en forma deextensiones). Esos no se muestran en el tamaño del archivo según lo informado por ls -lGNU du --apparent-size. duy ls -s, que informan el uso del disco en lugar del tamaño, sí los tienen en cuenta.

Algunos sistemas de archivos intentan reutilizar el espacio libre que queda en el último bloque paraempaquetar varias colas de archivos en el mismo bloque. Algunos sistemas de archivos (comoext4 desde Linux 3.8use bloques 0 para archivos pequeños (solo unos pocos bytes) que quepan completamente en el inodo.

Complicaciones macroscópicas

Generalmente, como se vio arriba, el tamaño total informado por dues la suma de los tamaños de los bloques o extensiones utilizadas por el archivo.

El tamaño informado por dupuede ser menor si el archivo está comprimido. Los sistemas Unix tradicionalmente admiten una forma tosca de compresión: si un bloque de archivos contiene sólo bytes nulos, entonces, en lugar de almacenar un bloque de ceros, el sistema de archivos puede omitir ese bloque por completo. Un archivo con bloques omitidos como este se llamaarchivo escaso. Los archivos dispersos no se crean automáticamente cuando un archivo contiene una gran serie de bytes nulos; la aplicación debe hacer arreglos para que el archivo se vuelva disperso.

Algunos sistemas de archivos comobtrfsyzfsoporte de propósito generalcompresión.

Complicaciones avanzadas

Dos características principales de los sistemas de archivos muy modernos, como zfs y btrfs, hacen que la relación entre el tamaño del archivo y el uso del disco sea significativamente más distante: las instantáneas y la deduplicación.

Instantáneasson un estado congelado del sistema de archivos en una fecha determinada. Los sistemas de archivos que admiten esta función pueden contener varias instantáneas tomadas en diferentes fechas. Estas instantáneas ocupan espacio, por supuesto. En un extremo, si elimina todos los archivos de la versión activa del sistema de archivos, el sistema de archivos no quedará vacío si quedan instantáneas.

Cualquier archivo o bloque que no haya cambiado desde que se tomó una instantánea, o entre dos instantáneas, existe de manera idéntica en la instantánea y en la versión activa u otra instantánea. Esto se implementa a través deCopiar en escrito. En algunos casos extremos, es posible que la eliminación de un archivo en un sistema de archivos completo falle debido a que no hay suficiente espacio disponible, porque eliminar ese archivo requeriría hacer una copia de un bloque en el directorio, y no hay más espacio ni siquiera para ese bloque.

Deduplicaciónes una técnica de optimización del almacenamiento que consiste en evitar almacenar bloques idénticos. Con datos típicos, no siempre vale la pena buscar duplicados. AmboszfybtrfsAdmite la deduplicación como característica opcional.

¿Por qué el total es dudiferente de la suma de los tamaños de los archivos?

Como hemos visto anteriormente, el tamaño informado por dupara cada archivo normalmente es la suma de los tamaños de los bloques o extensiones utilizadas por el archivo. Tenga en cuenta que, de forma predeterminada, ls -lenumera los tamaños en bytes, pero duenumera los tamaños en KiB o en unidades (sectores) de 512 bytes en algunos sistemas más tradicionales ( du -kfuerza el uso de kilobytes). La mayoría de los Unices modernos admiten ls -lhy du -husan números “legibles por humanos” usando K, M, G, etc., es suficiente (para KiB, MiB, GiB) según corresponda.

Cuando se ejecuta duen un directorio, resume el uso del disco de todos los archivos en el árbol de directorios,incluyendo los directoriosellos mismos. Un directorio contiene datos (los nombres de los archivos y un puntero a dónde están los metadatos del archivo), por lo que necesita un poco de espacio de almacenamiento. Un directorio pequeño ocupará un bloque, un directorio más grande requerirá más bloques. La cantidad de almacenamiento utilizado por un directorio a veces depende no sólo de los archivos que contiene, sino también del orden en que se insertaron y en el que se eliminaron algunos archivos (en algunos sistemas de archivos, esto puede dejar agujeros: un compromiso entre el espacio en disco y el rendimiento). ), pero la diferencia será pequeña (un bloque extra aquí y allá). Cuando ejecuta ls -ld /some/directory, aparece el tamaño del directorio. (Tenga en cuenta que la línea "NNN total" en la parte superior de la salida ls -les un número no relacionado, es la suma de los tamaños en bloques de los elementos enumerados, expresada en KiB o sectores).

Tenga en cuenta que duincluyearchivos de puntosque lsno se muestra a menos que use la opción -Ao -a.

A veces dureporta menos de la suma esperada. Esto sucede si hayenlaces durosdentro del árbol de directorios: ducuenta cada archivo solo una vez. Utilice du -lel interruptor para contar archivosnorteveces si tienennorteenlaces duros.

En algunos sistemas de archivos, como ZFSLinux, duno informa el espacio total en disco ocupado por los atributos extendidos de un archivo.

Tenga en cuenta que si hay puntos de montaje en un directorio, dutambién contará todos los archivos en estos puntos de montaje, a menos que se le dé la -xopción. Entonces, si, por ejemplo, desea el tamaño total de los archivos en su sistema de archivos raíz, ejecute du -x /, no du /.

Si un sistema de archivos está montado en un directorio que no está vacío, los archivos en ese directorio están ocultos por el sistema de archivos montado. Todavía ocupan su espacio, pero duno los encuentran.

Archivos eliminados

Cuando un archivo eseliminado, esto sólo elimina la entrada del directorio, no necesariamente el archivo en sí. Se necesitan dos condiciones para eliminar realmente un archivo y así recuperar su espacio en disco:

  • El recuento de enlaces del archivo debe reducirse a 0: si un archivo tiene varios enlaces físicos, eliminar uno no afecta a los demás.
  • Mientras el archivo esté abierto mediante algún proceso, los datos permanecen. Sólo cuando todos los procesos hayan cerrado el archivo se eliminará el archivo. La salidafuser -molsofen un punto de montaje incluye los procesos que tienen un archivo abierto en ese sistema de archivos, incluso si el archivo se elimina.
  • Incluso si ningún proceso tiene abierto el archivo eliminado, es posible que el espacio del archivo no se recupere si ese archivo es el backend de un loopdispositivo. losetup -a(as root) puede indicarle qué loopdispositivos están configurados actualmente y en qué archivo. El dispositivo de bucle debe destruirse (con losetup -d) antes de poder recuperar el espacio en disco.

Si elimina un archivo en algunos administradores de archivos o entornos GUI, es posible que se coloque en un área de papelera donde se puede recuperar. Mientras el archivo se pueda recuperar, su espacio seguirá consumiéndose.

¿De qué son exactamente estos números df?

Un sistema de archivos típico contiene:

  • Bloques que contienen datos de archivos (incluidos directorios) y algunos metadatos (incluidos bloques indirectos y atributos extendidos en algunos sistemas de archivos).
  • Bloques gratis.
  • Bloques que están reservados para el usuario root.
  • superbloques y otra información de control.
  • Inodos
  • Adiario

Sólo el primer tipo es reportado por du. En lo que respecta a df, lo que se incluye en las columnas "usado", "disponible" y total depende del sistema de archivos (por supuesto, los bloques usados ​​(incluidos los indirectos) siempre están en la columna "usado", y los bloques no utilizados siempre están en la columna " disponible”).

Sistemas de archivos en ext2/ext3/ext4reservar5% del espacio para el usuario root. Esto es útil en el sistema de archivos raíz, para mantener el sistema funcionando si se llena (en particular para iniciar sesión y para permitir que el administrador del sistema almacene algunos datos mientras soluciona el problema). Incluso para particiones de datos como /home, mantener ese espacio reservado es útil porque un sistema de archivos casi lleno es propenso a la fragmentación. Linux intenta evitar la fragmentación (que ralentiza el acceso a los archivos, especialmente en dispositivos mecánicos giratorios como los discos duros) asignando previamente muchos bloques consecutivos cuando se escribe un archivo, pero si no hay muchos bloques consecutivos, eso no puede funcionar. .

Los sistemas de archivos tradicionales, hasta ext4 inclusive pero no btrfs, reservan un número fijo deinodoscuando se crea el sistema de archivos. Esto simplifica significativamente el diseño del sistema de archivos, pero tiene la desventaja de que el número de inodos debe dimensionarse adecuadamente: con demasiados inodos, se desperdicia espacio; con muy pocos inodos, el sistema de archivos puede quedarse sin inodos antes de quedarse sin espacio. El comando df -iinforma cuántos inodos están en uso y cuántos están disponibles (los sistemas de archivos donde el concepto no es aplicable pueden informar 0).

La ejecución tune2fs -len el volumen que contiene un sistema de archivos ext2/ext3/ext4 informa algunas estadísticas que incluyen el número total y el número de inodos y bloques libres.

Otra característica que puede confundir la materia essubvolúmenes(apoyado enbtrfs, y en zfs bajo el nombreconjuntos de datos). Varios subvolúmenes comparten el mismo espacio, pero tienen raíces de árbol de directorios independientes.

Si un sistema de archivos está montado en la red (NFS, Samba, etc.) y el servidor exporta una parte de ese sistema de archivos (p. ej.el servidor tiene un /homesistema de archivos y exporta/home/bob), luego dfen un cliente se reflejan los datos de todo el sistema de archivos, no solo de la parte que se exporta y monta en el cliente.

¿Qué está usando el espacio en mi disco?

Como hemos visto anteriormente, el tamaño total informado por dfno siempre tiene en cuenta todos los datos de control del sistema de archivos. Utilice herramientas específicas del sistema de archivos para obtener el tamaño exacto del sistema de archivos si es necesario. Por ejemplo, con ext2/ext3/ext4, ejecute tune2fs -ly multiplique el tamaño del bloque por el recuento de bloques.

Cuando crea un sistema de archivos, normalmente llena el espacio disponible en la partición o volumen circundante. A veces puede terminar con un sistema de archivos más pequeño cuando ha estado moviendo sistemas de archivos o cambiando el tamaño de los volúmenes.

En Linux, lsblkpresenta una buena descripción general de los volúmenes de almacenamiento disponibles. Para obtener información adicional o si no la tiene lsblk, utilice herramientas de partición o administración de volúmenes especializadas para comprobar qué particiones tiene. En Linux, existe lvs, vgs, pvsparaLVM,fdiskpara particiones tradicionales estilo PC (“MBR”) (así como GPT en sistemas recientes),gdiskparaGPTparticiones,disklabelpara etiquetas de disco BSD,separado, etc. En Linux, cat /proc/partitionsofrece un resumen rápido. Las instalaciones típicas tienen al menos dos particiones o volúmenes utilizados por el sistema operativo: un sistema de archivos (a veces más) y unintercambiovolumen.

Algunas computadoras tienen una partición que contiene elBIOSu otro software de diagnóstico. Computadoras conUEFItener una partición de cargador de arranque dedicada.

Finalmente, tenga en cuenta que la mayoría de los programas de computadora usan unidades basadas en potencias de 1024 = 2 · 10 (porque a los programadores les encanta el sistema binario y las potencias de 2). Entonces 1 kB = 1024 B, 1 MB = 1048576 B, 1 GB = 1073741824, 1 TB = 1099511627776 B,… Oficialmente, estas unidades se conocen comokibibyteKiB,mebibyteMiB, etc., pero la mayoría del software solo informa k o kB, M o MB, etc. Por otro lado, los fabricantes de discos duros utilizan sistemáticamente el sistema métrico (unidades basadas en 1000). De modo que esa unidad de 1 TB tiene solo 931 GiB o 0,904 TiB.

Respuesta2

Un breve resumen de las complicaciones para calcular el tamaño de los archivos y los espacios en disco:

  • El espacio que ocupa el archivo en el disco es un multiplicador del número de bloques que ocupa frente al tamaño de cada bloque + el número de inodos que ocupa. Un archivo de 1 byte de longitud ocupará al menos 1 bloque, 1 inodo y una entrada de directorio.

    Pero podría necesitar sólo 1 entrada de directorio adicional si el archivo es un enlace físico a otro archivo. Sería simplemente otra referencia al mismo conjunto de bloques.

  • El tamaño del contenido del archivo. Esto es lo que lsse muestra.
  • El espacio libre en disco no es el tamaño del archivo más grande que cabe ni la suma de todos los tamaños de contenido de archivos que caben en el disco. Está en algún punto intermedio. Depende de la cantidad de archivos (que ocupan inodos), el tamaño del bloque y qué tan cerca el contenido de cada archivo llena los bloques por completo.

Esto es sólo una muestra de los sistemas de archivos y está demasiado simplificado. Recuerde también que los diferentes sistemas de archivos funcionan de manera diferente.

states muy útil para detectar parte de esta información. Aquí hay algunos ejemplos de cómo usar stat y para qué sirve:http://landoflinux.com/linux_stat_command_examples.html

Respuesta3

dfGeneralmente se usa para ver cuáles son los sistemas de archivos, qué tan completos están y dónde están montados. Muy útil cuando te estás quedando sin espacio en un sistema de archivos y tal vez quieras cambiar cosas entre los sistemas de archivos, o comprar un disco más grande, etc.

dumuestra detalles de cuánto almacenamiento acumulativo consume cada uno de los directorios (algo así como windirstaten Windows). Excelente para encontrar dónde estás acaparando espacio cuando intentas realizar una limpieza de archivos.

Aparte de las pequeñas diferencias numéricas explicadas por otros, creo que las utilidades duy dftienen propósitos muy diferentes.

Respuesta4

Ilustraré aquí diferentes casos que causan duser diferentes df.

dfcuenta los bloques asignados del sistema de archivos, duutiliza la información de tamaño de cada archivo. Una diferencia puede tener muchas causas:

  1. Archivos desvinculados (eliminados) que aún están abiertos por aplicación. Falta la información del archivo, el bloque aún está asignado. lsof +aL1 <filesystem>le ayudará a identificar los procesos. La mayoría de las veces hay que matar los procesos para liberar espacio (depende del proceso, a veces una recarga de configuración es suficiente).

  2. Archivos debajo de los puntos de montaje ocultos dupero no para df. debugfspuede ayudarle a leer el sistema de archivos.

    $ sudo debugfs 
    debugfs 1.42.12 (29-Aug-2014)
    debugfs:  open /dev/xxx    (the desired file system  device)
    debugfs:  cd /boot
    debugfs:  ls -l 
     1966081   40755 (2)      0      0    4096 26-May-2016 16:28 .
           2   40555 (2)      0      0    4096 11-May-2016 10:43 ..
     1974291  100644 (1)      0      0       0 26-May-2016 16:28 bob   <---<<< /boot/bob is hidden by /boot fs
    
  3. Archivos dispersoseso parece más grande que la realidad. Los bloques no asignados no se cuentan, dfpero el tamaño aparente del archivo sí se cuenta du.

Tenga en cuenta que los enlaces físicos no engañan du.

información relacionada