(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 mv
ein anderes Tool noch ein anderes Tool können die Blockzeiger oder was auch immer einfach so verschieben, dass die Dateien, die aktiviert waren, fs_a
jetzt aktiviert sind fs_b
.
(Übrigens sind mehrere formatierte Partitionen oder LVM-Volumes auf derselben Festplatte oder demselben RAID-Array auch separate Dateisysteme und mv
mü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_a
die 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_b
leer ist oder noch nicht existiert , und Sie möchten die bewegen gesamten Inhalt fs_a
zu fs_b
(und nicht nur einige oder sogar die meisten Dateien und Verzeichnisse) , die Sie verwenden können , zfs rename
umbenennen fs_a
zu 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