Como duplicar um arquivo sem copiar seus dados com btrfs?

14

Não tenho experiência com btrfs, mas é anunciado que é possível desduplicar arquivos.

No meu aplicativo, eu precisaria duplicar árvores de diretório inteiro.

Pelo que aprendi, o btrfs apenas desduplica em algumas postagens, não imediatamente. Mesmo o uso cpnão parece desencadear nenhuma deduplicação (pelo menos, dfmostra um aumento no uso do disco no tamanho dos arquivos copiados).

Posso evitar mover dados completamente e dizer btrfsdiretamente para duplicar um arquivo em outro local, basicamente apenas clonando seus metadados?

Em essência, semelhante a um hardlink, mas com metadados independentes (permissões, tempos de modificação, ...).

Udo G
fonte
7
cp --reflink=always.
mikeserv
3
Observe que isso não é como um hardlink. Quando você cp --reflink=always, o resultado da perspectiva do usuário será dois arquivos completamente independentes em todos os aspectos. O fato de o sistema de arquivos subjacente estar abstraindo que via cópia na gravação é apenas um detalhe de implementação. Você não recebe "um link físico, mas com metadados independentes". Que eu saiba, o btrfs ainda não faz deduplicação automática. Eu acho que é um plano futuro, mas não sou positivo nisso.
Ormaaj
@ormaaj - um hardlink não teria metadados independentes . e Udo pediu um detalhe de implementação . quando você faz um reflink para um arquivo, clona essencialmente seus metadados . é somente quando as referências mudam independentemente que os arquivos divergem - e é disso que se trata a deduplicação!
mikeserv
1
@ MikeServ Er, eu tenho certeza que a desduplicação tem um sentido diferente. A desduplicação está pegando cópias redundantes de dados já existentes e as unificando novamente. COW é um meio de minimizar a duplicação, não é deduplicação.
ormaaj
@ormaaj - acho que é uma coisa estranha a dizer: a desduplicação não se trata de minimizar a duplicação.
mikeserv

Respostas:

12

Existem duas opções:

  1. cp --reflink=always
  2. cp --reflink=auto

O segundo é quase sempre preferível ao primeiro. Usar autosignifica que ele fará uma cópia verdadeira se o sistema de arquivos não suportar refluxo (por exemplo, ext4 ou copiar para um compartilhamento NFS). Com a primeira opção, tenho certeza de que falhará completamente e parará de copiar.

Se você estiver usando isso como parte de um script que precisa ser robusto diante de condições não ideais, autoservirá melhor.

eestrada
fonte
você é Eric Estrada?
mikeserv
2
@mikeserv Lol, não. Meu primeiro nome é Ethan. Isso seria engraçado; Eric Estrada: ator de dia, administrador de sistemas à noite. Acredite ou não, esta é a primeira vez em mais de uma década a lidar com a manipulação on-line eestradaque alguém já me perguntou isso.
eestrada
2
claro, Eric. de qualquer maneira, boa resposta.
mikeserv