Como o Linux sabe a localização dos dados do arquivo no disco

5

relacionado a: O que é um Superblock, o Inode , Dentry e um arquivo?

Nenhuma das estruturas de metadados famosas mantém dados de localização para o arquivo real. Dentry mapeia nomes para inodes e 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 inteiros de inode na localização do disco?

    
por naftalimich 01.05.2013 / 19:04

2 respostas

6

Dado o vasto conjunto de sistemas de arquivos existentes, tenho certeza de que existem exceções, mas tradicionalmente o inode tinha 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 de struct ext3_inode , vejo um membro i_block[EXT3_N_BLOCKS];/* Pointers to blocks */

Diferentes sistemas de arquivos tiveram maneiras diferentes de rastrear quais blocos de disco pertencem a um inode (a estrutura de dados em disco que representa os dados do arquivo). Alguns têm uma matriz de números de blocos, alguns têm uma matriz de execuções ou extensões, uma contagem mais o número inicial de blocos de uma série de blocos contíguos. O Berkeley FFS inode possuía uma matriz de números de blocos e uma matriz de números de blocos, cada um desses blocos continha números de blocos de dados e um número de bloco que continha números de blocos que continham números de blocos de dados.

A coisa toda fica um pouco mais estranha para "sistemas de arquivos estruturados em log", mas essas são a exceção e não a regra.

    
por 01.05.2013 / 19:24
1

Se você procurar nas fontes do kernel (ou em um pacote de documentação do kernel, ou na web), olhe em Documentation / filesystems, 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 de mkfs - que é então lido. O inode contém muitos metadados, incluindo doze ponteiros dizendo onde os dados reais do arquivo são armazenados. Se houver mais de doze fragmentos, há um ponteiro para um bloco indireto (que armazena muito mais). Blocos indiretos podem ser encadeados (cada um tem um ponteiro para o próximo bloco indireto).

O superbloco é armazenado em um deslocamento fixo desde o início da partição, então é fácil encontrá-lo. (o mkfs também cria superblocos de backup)

Você pode estar interessado no formato btrfs no disco , ele ainda tem imagens , embora essa documentação seja menos completa que a documentação do ext2.

    
por 01.05.2013 / 19:20