如何将文件从一个 zfs 文件系统移动到同一池中的另一个 zfs 文件系统?

Fre*_*ton 23 zfs

我在同一个 zfs 池中有两个文件系统,/mnt/fs_a并且/mnt/fs_b. 我想约1TB的数据,从移动fs_afs_b。但是当我:

mv /mnt/fs_a/mythtv_recordings /mnt/fs_b/
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,它开始逐块复制文件。鉴于移动 2GB 文件所需的时间,看来此操作需要数天的大量抖动才能完成。

必须有一种更聪明、更快的方法来做到这一点,对吗?

cas*_*cas 29

(这开始是一个评论,但变得太长了,所以现在是一个答案)

不幸的是,答案是“不”。没有更快或更聪明的方法来做到这一点。

ZFS 文件系统(即使它们在同一个池中)是独立的文件系统。无论mv和任何其他工具可以只移动块的指针或什么让那名上的文件fs_a现在是fs_b

(顺便说一句,同一磁盘或RAID阵列上的多个格式化分区或LVM卷也是单独的文件系统,并且也可以mv为它们进行复制和删除)

多年来,这个问题已经多次出现(有人谈论创建一个工具来做你想做的事),据我所知,把它放在太难的篮子里的主要困难是如何处理快照的问题- 如果有 的快照fs_a,则块将同时位于两个文件系统中。具有硬链接的文件也是如此。

我自己已经遇到过很多次(例如,在像您一样在数据集之间移动文件时,或者当我需要将子目录转换为 fs 时),并且刚刚学会忍受这种不便。它可以是一个主要的 PITA。

如果fs_b为空或不存在,你想移动整个的内容fs_afs_b(而不仅仅是某些甚至大部分文件和目录),可以使用zfs rename重命名fs_afs_b。不过,我怀疑这与您的情况无关。

ZFSOnLinux 在https://github.com/zfsonlinux/zfs/issues/2991上有一个未解决的问题

我没有搜索过,但我希望上游OpenZFS 甚至 Sun/Oracle ZFS 可能有类似的错误报告/功能请求。

顺便说一句,另见https://serverfault.com/questions/584693/freenas-why-isnt-mv-command-instant-within-a-raidz1-volume

  • 感谢您的详尽回复。我很欣赏重命名建议,但正如您怀疑的那样,我在 b 上有更多关于我不想要的数据。至少我现在可以继续前进,并通过缓冲磁盘复制文件以至少消除颠簸。 (4认同)