O que são metadados e como eles ajudam no processo "fsck"?

8

Se eu entendi direito, "fsck" é usado nos sistemas UNIX para verificar a consistência interna dos discos após ocorrer uma falha. Fiquei me perguntando, então, como ele usa "metadados" para garantir que tudo no sistema de arquivos seja consistente, por exemplo, quais etapas o processo fsck precisa executar para restaurar e reparar?

-> editar: também seria útil se alguém pudesse esclarecer a que "gravação síncrona" se refere nesta figura também.

Kaitlyn Mcmordie
fonte
Parece que seria mais sobre tópicos de U&L, talvez.

Respostas:

13

Metadados são informações sobre dados. Se você pensar em um arquivo de texto, a sequência de letras desse arquivo de texto é os dados reais que o arquivo contém. No entanto, o arquivo possui um nome, um proprietário, uma data de criação, um local na mídia de armazenamento, etc. Todas essas informações são metadados. Observe que os metadados podem ser manipulados da mesma maneira que os dados. Por exemplo, o Unix armazena metadados de arquivos em arquivos de dados chamados diretórios (ou pastas nesta nova era da computação :-)

O sistema de arquivos Unix usa uma unidade básica de armazenamento chamada inodes . Um inode individual pode conter dados reais do arquivo, informações de diretório (metadados) ou ser não utilizado (gratuito). Observe que o ato de criar um novo arquivo envolve alterar o estado de um inode de livre para alocado, gravando dados no novo arquivo e gravando metadados em um arquivo de diretório. É possível que um computador trave no meio desse tipo de operação; nesse caso, o sistema de arquivos pode estar corrompido .

A verificação do sistema de arquivos consiste em ler todos os inodes e tentar resolver o maior número possível de problemas de corrupção. Por exemplo, suponha que um inode não esteja na lista de inodes livres, mas não há entradas de diretório que digam que esse inode faz parte de um arquivo em qualquer um dos diretórios que o sistema de arquivos conhece. Este inode pode ser colocado de volta na lista de inodes livres.

A gravação síncrona é uma maneira de executar a gravação no disco de uma maneira que garanta que, se ocorrer uma falha, o sistema de arquivos possa ser recuperado. Por exemplo, ao criar um novo arquivo, você precisa alocar um inode, criar o inode com seu conjunto de metadados e atualizar o arquivo que contém as informações do diretório. Com a gravação síncrona , elas são executadas como ações separadas, uma de cada vez, nessa ordem. Se a falha ocorrer antes da gravação do diretório, o inode poderá ser colocado novamente na lista gratuita e a criação do arquivo não ocorreu.

Outros tipos de verificação do sistema de arquivos também são possíveis.

Jay Elston
fonte
6

No contexto dos sistemas de arquivos Unix ou Linux, "metadados" são informações sobre um arquivo: ID do usuário de quem é o proprietário, permissões, tipo de arquivo (especial, regular, pipe nomeado etc.) e quais blocos de disco são usados ​​pelo arquivo. Isso geralmente é mantido em uma estrutura em disco chamada "inode". Uma das informações em um inode é quantos "links" para o arquivo existem. Um arquivo comum normalmente possui 1, mas um diretório (que é principalmente um arquivo com uma marca de tipo de arquivo especial "Sou um diretório") tem pelo menos 2 links. Tudo o que é visível em um sistema de arquivos tem um link do diretório em que aparece, mas como todo diretório tem um "." nome, bem como seu nome comum, eles têm 2 links.

fsckpode varrer os "blocos de inode" de um sistema de arquivos (os blocos de disco que contêm as estruturas de dados do inode) para encontrar inodes com uma contagem de links maior que 0. Um arquivo representado por um inode com uma contagem de links maior que 0 deve aparecer em um diretório em algum lugar. Se esse inode não aparecer em um diretório, fsckcoloque o arquivo no diretório conhecido, geralmente "perdido + encontrado" na parte superior do sistema de arquivos. Observe que os sistemas de arquivos Unix / Linux geralmente não possuem metadados em um inode sobre a qual diretório o inode pertence, apenas informações no arquivo de diretório sobre quais arquivos o diretório contém.

fsckpode usar outros metadados, como quais blocos de disco contêm os dados de um arquivo. fsckpode verificar se os blocos de disco que um inode diz pertencer a um arquivo aparecem na "lista não alocada" do sistema de arquivos. Potencialmente, fsckpoderia verificar se dois ou mais inodes contêm os mesmos blocos de disco, o que indicaria algum tipo de corrupção de alocação múltipla.

A alocação de blocos de disco para arquivos é exibida nos inodes do disco. A estrutura em árvore de associação ao diretório de um sistema de arquivos aparece nos diretórios. Os inodes não aparecem e não são alocados para diretórios. fscktira proveito dessa separação para fazer reparos. Isso é bem diferente de sistemas como o MS-DOS ou o Windows antigo, onde uma "tabela de alocação de arquivos" mantinha a alocação de estrutura em árvore (associação ao diretório) e de bloco de disco. Corrompa o "FAT" e você precisará examinar os blocos de disco para ver o que eles contêm e como eles podem se encaixar.

Bruce Ediger
fonte
5

Os metadados são "Dados sobre dados".

No caso do sistema de arquivos * nix, os metadados usados ​​por fsckum cabeçalho em cada bloco de dados apontam para uma entrada de diretório ou o próximo bloco de dados e as entradas correspondentes no diretório. fsckvarre os blocos e verifica se as entradas do diretório correspondem e se os ponteiros de encaminhamento para o próximo bloco estão corretos.

Isso varia muito entre os sistemas de arquivos. De fato, quais metadados são armazenados e onde são armazenados é o que mais diferencia os vários sistemas de arquivos * nix. Os mais modernos também mantêm um arquivo de log de alterações nas estruturas de diretórios.

James Anderson
fonte
Apenas curioso, mas você sabe como ou onde implementações modernas armazenam os metadados no disco?
Kaitlyn McMordie
1
@KaitlynMcmordie, depende do fs. Para ext [234], a maioria dos metadados é armazenada no inode do arquivo. O (s) nome (s) é / são armazenados nos diretórios, ou seja, a parte dos dados dos arquivos que possuem o sinalizador de diretório e um formato específico para seus dados principais. Os dados do arquivo são armazenados em blocos de dados e os inodes são armazenados nas tabelas de inodes, que são alocadas quando o fs é formatado. Outros dados no inode incluem o proprietário, permissões, carimbos de data e hora de acesso e ponteiros para os blocos de dados.
Psusi 25/10