¿Cómo sabe Linux la ubicación de los datos del archivo en el disco?

¿Cómo sabe Linux la ubicación de los datos del archivo en el disco?

relacionado con:¿Qué es un Superbloque, un Inodo, un Dentry y una Lima?

Ninguna de las estructuras de metadatos famosas conserva los datos de ubicación del archivo real. Dentry asigna nombres a inodos, y los inodos almacenan información sobre los archivos. ¿Cómo sabe el sistema dónde se encuentran los bits de datos reales del archivo en el disco? ¿Existe algún tipo de asignación predeterminada de números enteros de inodo a la ubicación del disco?

Respuesta1

Dada la amplia gama de sistemas de archivos que existen, estoy seguro de que existen excepciones, pero tradicionalmente, el inodo tenía una serie de números de bloques de disco.

Por ejemplo, en /usr/include/linux/ext3_fs.h, veo una definición de struct ext3_inode.

Adentro struct ext3_inodeveo a un miembroi_block[EXT3_N_BLOCKS];/* Pointers to blocks */

Los diferentes sistemas de archivos han tenido diferentes formas de realizar un seguimiento de qué bloques de disco pertenecen a un inodo (la estructura de datos en el disco que representa los datos del archivo). Algunos tienen una serie de números de bloque, otros tienen una serie de ejecuciones o extensiones, un recuento más el número de bloque inicial de una ejecución de bloques contiguos. El inodo Berkeley FFS tenía una matriz de números de bloque y una matriz de números de bloque, cada uno de esos bloques contenía números de bloque de datos y un número de bloque que contenía números de bloque de datos.

Todo se vuelve un poco más extraño para los "sistemas de archivos estructurados por registros", pero son la excepción y no la regla.

Respuesta2

Si busca en las fuentes del kernel (o en un paquete de documentación del kernel, o en la web), busque en Documentación/sistemas de archivos, varía según el sistema de archivos.

Por ejemplo, con ext2 un número de inodo se puede traducir usando información almacenada en el superbloque a un cierto desplazamiento en la partición (una de las razones por las que ext2 asigna un número fijo de inodos en el momento mkfs) que luego se lee. El inodo contiene una gran cantidad de metadatos, incluidos doce punteros que indican dónde se almacenan los datos del archivo real. Si hay más de doce fragmentos, hay un puntero a un bloque indirecto (que almacena muchos más). Los bloques indirectos se pueden encadenar (cada uno tiene un puntero al siguiente bloque indirecto).

El superbloque se almacena en un desplazamiento fijo desde el inicio de la partición, por lo que es fácil de encontrar. (mkfs también crea superbloques de respaldo)

Quizás te interese elformato btrfs en disco, incluso tienefotos, aunque esa documentación es menos completa que los documentos ext2.

información relacionada