Come duplicare un file senza copiarne i dati con btrfs?


14

Non ho esperienza con btrfs, ma è pubblicizzato per poter de-duplicare i file.

Nella mia applicazione, avrei bisogno di duplicare interi alberi di directory.

Da quello che ho imparato, btrfs de-duplica solo in alcuni post scan, non immediatamente. Anche solo l'utilizzo cpnon sembra innescare alcuna deduplicazione (almeno, dfmostra un aumento dell'utilizzo del disco nella dimensione dei file copiati).

Posso evitare di spostare completamente i dati e dire btrfsdirettamente di duplicare un file in un'altra posizione, essenzialmente clonandone i metadati?

In sostanza, simile a un hardlink, ma con metadati indipendenti (permessi, tempi mod., ...).


7
cp --reflink=always.
Mikeserv,

3
Nota che questo non è niente come un hardlink. Quando tu cp --reflink=always, il risultato dal punto di vista dell'utente saranno due file completamente indipendenti in ogni modo. Il fatto che il file system sottostante stia sottraendo che tramite copia su scrittura è solo un dettaglio di implementazione. Non si ottiene "un collegamento fisico, ma con metadati indipendenti". Per quanto ne so, btrfs non esegue ancora alcuna deduplicazione automatica. Penso che sia un piano futuro ma non sono positivo su questo.
ormaaj,

@ormaaj - un hardlink non avrebbe metadati indipendenti . e Udo ha chiesto un dettaglio di implementazione . quando esegui un reflink su un file, essenzialmente cloni i suoi metadati . è solo quando i riferimenti cambiano in modo indipendente che i file divergono - e questo è tutto ciò che riguarda la deduplicazione!
Mikeserv,

1
@mikeserv Er, sono abbastanza sicuro che la deduplicazione abbia un senso diverso. La deduplicazione sta eseguendo copie ridondanti di dati già esistenti e unificandole nuovamente. COW è un mezzo per ridurre al minimo la duplicazione, non è la deduplicazione.
ormaaj,

@ormaaj - penso che sia una cosa strana da dire: la deduplicazione non si tratta di minimizzare la duplicazione.
Mikeserv,

Risposte:


12

Esistono due opzioni:

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

Il secondo è quasi sempre preferibile al primo. L'uso di autosignifica che fallirà nel fare una copia vera se il file system non supporta il reflinking (ad esempio ext4 o la copia in una condivisione NFS). Con la prima opzione, sono abbastanza sicuro che fallirà e smetterà di copiare.

Se lo stai usando come parte di uno script che deve essere robusto di fronte a condizioni non ideali, autoti servirà meglio.


sei Eric Estrada?
Mikeserv,

2
@mikeserv Lol, no. Il mio nome è Ethan. Sarebbe divertente però; Eric Estrada: attore di giorno, amministratore di sistema di notte. Che ci crediate o no, questa è la prima volta da oltre un decennio che passa per la maniglia online eestradache qualcuno mi ha mai chiesto.
eestrada,

2
certo Eric. comunque buona risposta.
Mikeserv,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.