Melhor resposta
Resumindo
Cada sistema de arquivos possui um superbloco, que contém informações sobre o sistema de arquivos, como:
- Tipo de sistema de arquivos
- Tamanho
- Status
- Informações sobre outras estruturas de metadados
Em detalhes
O superbloco é uma estrutura que representa um sistema de arquivos. Inclui as informações necessárias para gerenciar o sistema de arquivos durante a operação. Inclui o nome do sistema de arquivos (como ext4), o tamanho do sistema de arquivos e seu estado, uma referência ao dispositivo de bloco e informações de metadados (como listas gratuitas e assim por diante). O superbloco é normalmente armazenado no meio de armazenamento, mas pode ser criado em tempo real se não existir. Você pode encontrar a estrutura do superbloco em ./linux/include/linux/fs.h.
Um elemento importante do superbloco é uma definição das operações do superbloco. Esta estrutura define o conjunto de funções para gerenciar inodes dentro do sistema de arquivos. Por exemplo, inodes podem ser alocados com alloc\_inode
ou excluídos com destroy\_inode
. Você pode ler e gravar inodes com read\_inode
e write\_inode
ou sincronizar o arquivo sistema com sync\_fs
. Você pode encontrar a estrutura super\_operations
em ./linux/include/linux/fs.h. Cada sistema de arquivos fornece seus próprios métodos inode, que implementam as operações e fornecem a abstração comum para a camada VFS.
Estrutura física
A estrutura física dos sistemas de arquivos Ext2 foi fortemente influenciada pelo layout do sistema de arquivos BSD. Um sistema de arquivos é composto de grupos de blocos. Os grupos de blocos são análogos aos grupos de cilindros BSD FFS. No entanto, os grupos de blocos não estão vinculados ao layout físico dos blocos no disco, já que os drives modernos tendem a ser otimizados para acesso sequencial e ocultar sua geometria física para o sistema operacional.
,---------+---------+---------+---------+---------,
| Boot | Block | Block | ... | Block |
| sector | group 1 | group 2 | | group n |
`---------+---------+---------+---------+---------"
Cada grupo de blocos contém uma cópia redundante de informações cruciais de controle do sistema de arquivos (superbloco e o sistema de arquivos descritores) e também contém uma parte do sistema de arquivos (um bitmap de bloco, um bitmap de inode, uma parte da tabela de inode e blocos de dados). A estrutura de um grupo de blocos é representada nesta tabela:
,---------+---------+---------+---------+---------+---------,
| Super | FS | Block | Inode | Inode | Data |
| block | desc. | bitmap | bitmap | table | blocks |
`---------+---------+---------+---------+---------+---------"
Usar grupos de blocos é uma grande vitória em termos de confiabilidade: como as estruturas de controle são replicadas em cada grupo de blocos, é e asy recuperar de um sistema de arquivos onde o superbloco foi corrompido. Esta estrutura também ajuda a obter bons desempenhos: reduzindo a distância entre a tabela de inode e os blocos de dados, é possível reduzir as buscas da cabeça do disco durante a I / O nos arquivos.
Referência: – Sistemas de arquivos estendidos (Ext, Ext2, Ext3)
Resposta
Os sistemas de arquivos no Linux operam em várias camadas: A) a conjunto de rotinas primitivas para interagir com o dispositivo (ou seja, o driver), B) um conjunto de registros no disco correspondente ao que chamamos de arquivos, e C) informações de metadados sobre cada arquivo que são denominados inodes, havendo 1 inode para cada arquivo. Esses inodes rastreiam coisas como quais são os atributos do seu arquivo, como ler / gravar em seus arquivos são definidos, etc.
Acontece que esta é apenas uma imagem incompleta. Isso é antes de cada tipo de sistema de arquivos poder escolher organizar seus inodes da maneira que quiser no disco. Até mesmo a representação dos inodes no disco pode variar entre diferentes sistemas de arquivos – o que importa é apenas que view o VFS é fornecido com as estruturas de inode. Portanto, o Linux não sabe por si mesmo como os arquivos / inodes individuais em um sistema de arquivos podem ser acessados.
O problema é resolvido de forma organizada pelo uso da estrutura struct file\_system e struct super\_block tipos. O último vive no disco, enquanto o primeiro vive apenas na memória. Quando você monta um sistema de arquivos usando, digamos,
mount -t ext4 / dev / usb1 / mnt / usb1
o objeto file\_system que define o tipo ext4 contém um mount () rotina que especifica como ler o objeto superbloco do disco. Este objeto de superbloco especifica tudo que você precisa para acessar (alocar, deletar, ler, corrigir, sincronizar entre o dispositivo e a memória, etc) os inodes no dispositivo.Depois que esse objeto de superbloco é buscado na memória, usamos suas operações lookup () para ler os inodes do disco na memória. Em seguida, usamos esses inodes por sua vez para chegar aos sistemas de arquivos. É hierárquico, realmente, e muito legal nisso!