Wie verschiebe ich Dateien von einem zfs-Dateisystem in ein anderes zfs-Dateisystem im selben Pool?

17

Ich habe zwei Dateisysteme im gleichen ZFS-Pool /mnt/fs_aund /mnt/fs_b. Ich möchte ungefähr 1 TB Daten von fs_anach verschieben fs_b. Aber wenn ich:

mv /mnt/fs_a/mythtv_recordings /mnt/fs_b/

Zu meiner Überraschung werden die Dateien Block für Block kopiert. Angesichts der Zeit, die zum Verschieben einer 2-GB-Datei erforderlich war, würde dieser Vorgang anscheinend mehrere Tage dauern.

Es muss einen viel intelligenteren und schnelleren Weg geben, richtig?

Fred Hamilton
quelle

Antworten:

22

(Dies begann als Kommentar, wurde aber zu lang und ist jetzt eine Antwort.)

Leider lautet die Antwort "Nein". Schneller und intelligenter geht es nicht.

ZFS-Dateisysteme (auch wenn sie sich im selben Pool befinden) sind separate Dateisysteme. Weder mvein anderes Tool noch ein anderes Tool können die Blockzeiger oder was auch immer einfach so verschieben, dass die Dateien, die aktiviert waren, fs_ajetzt aktiviert sind fs_b.

(Übrigens sind mehrere formatierte Partitionen oder LVM-Volumes auf derselben Festplatte oder demselben RAID-Array auch separate Dateisysteme und mvmüssen auch für diese kopiert und gelöscht werden.)

Dieses Problem ist im Laufe der Jahre mehrmals aufgetaucht (mit einigen Gesprächen über die Erstellung eines Tools, mit dem Sie das tun können, was Sie wollen), und meines Wissens ist die Frage, wie mit Schnappschüssen umgegangen werden soll, die Hauptschwierigkeit, die es in den zu harten Korb legt - Wenn es Schnappschüsse von gibt, befinden sich fs_adie Blöcke gleichzeitig in beiden Dateisystemen. Gleiches gilt für Dateien mit Hardlinks.

Ich bin selbst mehrfach darauf gestoßen (z. B. beim Verschieben von Dateien zwischen Datensätzen wie Sie oder wenn ich ein Unterverzeichnis in ein fs konvertieren muss) und habe gerade gelernt, die Unannehmlichkeiten in Kauf zu nehmen. Es kann eine große PITA sein.

wenn fs_bleer ist oder noch nicht existiert , und Sie möchten die bewegen gesamten Inhalt fs_azu fs_b(und nicht nur einige oder sogar die meisten Dateien und Verzeichnisse) , die Sie verwenden können , zfs renameumbenennen fs_azu fs_b. Ich vermute jedoch, dass dies für Ihre Situation nicht relevant ist.

Für ZFSOnLinux gibt es hierzu ein offenes Problem unter https://github.com/zfsonlinux/zfs/issues/2991

Ich habe nicht gesucht, aber ich würde erwarten, dass Upstream- OpenZFS und sogar Sun / Oracle ZFS wahrscheinlich ähnliche Fehlerberichte / Feature-Anfragen haben.

Siehe auch /server/584693/freenas-why-isnt-mv-command-instant-within-a-raidz1-volume

cas
quelle
3
Vielen Dank für die gründliche Antwort. Ich schätze den Umbenennungsvorschlag, aber wie Sie vermuten, habe ich noch mehr Daten, die ich auf b nicht möchte. Zumindest kann ich jetzt weitermachen und die Dateien über eine Pufferscheibe kopieren, um das Thrashing zumindest zu beseitigen.
Fred Hamilton