ZFS: Dateien aus Snapshots entfernen?

10

Angenommen, ich habe ein Dataset mit 100 Snapshots und möchte rm -rfin allen Snapshots alle Ordner mit dem Namen "Cache" verwenden.

Ich möchte den Speicherplatz tatsächlich freigeben und nicht nur in Schichten von Schnappschüssen verstecken. Ein Klon zu erstellen und daraus zu entfernen und dann einen neuen Schnappschuss zu erstellen, scheint also nicht das zu tun, was ich will.

Irgendein halbautomatischer Weg, das zu tun? Einige Wraps um zfs Liste -t ​​Snapshot, zfs Klon, zfs fördern, zfs Snapshot?

(Cross-Posting von /superuser/313197, da ich sehe, dass dies mehr ZFS-Zeug hat)

Tino Didriksen
quelle
3
Bitte nicht crossposten, sondern warten, bis Ihre Frage migriert ist.
Sven
Ich bin mir auch nicht sicher, ob dies überhaupt möglich ist: Snapshots sind schreibgeschützt, und wenn Sie das Klon / Promot-Paar verwenden, kehren Sie die Abhängigkeit zwischen dem geklonten Snapshot und dem "HEAD" -Datensatz um, was wahrscheinlich nicht das ist, was Sie sind wollen. Siehe das Dokument hier: download.oracle.com/docs/cd/E19253-01/819-5461/gbcxz/index.html
Sven
Ich würde auf die Migration warten, aber es schien auch eine ganze Reihe von ZFS-Fragen zu SU zu geben, daher bezweifelte ich, dass es automatisch verschoben wird ... es passt an beide Stellen, also folgte ich einem Meta-Leitfaden, um nett zu Cross zu sein -Posting.
Tino Didriksen
@TinoDidriksen Könnten Sie bitte einen Verweis auf diesen Meta-Beitrag geben? Ich würde es gerne sehen. Vielen Dank.
nhinkle
2
Der Beitrag, auf den Sie verwiesen haben, ist keine offizielle Richtlinie. Es gibt eine FAQ zu MSO, in der erläutert wird, wie mit Fragen umgegangen wird, von denen der Benutzer glaubt, dass sie für mehrere Websites zum Thema gehören. Zusammenfassend ist Crossposting nicht zulässig. Wenn Sie nach dem Posten entscheiden, dass es anderswo besser ist und Sie keine guten Antworten erhalten haben, können Sie es für die Migration markieren oder es löschen und erneut fragen, aber Sie müssen den Beitrag an die Site anpassen, auf der Sie sich befinden weiter fragen. Sie haben genau dieselbe Frage Wort für Wort erneut gestellt, ohne zu warten, wodurch die Richtlinien in beiden Meta-Posts zum Cross-Posting nicht eingehalten werden.
nhinkle

Antworten:

9

Schnappschüsse sind schreibgeschützt. Wenn Sie diese Ordner nicht mehr benötigen , müssen Sie den gesamten Snapshot löschen.

Sie können ein Backup (mit so etwas wie tar) erstellen, ohne die fehlerhaften Ordner auszuschließen, und dann den Snapshot löschen. Offensichtlich hat das Backup jetzt das Format tar oder was auch immer. Aber zumindest haben Sie noch eine Sicherungskopie.

Chris S.
quelle
2
Das eigentliche Problem bei dieser Lösung ist, dass Sie jetzt jedes Datenbit n- mal für real speichern müssen, während ein Snapshot nur modifizierte Blöcke speichern würde. Auf diese Weise wird wahrscheinlich viel mehr Speicherplatz benötigt, als Sie beim Löschen der Caches aus den TAR-Dateien gespart haben.
Sven
Dedupe würde dabei helfen , aber Sie haben Recht . Ich bin mir ziemlich sicher, dass es keine Möglichkeit gibt, diese Schnappschüsse so zu ändern, wie er es möchte.
Chris S
Ich habe sowohl gzip-1-Komprimierung als auch Dedup aktiviert, sodass das Kopieren identischer Daten nur Platz in der Buchhaltung beansprucht. Aber ich möchte natürlich einen Weg finden, um das Kopieren überhaupt zu vermeiden.
Tino Didriksen
Ich bezweifle, dass im Fall mehrerer TAR- Dateien mit fast demselben Datendeduplizierung dies sehr hilfreich wäre, da das Hinzufügen oder Subtrahieren von nur einem Byte am Anfang der Datei bedeuten würde, dass kein Block mit einem anderen identisch wäre, was das Dedupieren unbrauchbar macht.
Sven
@SvenW Nachdem ich die Frage noch einmal gelesen habe, sehe ich, dass er dies tut, um Platz zu sparen. Womit meine Antwort wirklich nicht hilft, es sei denn, er verschiebt die TAR-Dateien vom Computer, wodurch er die Schnappschüsse trotzdem exportieren kann. Klingt so, als ob er überall feststeckt.
Chris S
14

Sie könnten Folgendes versuchen:

  1. Klonen Sie den ältesten Snapshot in ein neues Dateisystem (nennen Sie es fsnew).
  2. Heraufstufen des Klons ( fsnew), damit Sie den Snapshot zerstören können, auf dem das Dateisystem basiert.
  3. Entfernen Sie die fehlerhaften Dateien.
  4. Erstellen Sie einen Schnappschuss von fsnew.

Nun für jeden Snapshot nach, rsyncmit dem --inplaceFlag vom Snapshot bis zum neuen Überspringen von Dateien, die Sie nicht möchten. Das --inplaceFlag reduziert die Anzahl der Schreibvorgänge und ermöglicht kleinere Snapshots.

  1. Erstellen Sie einen Schnappschuss von fsnew.
  2. Zerstören Sie den Original-Schnappschuss.

Wenn dies erledigt ist, sollten Sie einen Snapshot haben fsnew, der den Snapshots aus dem ursprünglichen Dateisystem entspricht, wobei die fehlerhaften Dateien entfernt wurden.

Wenn Sie über Speicherplatz auf dem Laufwerk verfügen, können Sie den Befehl "destroy" überspringen, bis Ihr Skript ordnungsgemäß funktioniert.

Michael Boers
quelle
Sie müssen die --deleteOption auch an übergeben rsync, da sonst Löschvorgänge zwischen Snapshots verloren gehen. Ansonsten ist das eine tolle Idee.
Tobia
1
  1. Zerstören Sie den Original-Schnappschuss.

Sie können den ursprünglichen Schnappschuss nach dem Heraufstufen der Aktion nicht zerstören. Nur wenn dies der Fall ist, zerstören Sie den übergeordneten Datensatz.

Beispiel (nach dem Klon fördern).

zfs zerstören media1/cheers/[email protected]

'media1/cheers/[email protected]' kann nicht zerstört werden: Snapshot hat abhängige Klone

Verwenden Sie '-R', um die folgenden Datensätze zu zerstören:

media1/media/[email protected]

media1 / media / backup

zfs zerstören media1/media/[email protected]

zfs zerstören media1/cheers/[email protected]

'media1/cheers/[email protected]' kann nicht zerstört werden: Snapshot hat abhängige Klone

Verwenden Sie '-R', um die folgenden Datensätze zu zerstören:

media1 / media / backup

Nach dieser "lustigen" Operation muss ich die nächsten machen

zfs snapshot media1 / media / backup @ 1

zfs send media1 / media / backup @ 1 | pv | zfs erhalten media1 / media / backupnew

zfs zerstören media1 / media / backup @ 1

zfs zerstören -R media1 / media / backup

zfs benennt media1 / media / backupnew media1 / media / backup um

ODER invertieren fördern. zfs bewirbt media1 / media / backup und löscht danach den Klon erneut, da Sie einen großen Schnappschuss an src-Stelle haben))

Hier kann nur rsync / backup helfen.

Дмитрий Мышков
quelle
-3

Die ZFS-Snapshots für ein bestimmtes ZFS-Dateisystem befinden sich im .zfs/snapshotsVerzeichnis im Stammverzeichnis des Dateisystems. Sie sollten in der Lage sein, ein Skript zu schreiben, das diesen Ordner durchläuft, und rmdie Dateien, die Sie benötigen, um es aus den Snapshots selbst zu löschen.

wachsen
quelle
3
ZFS-Snapshots sind schreibgeschützt. Sie können nicht von ihnen löschen.
Sven
Mein schlechtes, nicht sicher, wo ich den Eindruck hatte, Sie könnten :(
wachsen