Quais atributos de arquivo são armazenados nas entradas de diretório e quais nos inodes?

1

Eu quero fazer algumas deduplicações de arquivos antigos, substituindo duplicatas por hardlinks.

Para minimizar a perda de metadados, desejo definir os atributos de entrada de diretório de cada novo hardlink para os atributos da duplicata que ele substitui, mas não alterar nenhum atributo inode do inode que obtém os novos links.

Quais propriedades devo definir e não definir?

Idealmente, gostaria de ver uma tabela mostrando o que está em tantos sistemas de arquivos quanto possível. Estou particularmente interessado em ext3, ext4, HFS +, XFS e Btrfs.

    
por ShadSterling 06.10.2014 / 06:22

1 resposta

1

O que você está pedindo não é possível em nenhum sistema de arquivos que eu conheça, por causa de como eles são implementados, conforme descrito aqui. E eu não entendo porque você estaria preocupado com os metadados, para começar?

Primeiro, os únicos dados na entrada do diretório são o nome do arquivo e o número do inode.

Em segundo lugar, um link físico é criado quando você cria dois ou mais nomes de arquivo com o número de inode same .

O inode armazena todo o resto, coisas como atime e mtime, e outros metadados, incluindo "ponteiros" para os blocos de dados do arquivo.

Se você tem dois arquivos cujo conteúdo é o mesmo, mas os inodes são diferentes, a maioria dos metadados nos inodes será diferente, por exemplo, o atime e o mtime mencionados serão diferentes, assim como all dos ponteiros de bloco de dados.

Para usar um link físico para reduzir o uso de armazenamento, você deve excluir um ou outro dos arquivos duplicados, o que também "fechará" o inode, perdendo todos os metadados. Em seguida, você cria um link para o arquivo existente restante, usando o nome e o local do diretório do arquivo que acabou de excluir.

O "novo" link do arquivo agora terá all a mesma informação do inode que você acabou de vincular. As únicas diferenças serão o local na hierarquia de diretórios e o nome usado, que são armazenados na entrada de diretório, não no inode.

Tudo isso é tratado através das chamadas do sistema usadas para criar arquivos, links e diretórios, e não é diretamente modificável por qualquer usuário ou software, incluindo 'root'. Você pode lê-lo e armazenar os dados em um arquivo separado, mas a associação fácil de uma hierarquia de diretórios será perdida.

    
por 06.10.2014 / 21:39