2 votos

¿MacOS obtiene el "tamaño asignado" de un archivo desde el terminal?

Estoy en un Macbook Pro que ejecuta MacOS 12.2.1 (por lo que utiliza el sistema de archivos APFS).

Me he dado cuenta de un comportamiento extraño al crear un "archivo ficticio" de gran tamaño utilizando el mkfile utilidad. ( /usr/sbin/mkfile )

He creado un archivo de 5 GB con el comando

mkfile -n 5g test.txt

Luego, para confirmar que funcionaba, ejecuté el programa du comando. ( /usr/bin/du ).

du -hs ./test.txt

Pero obtuve un resultado inesperado:

4.0K    ./test.txt

Fui al archivo en Finder y miré la información del archivo, y vi que había dos tamaños diferentes. Top line highlighted displays the size as 5 Gigabytes. However, further down it displays the text: "4 KB on disk"

Después de indagar un poco más, encontré esta información en el mkfile página de manual:

OPTIONS
     -n     Create an empty filename.  The size is noted, but disk blocks aren't
            allocated until data is written to them.

Así que quería saber, ¿hay un comando que me permita ver el asignado ¿Tamaño del archivo?

1voto

Phill Puntos 126

Visualización del tamaño del archivo asignado frente al tamaño del archivo informado por el sistema de archivos

Puede mostrar el tamaño de archivo asignado es decir, cuánto espacio de disco test.txt ocupa en el sistema de archivos, con este comando:

du -h test.txt

En cambio, el tamaño del archivo reportado por el sistema de archivos puede coincidir o no con el tamaño del archivo asignado. Para mostrarlo, utilice este comando:

ls -l test.txt

(Puede utilizar ls -lh test.txt en su lugar si prefiere que el tamaño del archivo sea más legible).

Archivos dispersos

¿Cómo es que test.txt ocupa sólo 4KB de espacio en disco, pero el sistema de archivos informa que su tamaño es de 5GB?

Esta es una funcionalidad inteligente que ofrecen (la mayoría) de los sistemas de archivos: en lugar de gastar tiempo y espacio en disco para crear un archivo que no contiene datos, es más eficiente crear un archivo vacío, establecer sus metadatos para informar de 5BG de tamaño, y sólo asignar espacio en disco cuando se añaden datos reales al archivo.

Y eso es lo que el -n opción de mkfile es todo:

  • Si utiliza mkfile -n creará un archivo disperso, que es algo similar a comprar un billete de tren sin reservar asiento . La compañía de trenes no le reservará ningún asiento (es decir, no se le asignará ningún asiento).

  • Sin embargo, si utiliza mkfile sin el -n opción, por ejemplo:

    mkfile 5g test.txt

    se creará el archivo y se asignarán 5GB, de forma similar a comprar un billete de tren y reservar un asiento El asiento está reservado para usted y nadie más que usted puede utilizarlo (es decir, el asiento está asignado).

Resumiendo, al crear un archivo, el espacio en disco puede ser cualquiera:

  • ser asignado (es decir, reservado en el sistema de archivos para que ningún otro archivo pueda utilizarlo) lo que, por ejemplo, puede ayudar a evitar que el archivo se fragmente
  • o, alternativamente, puede solicitar que no se asigne el espacio en disco, lo que creará un archivo disperso. Un archivo disperso es eficiente, porque sólo ocupa espacio en disco cuando contiene datos.

Como señala nohillside en su comentario, puede "llenar" el archivo disperso con datos utilizando dd por ejemplo:

dd if=/dev/zero of=test.txt bs=1024k count=5120

para que el tamaño del archivo asignado y el tamaño del archivo informado por el sistema de archivos coincidan.

Para más información sobre los archivos dispersos, consulte: https://en.wikipedia.org/wiki/Sparse_file .

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X