sistema de arquivos, bit de arquivamento

2

Eu estou querendo saber se existem sistemas de arquivos linux suportando para cada arquivo o bit de arquivo

link

Eu preciso de algo com a mesma lógica em fs.s. nativo, como ext3, não gordo nem ntfs.

Atenciosamente, Sala

    
por Massimo 18.08.2016 / 01:04

3 respostas

8

Os sistemas Linux modernos suportam atributos de arquivo personalizados , pelo menos no ext4 e btrfs. Você pode usar getfattr para listá-los e setfattr para configurá-los. Os atributos personalizados são atributos estendidos no espaço de nome do usuário, ou seja, com um nome que comece com os cinco caracteres user. .

$ touch foo
$ getfattr foo
$ setfattr -n user.archive -v $(date -r foo) foo
$ getfattr -d foo
# file: foo
user.archive="1471478895"

Você pode usar um atributo personalizado, se desejar. O valor pode ser qualquer string curta (a quantidade de armazenamento disponível depende do sistema de arquivos e da versão do kernel; algumas centenas de bytes devem ficar bem). Aqui, eu uso o timestamp do arquivo; uma modificação atualizaria o timestamp real, mas não a cópia no atributo personalizado.

Observe que, se o arquivo for modificado, excluindo-o e substituindo-o por uma nova versão, em vez de sobrescrever o arquivo existente, os atributos personalizados desaparecerão. Isso deve ser bom para o seu propósito: se o atributo não estiver presente, o arquivo deve ter um backup.

Programas incrementais de backup no mundo Unix não usam atributos personalizados. O que eles fazem é comparar o registro de data e hora do arquivo com o registro de data e hora do backup e fazer o backup do arquivo, se ele for alterado. Isso é mais confiável porque leva em conta o estado real do backup - backups feitos exclusivamente de acordo com o estado do sistema são mais propensos a arquivos perdidos devido a um backup que desaparece ou devido a erros cometidos ao manter o atributo.

    
por 18.08.2016 / 02:13
1

Não, não existe (diretamente).

Os sistemas de arquivos nativos do Linux / Unix mantêm vários timestamps por arquivo (pelo menos a última vez modificada mtime , tempo de alteração de inode ctime e tempo da última vez acessada (ou lida) atime . o timestamp mtime para determinar a última vez que um arquivo foi alterado para determinar se deve incluir um determinado arquivo em um backup incremental.Isso é mais flexível que um bit de archive, porque os sistemas de backup podem executar um backup incremental contra qualquer backup completo simplesmente comparando o mtime para cada arquivo com o timestamp do backup completo.

Se você estiver procurando especificamente o comportamento do bit de arquivamento, porque você vai usá-lo para algo diferente do cálculo de conjuntos de arquivos de backup incremental, precisará fornecer mais detalhes sobre o que está tentando realizar.

Dito isso, você pode simular o comportamento de um bit de arquivamento usando o carimbo de data mtime , porque você pode definir o mtime da linha de comando ou do seu próprio programa. Por exemplo, suponha que você defina para seus propósitos que um mtime de 0 ("época" do UNIX) significa o mesmo que o bit de archive sendo claro. Em seguida, se o arquivo for modificado, o sistema operacional definirá o mtime como o registro de data e hora da modificação mais recente (portanto, mtime não será mais 0 , o que você pode interpretar como se o bit de arquivamento tivesse sido conjunto).

Você pode definir o mtime de um script de shell usando touch (consulte man touch ), e muitas ferramentas de shell como find suportam a pesquisa usando mtime . A partir do seu próprio programa em C ou outro idioma, comece com as páginas man stat (2) e utimes (2).

    
por 18.08.2016 / 01:40
0

Não existe tal atributo nos sistemas de arquivos do Linux. O XFS suporta atributos personalizados, mas isso seria muito ineficiente para usar em um backup.

A solução comum é confiar no tempo de modificação do arquivo ( mtime ). Fazer um backup incremental é meramente arquivar os arquivos que têm mtime maior que o último backup.

    
por 18.08.2016 / 02:02