¿Cómo sabe Linux la location de los datos de file en el disco?

relacionado con: ¿Qué es un Superblock, Inode, Dentry y un file?

Ninguna de las famosas estructuras de metadatos se aferran a los datos de location del file real. Dentry asigna nombres a inodos e inodos almacenan información sobre los files. ¿Cómo sabe el sistema dónde se encuentran los bits de datos reales del file en el disco? ¿Existe algún tipo de mapeo pnetworkingeterminado de integers de inodo en la location del disco?

Dada la amplia gama de filesystems que existen, estoy seguro de que existen excepciones, pero tradicionalmente, el inodo tenía una matriz de numbers de bloques de disco.

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

Dentro de struct ext3_inode , veo un miembro i_block[EXT3_N_BLOCKS];/* Pointers to blocks */

Los diferentes filesystems han tenido diferentes forms de hacer un seguimiento de qué bloques de discos pertenecen a un inodo (la estructura de datos en disco que representa los datos del file). Algunos tienen una matriz de numbers de bloque, algunos tienen una serie de ejecuciones o extensiones, un conteo más el número de bloque inicial de una ejecución de bloques contiguos. El inodo de FFS de Berkeley tenía una matriz de numbers de bloque y una matriz de numbers de bloque, cada uno de esos bloques contenía numbers de bloque de datos y un número de bloque que contenía numbers de bloque que contenían numbers de bloque de datos.

Todo se vuelve un poco más extraño para "filesystems estructurados de logging", pero esos son la exception en lugar de la regla.

Si busca en las fonts del kernel (o en un package de doc kernel, o en la web), busque en Documentation / filesystems, varía según el sistema de files.

Por ejemplo, con ext2 se puede traducir un número de inodo usando la 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 a mkfs de time, que luego se lee. El inodo contiene una gran cantidad de metadatos, incluidos doce indicadores que indican dónde se almacenan los datos reales del file. Si hay más de doce fragments, hay un puntero a un bloque indirecto (que almacena mucho 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 crea supermanzanas de respaldo también)

Puede que le interese el formatting btrfs en disco , incluso tiene imágenes , aunque esa documentation es less completa que los documentos ext2.