Estou tentando entender como os números de inode (como exibidos por ls -i
) funcionam com partições ext4.
Estou tentando entender se eles são uma construção do kernel linux e mapeados para inodes no disco, ou se eles realmente são os mesmos números armazenados no disco.
Perguntas:
- Os números de inode mudam quando um computador é reinicializado?
- Quando duas partições são montadas, pode
ls -i
produzir o mesmo número de inode para dois arquivos diferentes, desde que estejam em partições diferentes. - Os números de inode podem ser reciclados sem reinicializar ou remontar partições?
Por que estou perguntando...
Eu quero criar um índice secundário em um disco rígido USB com 1,5 TB de dados e cerca de 20 milhões de arquivos (nomes de arquivos). Os arquivos variam de 10s de bytes a 100s de GB. Muitos deles são vinculados várias vezes, portanto, um único arquivo (blob no disco) pode ter até 200 nomes de arquivo.
Minha tarefa é economizar espaço em disco detectando duplicatas e substituindo a duplicação por links ainda mais rígidos.
Agora, como um único exercício, acho que posso criar um banco de dados de cada arquivo no disco, é shasum, permissões etc... Uma vez construído, detectar duplicação deve ser trivial. Pouco preciso ter certeza de que estou usando a chave exclusiva correta. Os nomes dos arquivos são inadequados devido ao grande número de links físicos existentes. Minha esperança é que eu possa usar números de inode.
O que eu gostaria de entender é se o número do inode mudará ou não na próxima reinicialização da minha máquina. Ou se eles são ainda mais voláteis (eles mudarão enquanto estou construindo meu banco de dados?)
Toda a documentação que li falsifica a distinção entre números de inodes apresentados pelo kernel e inodes no disco. Se são ou não a mesma coisa, não está claro com base nos artigos que já li.
Essencialmente, inode é uma referência para um sistema de arquivos (!), uma ponte entre os dados reais no disco (os bits e bytes) e o nome associado a esses dados (
/etc/passwd
por exemplo). Os nomes dos arquivos são organizados em diretórios, onde a entrada do diretório é o nome do arquivo com o inode correspondente.O inode então contém as informações reais - permissões, quais blocos estão ocupados no disco, proprietário, grupo, etc. Em Como as estruturas de diretório são armazenadas no sistema de arquivos UNIX , há um diagrama muito legal, que explica um pouco melhor a relação entre arquivos e inodes:
E quando você tem um arquivo em outro diretório apontando para o mesmo número de inode, você tem o que é conhecido como hard link.
Agora, observe que enfatizei que o inode é uma referência específica para o sistema de arquivos, e aqui está o motivo para estar atento a isso:
Isso contrasta com os dispositivos . Você pode ter vários sistemas de arquivos no mesmo dispositivo, como
/var
filesystem e/
, e ainda assim eles estão na mesma unidade.Agora, o número do inode pode mudar? Tipo de. O sistema de arquivos é responsável pelo gerenciamento de inodes, portanto, a menos que haja problemas subjacentes com o sistema de arquivos, o número do inode não deve ser alterado. Em certos casos complicados, como o editor de texto vim ,
O ponto-chave a ser lembrado é que onde os dados podem ser os mesmos para o usuário, sob o capô eles realmente são gravados em um novo local no disco, daí a alteração no número do inode.
Então, para encurtar as coisas:
Não, a menos que haja algo errado com o sistema de arquivos após a reinicialização
Sim, já que duas partições diferentes terão sistemas de arquivos diferentes. Eu não sei muito sobre LVM , mas sob esse tipo de gerenciamento de armazenamento dois volumes físicos podem ser combinados em um único volume lógico, o que, no meu palpite teórico, seria o caso
ls -
de produzir um inode por arquivoO sistema de arquivos faz isso quando um arquivo é removido (ou seja, quando todos os links para o arquivo são removidos e não há nada apontando para esse inode).
Bem, a detecção de duplicação pode ser feita por meio
md5sum
de outro comando de soma de verificação. Nesse caso, você está examinando os dados reais, que podem ou não viver em diferentes inodes no disco. Um exemplo é da resposta do heemayls :Não, os números de inode não mudam quando um computador é reinicializado, pelo menos não com sistemas de arquivos POSIX (como
ext4
) onde o inode é armazenado no disco.Sim, dois arquivos diferentes em partições diferentes podem ter o mesmo número de inode. Consulte Dois arquivos em dois sistemas de arquivos separados podem compartilhar o mesmo número de inode? e Por que os diretórios /home, /usr, /var, etc. têm o mesmo número de inode (2)? para detalhes. (O que é único, dentro de um determinado sistema, é o par número do dispositivo-inode.)
Sim, se você excluir um arquivo, seu inode pode ser reutilizado sem reinicializar ou remontar.