A tabela de inodes é mantida na memória?

3

Entendo que o Linux localiza um arquivo no disco usando a tabela de inode. O sistema de arquivos do Linux mantém a tabela de inode na memória? Isso seria o mesmo, independentemente de ext2, ext3 ou ext4?

Por acaso, alguém está ciente de uma boa referência que descreva isso?

    
por RG_Simpleton 18.09.2017 / 05:48

3 respostas

2

Isso já foi abordado aqui: A tabela de arquivos está no sistema de arquivos ou na memória?

Isso parece ser bem completo. Mas ainda é uma boa pergunta. Como você pode ver, a pergunta é na verdade mais granular do que sua pergunta sugere.

link que é uma explicação mais técnica que parece cobrir a mesma pergunta, com a mesma resposta, existem tabelas de inode na memória e no disco, tipos diferentes, se eu ler direito. Isso é de 2008, mas eu suspeito que, pelo menos para os sistemas de arquivos ext, não mudou muito, embora eu não tenha certeza disso.

A explicação do kernel antigo é realmente muito boa:

An ordinary file is just a sequence of data bytes stored in some physical device without any name attached to it. The administrative information of this file, such as owner, permissions, size, times, etc., is stored in the inode structure of the file. All of the file system's inodes are collected together to form an inode table. Each file system occupies a logical disk. Starting from the $2^{nd}$ block of a logical disk, the kernel stores the inode table of the file system in a consecutive disk blocks. Each inode, an entry in the inode table, is a data structure which the system uses to store the following information about a file:

....

Finally, there is one more inode structure defined in the Linux source tree (include/linux/fs.h). This is the In-Core inode, i.e. the inode structure loaded in the memory. When loading this In-Core inode, the relative disk inode information is filled in its relative fields.

    
por 18.09.2017 / 05:52
1

Linux (e na verdade qualquer outro Unix) não precisa de inode para localizar o arquivo no disco, a operação de pesquisa só precisa de entradas de diretório ( dentry ), ou seja, para o caminho é /foo/bar , a rotina de pesquisa precisará acessar a barra "dentry" localizada no diretório "foo".

Existe uma camada de sistema de arquivos cruzados no kernel do Linux que armazena as entradas de diretório que são chamadas de cache de entrada de diretório ou dcache para breve. No entanto, ele também mantém os ponteiros para inode de objetos. Ele é descrito no filesystems / vfs.txt do kernel:

The VFS implements the open(2), stat(2), chmod(2), and similar system calls. The pathname argument that is passed to them is used by the VFS to search through the directory entry cache (also known as the dentry cache or dcache). This provides a very fast look-up mechanism to translate a pathname (filename) into a specific dentry. Dentries live in RAM and are never saved to disc: they exist only for performance.

The dentry cache is meant to be a view into your entire filespace. As most computers cannot fit all dentries in the RAM at the same time, some bits of the cache are missing. In order to resolve your pathname into a dentry, the VFS may have to resort to creating dentries along the way, and then loading the inode. This is done by looking up the inode.

    
por 20.09.2017 / 18:07
0

Em geral, o Linux carrega apenas um inode na memória quando o arquivo é aberto. Os dados podem persistir no formulário atualizado na memória por algum tempo depois que um arquivo é fechado antes de ser liberado para o disco (via lógica de cache) ou marcado em desuso.

É um padrão de uso freqüente de sistemas de arquivos para alguns arquivos serem abertos e fechados repetidamente. Há eficiência a ser obtida ao não reler o inode em reabertura subseqüente.

A referência autoritativa é o código-fonte do kernel do Linux. O diretório de origem / documentação na árvore de origem geralmente tem detalhes como você está procurando, mas pode não estar completamente atualizado para corresponder à origem.

    
por 18.09.2017 / 06:20