(zaczęło się jako komentarz, ale stało się zbyt długie, więc teraz jest odpowiedzią)
Niestety odpowiedź brzmi „nie”. Nie ma na to szybszego ani mądrzejszego sposobu.
Systemy plików ZFS (nawet jeśli znajdują się w tej samej puli) są oddzielnymi systemami plików. Ani mv
, ani jakiekolwiek inne narzędzie może po prostu przesunąć wskazówki blokowe lub cokolwiek tak, że pliki, które były na fs_a
to teraz fs_b
.
(BTW, wiele sformatowanych partycji lub woluminów LVM na tym samym dysku lub macierzy RAID to także osobne systemy plików i mv
dla nich również kopiowanie i usuwanie)
Ten problem pojawiał się kilka razy na przestrzeni lat (z pewnym omówieniem tworzenia narzędzia do robienia tego, co chcesz) i, jak rozumiem, główną trudnością, która stawia go w zbyt trudnym koszyku, jest kwestia obsługi migawek - jeśli są migawki fs_a
, bloki byłyby w obu systemach plików jednocześnie. To samo dotyczy plików z twardymi linkami.
Natknąłem się na to wiele razy (np. Podczas przenoszenia plików między zestawami danych, jak to robiłeś, lub gdy muszę przekonwertować podkatalog na fs) i właśnie nauczyłem się znosić niedogodności. Może to być poważna PITA.
jeśli fs_b
jest pusta lub jeszcze nie istnieje i chcesz przenieść całą zawartość od fs_a
celu fs_b
(i nie tylko kilku lub nawet większość plików i katalogów), można użyć zfs rename
do zmiany nazwy fs_a
na fs_b
. Podejrzewam jednak, że nie ma to wpływu na twoją sytuację.
Problem dotyczy ZFSOnLinux pod adresem https://github.com/zfsonlinux/zfs/issues/2991
Nie szukałem, ale spodziewałbym się, że upstream OpenZFS, a nawet Sun / Oracle ZFS prawdopodobnie mają podobne zgłoszenia błędów / żądania funkcji.
BTW, patrz także /server/584693/freenas-why-isnt-mv-command-instant-within-a-raidz1-volume