relacionado a:O que é um Superblock, Inode, Dentry e um Arquivo?
Nenhuma das famosas estruturas de metadados mantém os dados de localização do arquivo real. Dentry mapeia nomes para inodes, e os inodes armazenam informações sobre os arquivos – como o sistema sabe onde os bits de dados reais do arquivo estão localizados no disco? Existe algum tipo de mapeamento padrão de números inteiros de inode para localização do disco?
Responder1
Dada a vasta gama de sistemas de arquivos existentes, tenho certeza de que existem exceções, mas tradicionalmente, o inode continha uma matriz de números de blocos de disco.
Por exemplo, em /usr/include/linux/ext3_fs.h
, vejo uma definição de struct ext3_inode
.
Dentro struct ext3_inode
, vejo um membroi_block[EXT3_N_BLOCKS];/* Pointers to blocks */
Diferentes sistemas de arquivos têm diferentes maneiras de controlar quais blocos de disco pertencem a um inode (a estrutura de dados no disco que representa os dados do arquivo). Alguns possuem uma matriz de números de bloco, alguns possuem uma matriz de execuções ou extensões, uma contagem mais o número do bloco inicial de uma execução de blocos contíguos. O inode Berkeley FFS tinha uma matriz de números de bloco e uma matriz de números de bloco, cada um desses blocos continha números de bloco de dados e um número de bloco que continha números de bloco que continha números de bloco de dados.
A coisa toda fica um pouco mais estranha para "sistemas de arquivos estruturados em log", mas esses são a exceção e não a regra.
Responder2
Se você procurar nas fontes do kernel (ou em um pacote de documentos do kernel, ou na web), procure em Documentação/sistemas de arquivos, isso varia de acordo com o sistema de arquivos.
Por exemplo, com ext2 um número de inode pode ser traduzido usando informações armazenadas no superbloco para um determinado deslocamento na partição – uma das razões pelas quais ext2 aloca um número fixo de inodes no tempo mkfs – que é então lido. O inode contém muitos metadados, incluindo doze ponteiros que indicam onde os dados reais do arquivo estão armazenados. Se houver mais de doze fragmentos, existe um ponteiro para um bloco indireto (que armazena muito mais). Os blocos indiretos podem ser encadeados (cada um possui um ponteiro para o próximo bloco indireto).
O superbloco é armazenado em um deslocamento fixo desde o início da partição, por isso é fácil de encontrar. (mkfs também cria superblocos de backup)
Você pode estar interessado noformato btrfs no disco, tem atéfotos, embora essa documentação seja menos completa que a documentação do ext2.