Simplemente algo con lo que me encontré y no pude pensar en una explicación adecuada. Si creo un archivo * .txt vacío en mi PC y luego miro su tamaño, muestra 0. Pero, ¿cómo es eso posible? Quiero decir, incluso si el archivo en sí está vacío, aún debe tener algún tamaño, solo para almacenar su propio nombre. ¿Cómo se puede explicar esto? (No específico del sistema operativo)
filesystems
Eugene S
fuente
fuente
Respuestas:
Es posible porque realmente no hay archivo. Solo hay una entrada de directorio con un nombre y un propietario. La entrada del directorio es lógicamente distinta del archivo. Por ejemplo, el mismo archivo puede tener más de un nombre en más de un directorio.
Desafortunadamente, el término "archivo" no siempre se usa para significar exactamente lo mismo. Pero la lógica del tamaño del archivo proviene del modelo donde una entrada de directorio "adjunta" un archivo a un directorio y los nombres de archivo y los metadatos relacionados se almacenan en el directorio.
fuente
ls -ld <directory>
funcionarán.El significado semántico de "tamaño de archivo" es diferente del que está utilizando.
Hay muchos tamaños de archivo que son significativos. El más común, y el que está viendo aquí, es "el número de bytes en el archivo". Si el archivo es un archivo de texto vacío, puede contener 0 bytes. Este número es importante para los programadores porque a menudo necesitamos abrir un archivo, "leer todos los datos" y cerrarlo. Necesitamos saber cuántos bytes de datos habrá en el archivo para poder planificar con anticipación.
Otro significado surge de la forma en que la mayoría de los sistemas de archivos almacenan datos. La mayoría de los sistemas de archivos almacenan datos en bloques. Por ejemplo, el sistema de archivos puede almacenar datos en bloques de 64kB, lo que significa que nunca asignará nada que no sea incluso un múltiplo de 64kB. Esto suena ineficiente, pero puede hacer que la contabilidad sea mucho más simple y, a menudo, más simple significa más rápido.
Un tercer significado, al que está tirando, sería la cantidad real de bits necesarios en el disco duro para describir la presencia de un archivo. Esto incluye información que generalmente se almacena por separado del archivo. Por ejemplo, en Linux, el concepto del "nombre de archivo" se almacena en el inodo del directorio que contiene el archivo (editar: de los comentarios, técnicamente esto se almacena en los datos del directorio. Cuando escribí esto, estaba pensando en el pequeño -directory case. Los datos de menos de 156 bytes se pueden almacenar directamente en el inodo). Este no es un significado comúnmente usado, porque es terriblemente difícil de determinar sin conocer el funcionamiento interno tremendamente profundo de su sistema de archivos (¿explicó el espacio necesario para almacenar todos los permisos en el archivo?). Sin embargo, si tiene un disco duro de 1,000,000 bytes,
fuente
El nombre del archivo se almacena en otro lugar.
Su disco tendrá un "sistema de archivos", simplemente un método para elegir cómo se representan e interpretan los nombres y los archivos en el disco físico.
En la mayoría de los discos de Windows, utilizará un sistema de archivos llamado "NTFS" (Sistema de archivos de nueva tecnología "), que almacena la información del nombre de archivo en la Tabla maestra de archivos (MFT) separada del contenido del archivo. Consulte el artículo de Wikipedia en la Tabla maestra de archivos .
Por lo tanto, el archivo en sí tendrá una longitud de 0 bytes, pero su entrada en la MFT todavía ocupará algo de espacio.
fuente
Esta es una pregunta ontológica bastante interesante ...
El archivo en sí es el contenido del archivo. Si el archivo no tiene contenido, tiene un tamaño de cero. El nombre del archivo es tanto una parte del archivo como su propio nombre es físicamente una parte de usted (es decir, no lo es).
Así como su nombre existe como una idea en la cabeza de las personas (y la suya propia) que se refiere / señala al físico, el nombre del archivo existe en el árbol de directorios del sistema de archivos y se refiere / señala al archivo.
fuente
(Un poco tarde para la respuesta ...)
¿Cómo puede un archivo ser de tamaño cero? Es un poco más complicado que el proporcionado por las respuestas anteriores. La pregunta está etiquetada como Win7, pero mirar otros sistemas de archivos "más simples" como FAT o NTFS puede ser útil ya que los conceptos son similares.
El disco no "sabe" qué es un archivo y qué es un directorio; son todos datos en pequeños bloques. El sistema operativo distingue entre el significado de los bloques de datos. Los primeros son especiales, pero el resto de los bloques contienen información sobre los datos (por ejemplo: nombre del archivo, longitud del archivo, primer bloque de datos que contiene los datos) o los datos en sí.
Un directorio es un "archivo" especial cuyos "datos" entiende el sistema operativo es un bloque de información que contiene información sobre archivos, no el contenido de los archivos. Una buena analogía es una biblioteca física y el catálogo de tarjetas. Piense en los bloques de información como el catálogo de tarjetas y los estantes como los bloques de datos (el catálogo de tarjetas también se encuentra en una estructura similar a un estante).
Cuando "crea" un archivo (digamos con el
touch
comando UNIX ), el sistema operativo primero crea una entrada en un bloque de información (directorio), con lo siguiente:Solo si hay algunos datos para "escribir", intenta encontrar un bloque de datos vacío para almacenar los datos. Pero los bloques de datos vienen en tamaños fijos (digamos 32K) convenientes para el disco y el sistema operativo para leer. Si solo escribe "Hola", la mayor parte del bloque está "vacío" (en realidad puede no ser ceros, sino basura de lo que estaba allí antes), por lo que la tabla ahora también actualiza el tamaño a la longitud (digamos 5 caracteres + Fin de Archivo) para que no obtenga las cosas malas.
Cuando actualiza el "archivo" a una longitud> tamaño de bloque, el sistema operativo escribe los datos en el nuevo bloque y actualiza un bloque de datos para decir que el archivo continúa en el siguiente bloque DESPUÉS del primero (y así sucesivamente) y la longitud se actualiza. nueva longitud (los detalles difieren).
Lo que termina es una colección de bloques de datos de información (directorios o listas) con información sobre las cadenas de bloques de datos (contenido del archivo).
Lógicamente, esto también explica por qué un movimiento de archivo en el mismo sistema de archivos parpadea rápidamente mientras que una copia lleva mucho tiempo. El sistema operativo solo tiene que editar 2 bloques de directorio para eliminar la entrada de un directorio (bloque de datos de información) y agregar a otro. Eliminar un archivo: simplemente elimine la entrada en el bloque de directorio, liberando los bloques de datos del archivo para ser reasignados.
ps: el hecho de que el catálogo de tarjetas tenga una entrada para un libro no significa que esté en el estante (tal vez extraído o perdido); tamaño de archivo 0.
pps: Un libro fuera de lugar dentro de la biblioteca implica buscar en la biblioteca, o en términos de computadora: ¡chkdsk o reparar el disco!
Se puede obtener una mayor comprensión leyendo acerca de los inodos de UNIX o apreciando cómo los sistemas de control de versiones (ClearCase, TFS, Git, etc.) manejan no solo archivos y directorios, sino también versiones de archivos e incluso versiones de directorios. ¡En la mayoría de los casos, todo se almacena en una base de datos y se presenta al usuario para que aparezca como archivos y estructura de directorios clásicos!
fuente
Tenemos algunas respuestas excelentes aquí: solo agregaría la versión de la imagen (mil palabras y todo eso).
Así es como se ve uno de mis discos duros con formato NTFS si lo visualiza con una herramienta de desfragmentación de disco. La MFT (tabla maestra de archivos) se muestra en violeta:
Ese pequeño cuadrado violeta describe la lista de archivos presentes en mi HD. En términos generales es, para un disco NTFS, lo que la tabla de contenido es para un libro; en lugar de páginas, apunta a su ubicación física en el resto del disco 1 .
Un archivo con un tamaño de cero bytes se puede visualizar como una entrada de Tabla de contenido que no apunta a ninguna página:
La entrada está allí, en la lista, pero como no se indica ninguna página, podemos suponer que el contenido no existe.
1 - Seguramente, es un poco más complicado que eso; pero puntos como mapas sectoriales, MFT espejo, etc. están fuera del alcance de estas preguntas.
fuente
Los sistemas de archivos almacenan una gran cantidad de información sobre un archivo, como el nombre del archivo, el tamaño del archivo, el tiempo de creación, el tiempo de acceso, el tiempo modificado, el usuario creado, los permisos de usuarios y grupos, los fragmentos, el puntero a los clústeres que almacenan el archivo, los enlaces duros / blandos, los atributos ... Esos se llaman metadatos de archivo . ¿Por qué cuenta esos metadatos en el tamaño del archivo cuando los usuarios no (necesitan) preocuparse por ellos y no los conocen? Realmente solo les importa el contenido del archivo
Además, cada sistema de archivos almacena diferentes tipos de metadatos que ocupan diferentes cantidades de espacio en el disco. Por ejemplo, los permisos POSIX son muy diferentes de los permisos NTFS, y también hay
inode
números en POSIX que no existen en Windows. Incluso los sistemas de archivos POSIX varían mucho, como ext3 con dirección de bloque de 32 bits, ext4 con 48 bits, Btrfs con 64 bits y ZFS con dirección de 128 bits. Entonces, ¿cómo contará esos metadatos en el tamaño del archivo?Tome otro ejemplo con un archivo de 100 bytes cuyos metadatos consumen 56 bytes en el sistema de archivos actual. Copiamos el archivo a otro sistema de archivos y ahora requiere 128 bytes de metadatos. Sin embargo, el contenido del archivo es exactamente el mismo , el número de bytes en los archivos también es el mismo. Por lo tanto, mostrar el tamaño del archivo como 156 bytes en un sistema pero 228 bytes en otro es muy confuso y contra intuitivo .
fuente
Un tamaño de archivo de
0
, es similar a decir: Tengo un papel con5
palabras. Y en otro papel, tiene0
palabras. Entonces0
es completamente posible.Los metadatos del archivo (fecha y hora de creación, fecha y hora de la última modificación, propietario del archivo, permisos) se almacenan en cualquier otro lugar y no se incluyen como parte del tamaño del archivo.
fuente
Comprenda de manera simple ... cuando crea un archivo ... se genera una entrada de directorio que funciona como un puntero para la ubicación de la memoria del archivo identificado por el nombre de archivo que proporciona. El tamaño del directorio aumenta a medida que crea más y más punteros o dice archivos ... mientras que el tamaño del archivo aumentará solo si coloca algunos datos en el lugar señalado, es decir, dentro del propio archivo. Hasta entonces el tamaño será cero. :)
fuente
Así es como funciona:
Tan pronto como crea un archivo en un volumen, crea un registro de archivo en el archivo NTFS mata, es decir, $ MFT (tabla de archivos maestros). Como hay un FRS (segmento de registro de archivo) presente en la MFT, verá un registro. Cada registro de archivo tiene un tamaño de 1 KB por defecto en el caso de NTFS FileSystem. Pero ese espacio solo se reclama si almacena alguna información dentro del archivo. Aunque solo escriba una letra "a" considerando que es un archivo de texto, reclamará 1 KB de espacio porque ese es el tamaño predeterminado del FRS. La letra "a" va al flujo de datos predeterminado y sin nombre de ese FRS, $ Data, que es un atributo donde va todo su dato si no tiene un ADS (flujo de datos alternativo).
Avísame si tienes alguna pregunta.
fuente