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

6

Estou jogando com o btrfs, que permite que cp --reflink copie 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 para o hardlink, eu posso dizer pelo número do inode.

    
por Wu Yongzheng 15.02.2016 / 06:42

2 respostas

5

Boa pergunta. Parece que atualmente não há maneiras fáceis de contar 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 das extensões físicas podem ser compartilhadas entre arquivos CoW.

Não há nada análogo a um inode que, quando comparado entre arquivos, informa 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 FS_IOC_FIEMAP ioctl , que é documentado em Documentation/filesystems/fiemap.txt . Em princípio, se todas as extensões físicas forem iguais, o arquivo deve estar compartilhando o mesmo armazenamento subjacente.

Poucas coisas implementam uma maneira de ver essas informações em um nível mais alto. Eu encontrei alguns go code aqui . Aparentemente, o utilitário filefrag deve mostrar as extensões com -v. Além disso, btrfs-debug-tree mostra esta informação.

Entretanto, eu teria cautela, já que essas coisas podem ter sido pouco usadas para esse propósito, você poderia encontrar bugs dando a você respostas erradas, então tenha cuidado com esses dados para decidir sobre operações que podem causar corrupção de dados. / p>

Algumas perguntas relacionadas:

por 17.04.2016 / 08:50
4

Além da minha resposta anterior , acabei de lançar fienode que calcula um hash SHA1 das extensões físicas do arquivo e pode ser usado para encontrar algumas cópias (idênticas) do reflink. 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, fazendo com que o valor mudasse.

    
por 17.04.2016 / 10:18