Wie dupliziere ich eine Datei, ohne ihre Daten mit btrfs zu kopieren?

14

Ich habe keine Erfahrung mit btrfs, aber es wird angekündigt, dass es möglich ist, Dateien zu de-duplizieren.

In meiner Anwendung müsste ich ganze Verzeichnisbäume duplizieren.

Nach dem, was ich gelernt habe, wird btrfs nur in einigen Post-Scan-Vorgängen dupliziert, nicht sofort. Sogar die bloße Verwendung cpscheint keine Deduplizierung auszulösen ( dfzeigt zumindest eine erhöhte Datenträgerverwendung in der Größe der kopierten Dateien).

Kann ich das Verschieben von Daten insgesamt vermeiden und btrfsdirekt anweisen, eine Datei an einem anderen Speicherort zu duplizieren , indem ich im Wesentlichen nur deren Metadaten klone?

Im Wesentlichen ähnlich einem Hardlink, jedoch mit unabhängigen Metadaten (Berechtigungen, Änderungszeiten, ...).

Udo G
quelle
7
cp --reflink=always.
mikeserv
3
Beachten Sie, dass dies kein Hardlink ist. Wenn Sie dies tun, erhalten Sie cp --reflink=alwaysaus Benutzersicht in jeder Hinsicht zwei völlig unabhängige Dateien. Die Tatsache, dass das zugrunde liegende Dateisystem das Kopieren beim Schreiben abstrahiert, ist nur ein Implementierungsdetail. Sie erhalten keinen "Hardlink, sondern unabhängige Metadaten". Meines Wissens führt btrfs noch keine automatische Deduplizierung durch. Ich denke, das ist ein Zukunftsplan, aber da bin ich mir nicht sicher.
Ormaaj
@ormaaj - Ein Hardlink hätte keine unabhängigen Metadaten . und Udo bat um ein Implementierungsdetail . Wenn Sie einen erneuten Link zu einer Datei erstellen, klonen Sie im Wesentlichen deren Metadaten . Nur wenn sich die Referenzen unabhängig voneinander ändern , weichen die Dateien voneinander ab - und darum geht es bei der Deduplizierung!
mikeserv
1
@mikeserv Ähm, ich bin mir ziemlich sicher, dass Deduplizierung einen anderen Sinn hat. Bei der Deduplizierung werden bereits vorhandene redundante Kopien von Daten verwendet und erneut vereinheitlicht. COW ist ein Mittel zur Minimierung von Duplikaten, es ist keine Deduplizierung.
Ormaaj
@ormaaj - Ich denke, das ist eine seltsame Sache zu sagen: Bei Deduplizierung geht es nicht darum, Doppelarbeit zu minimieren.
mikeserv

Antworten:

12

Es gibt zwei Möglichkeiten:

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

Der zweite ist fast immer dem ersten vorzuziehen. Verwenden autobedeutet, dass das Erstellen einer echten Kopie rückgängig gemacht werden kann, wenn das Dateisystem kein erneutes Verknüpfen unterstützt (z. B. ext4 oder Kopieren auf eine NFS-Freigabe). Mit der ersten Option bin ich mir ziemlich sicher, dass es komplett fehlschlagen und nicht mehr kopiert werden kann.

Wenn Sie dies als Teil eines Skripts verwenden, das auch unter nicht idealen Bedingungen robust sein muss, ist dies von Vorteil auto.

Eestrada
quelle
Bist du Eric Estrada?
mikeserv
2
@ MikeServ Lol, nein. Mein Vorname ist Ethan. Das wäre allerdings lustig; Eric Estrada: Schauspieler bei Tag, Sysadmin bei Nacht. Ob Sie es glauben oder nicht, es ist das erste Mal seit über einem Jahrzehnt, eestradadass jemand mich danach gefragt hat.
Eestrada
2
Sicher, Eric. Trotzdem, gute Antwort.
mikeserv