Acabo de notar que ninguno de los sistemas de archivos ext {2,3,4} que estoy tratando de crear en el disco duro 500G no usa todo el espacio disponible (466G). También probé reiser3, xfs, jfs, btrfs e incluso vfat. Todos ellos crean fs de tamaño 466G (como se muestra por df -h ). Sin embargo, ext * crea fs de 459G. Deshabilitar los bloques reservados aumenta el espacio disponible para el usuario, pero el tamaño de fs sigue siendo 459G.
Lo mismo es para 1Tb HDD: 932G reiserfs, 917G ext4.
Entonces, ¿cuál es esta diferencia del 1.5%? ¿Por qué sucede y existe la manera de hacer que ext llene todo el volumen?
UPD: Todas las pruebas realizadas en la misma máquina, en el mismo HDD, etc. No importa cómo 466G difiere de la comercialización de 500G. El problema es que difiere para diferentes FS '.
Acerca de df: muestra el tamaño total de FS, el tamaño utilizado y el espacio libre. En este caso tengo:
para reiserfs:
/ dev / sda1 466G 33M 466G 1% / mes
para ext4:
/ dev / sda1 459G 198M 435G 1% / mes
Si desactivo la reserva de bloqueo de raíz, 435G cambia a 459G - tamaño completo de fs (menos 198M). ¡Pero fs en sí mismo sigue siendo 459G para ext4 y 466G para reiser!
UPD2: llenado de volúmenes con datos reales a través de dd:
reiserfs:
fs: ~ # dd if = / dev / zero of = / mnt / 1 dd: запись в «/ mnt / 1»: На устройстве кончилось место 975702649 + 0 записей считано 975702648 + 0 записей написано скопировано 499559755776 байт (500 GB), 8705,61 c, 57,4 MB / c
ext2 con la reserva de bloques desactivada (mke2fs -m 0):
fs: ~ # dd if = / dev / zero of = / mnt / 1 dd: запись в «/ mnt / 1»: На устройстве кончилось место 960356153 + 0 записей считано 960356152 + 0 записей написано скопировано 491702349824 байта (492 GB), 8870,01 c, 55,4 MB / c
Perdón por el ruso, pero lo ejecuté en la configuración regional predeterminada y repetirlo es demasiado largo. No importa, la salida dd es obvia.
Entonces, resulta que mke2fs realmente crea un sistema de archivos más pequeño que otros mkfs.
LANG=C foo
oLC_ALL=C foo
Respuestas:
Hay dos razones por las que esto es cierto.
Primero, por alguna razón u otros escritores del sistema operativo todavía informan el espacio libre en términos de un sistema base 2, y los fabricantes de discos duros informan el espacio libre en términos de un sistema base 10. Por ejemplo, un escritor del sistema operativo llamará a 1024 bytes (2 ^ 10 bytes) por kilobyte, y un fabricante de disco duro llamaría a 1000 bytes por kilobyte. Esta diferencia es bastante menor para los kilobytes, pero una vez que llega a los terabytes, es bastante significativa. Un escritor del sistema operativo llamará a 1099511627776 bytes (2 ^ 40 bytes) un terabyte, y un fabricante de disco duro llamará a 1000000000000 bytes un terabyte.
Estas dos formas diferentes de hablar sobre los tamaños con frecuencia generan mucha confusión.
Hay un prefijo ISO muy compatible para tamaños binarios . Las interfaces de usuario diseñadas con el nuevo prefijo en mente mostrarán TiB, GiB (o más generalmente XiB) cuando muestren tamaños con un sistema de prefijos de base 2.
En segundo lugar, df -h informa cuánto espacio está disponible para su uso. Todos los sistemas de archivos tienen que escribir información de mantenimiento para realizar un seguimiento de las cosas por usted. Esta información ocupa parte del espacio en su disco. En general, no mucho, pero algunos. Eso también explica parte de la aparente pérdida que estás viendo.
Después de que haya editado su publicación para dejar en claro que ninguna de mis respuestas responde realmente a su pregunta, intentaré responder su pregunta ...
Los diferentes sistemas de archivos utilizan diferentes cantidades de espacio para la información de limpieza e informan el uso del espacio de diferentes maneras.
Por ejemplo, ext2 divide el disco en grupos de cilindros. Luego, asigna previamente espacio en cada grupo de cilindros para inodos y mapas de espacio libre. ext3 hace lo mismo ya que es básicamente un diario ext2 +. Y ext4 también hace exactamente lo mismo, ya que es una modificación bastante sencilla (y casi compatible con versiones anteriores) de ext3. Y dado que esta sobrecarga de metadatos se fija en la creación del sistema de archivos o en el cambio de tamaño, no se informa como espacio 'usado'. Sospecho que esto también se debe a que los metadatos del grupo de cilindros están en lugares fijos en el disco, por lo que simplemente se implica que se usan y, por lo tanto, no se marcan ni se tienen en cuenta en los mapas de espacio libre.
Pero reiserfs no asigna previamente metadatos de ningún tipo. No tiene un límite de inodo fijo en la creación del sistema de archivos porque asigna todos sus inodos sobre la marcha como lo hace con los bloques de datos. A lo sumo, necesita algunas estructuras que describan el directorio raíz y un mapa de espacio libre de algún tipo. Por lo tanto, utiliza mucho menos espacio cuando no tiene nada.
Pero esto significa que reiserfs ocupará más espacio a medida que agrega archivos porque asignará metadatos (como inodos), así como el espacio de datos real para el archivo.
No sé exactamente cómo jfs y btrfs rastrean el uso del espacio de metadatos. Pero sospecho que lo rastrean más como lo hace reiserfs. vfat en particular no tiene ningún concepto de inodo en absoluto. Su mapa de espacio libre (cuyo tamaño se fija en la creación del sistema de archivos (la infame tabla FAT)) almacena gran parte de los datos que almacenaría un inodo, y la entrada del directorio (que se asigna dinámicamente) almacena el resto.
fuente
Además de los problemas que menciona Omnifarious, con ext2 / 3/4 se reserva una cierta cantidad de espacio para root: este espacio reservado no se muestra en la salida de df.
Por ejemplo, crear un pequeño sistema de archivos (~ 100mb) con opciones predeterminadas, usando ext2 en lugar de 3 o 4 para ignorar el espacio que de otro modo ocuparía el diario:
Ajustar la opción de bloques reservados (
tune2fs
la-m
opción establece los bloques reservados como un porcentaje, y la-r
opción establece los bloques reservados como un número directo de bloques):Como puede ver en el ejemplo anterior, incluso cuando inició sesión como root
df
no muestra el espacio reservado en el recuento "Disponible". El espacio reservado tampoco se muestra en el recuento "Usado", ya sea que haya iniciado sesión como root o como un usuario menos privilegiado. Esto a veces puede causar confusión cuando un sistema de archivos está casi lleno si no espera estos dos hechos.También tenga en cuenta que
tune2fs
, a pesar de su nombre, es relevante para los sistemas de archivos ext3 y ext4, así como para los sistemas ext2.fuente
Acerca de la diferencia entre los sistemas de archivos, los diferentes sistemas de archivos organizan los bloques de manera diferente y necesitan más o menos datos para identificar y realizar un seguimiento de los bloques. El tamaño del bloque también hace la diferencia, ya que si tiene más o menos bloques para el mismo espacio, tiene más o menos espacio "perdido". Además, los sistemas de archivos agrupan bloques para evitar la fragmentación de archivos y cada grupo de bloques tiene un identificador de algún tamaño, por lo que más o menos grupos de bloques utilizarán un espacio físico diferente en el disco. Entonces, la diferencia está en cómo el sistema de archivos organiza el espacio físico.
Aquí hay una descripción de ext2 y probablemente pueda encontrar algo similar para reiserfs, pero nunca lo he usado, así que no tengo ninguno.
fuente