Como verificar se uma cópia do arquivo é reflink / CoW?

8

Estou brincando com o btrfs, que permite cp --reflinkcopiar na gravação. Outros programas, como lxc-clone, também podem usar esse recurso. Minha pergunta é: como saber se um arquivo é um coW de outro? Como no hardlink, posso dizer pelo número do inode.

Wu Yongzheng
fonte

Respostas:

5

Boa pergunta. Parece que atualmente não há maneiras fáceis de dizer de alto nível.

Um problema é que um arquivo pode compartilhar apenas parte dos dados via Copy-on-Write. Isso é chamado de extensão física e algumas ou todas as extensões físicas podem ser compartilhadas entre arquivos CoW.

Não há nada análogo ao inodeque, quando comparado entre arquivos, diga que os arquivos compartilham as mesmas extensões físicas. (Editar: veja minha outra resposta ).

A resposta de baixo nível é que você pode perguntar ao kernel quais extensões físicas são usadas para o arquivo usando o , que está documentado . Em princípio, se todas as extensões físicas forem iguais, o arquivo deverá compartilhar o mesmo armazenamento subjacente.FS_IOC_FIEMAP ioctlDocumentation/filesystems/fiemap.txt

Poucas coisas implementam uma maneira de ver essas informações em um nível superior. Encontrei alguns códigos aqui . Aparentemente, o filefragutilitário deve mostrar as extensões com -v. Além disso, btrfs-debug-treemostra essas informações.

Eu teria cuidado, no entanto, como essas coisas podem ter tido pouco uso na natureza para esse fim, você pode encontrar bugs com respostas erradas; portanto, tenha cuidado com esses dados para decidir sobre as operações que podem causar corrupção de dados.

Algumas questões relacionadas:

pwaller
fonte
Ótima resposta! Como você usaria btrfs-debug-treepara listar as extensões em um determinado nome de arquivo?
Tom Hale
4

Além da minha resposta anterior , acabei de lançar o fienodequal calcula um hash SHA1 das extensões físicas do arquivo e pode ser usado para encontrar algumas cópias de reflink (idênticas). Cuidado, porém, existem advertências (consulte a documentação ). O BTRFS decidiu alterar algumas, mas não todas, as extensões físicas de uma cópia de refink que eu fiz sem provocação ou aviso, causando a alteração do valor.

pwaller
fonte