(questo è iniziato come un commento ma è diventato troppo lungo, quindi ora è una risposta)
Sfortunatamente la risposta è no". Non esiste un modo più veloce o più intelligente per farlo.
I filesystem ZFS (anche se si trovano nello stesso pool) sono filesystem separati. Né mv
nessun altro strumento può semplicemente spostare i puntatori a blocchi o qualsiasi altra cosa in modo che i file presenti fs_a
siano ora attivi fs_b
.
(A proposito, più partizioni formattate o volumi LVM sullo stesso disco o array raid sono anche filesystem separati e si mv
convertono in copia ed eliminazione anche per loro)
Questo problema è emerso più volte nel corso degli anni (con alcuni discorsi sulla creazione di uno strumento per fare ciò che vuoi) e, a quanto ho capito, la principale difficoltà che lo mette nel cestino troppo difficile è la questione di come gestire le istantanee - se ci sono istantanee di fs_a
, i blocchi si troverebbero contemporaneamente in entrambi i file system. Lo stesso vale per i file che hanno collegamenti reali.
Mi sono imbattuto in me stesso numerose volte (ad esempio quando ho spostato i file tra i set di dati come hai fatto tu, o quando ho bisogno di convertire una sottodirectory in fs), e ho appena imparato a sopportare l'inconveniente. Può essere un PITA importante.
se fs_b
è vuota o non esiste ancora e si desidera spostare gli interi contenuti di fs_a
a fs_b
(e non solo alcune o addirittura la maggior parte dei file e directory) che è possibile utilizzare zfs rename
per rinominare fs_a
a fs_b
. Tuttavia, sospetto che ciò non sia rilevante per la tua situazione.
C'è un problema aperto su questo per ZFSOnLinux su https://github.com/zfsonlinux/zfs/issues/2991
Non ho cercato, ma mi aspetto che OpenZFS a monte e persino Sun / Oracle ZFS abbiano probabilmente segnalazioni di bug / richieste di funzionalità simili.
A proposito, vedi anche /server/584693/freenas-why-isnt-mv-command-instant-within-a-raidz1-volume