我在同一个 zfs 池中有两个文件系统,/mnt/fs_a
并且/mnt/fs_b
.我想将大约 1TB 的数据从 移动fs_a
到fs_b
。但是当我:
mv /mnt/fs_a/mythtv_recordings /mnt/fs_b/
令我惊讶的是,它开始逐块复制文件。考虑到移动 2GB 文件所花的时间,看起来这项操作需要几天的大量抖动才能完成。
必须有一种更智能、更快速的方法来做到这一点,对吧?
答案1
不幸的是,答案是“否”。没有更快、更智能的方法来做到这一点。
ZFS 文件系统(即使它们位于同一池中)是单独的文件系统。任何其他工具都不能mv
仅移动块指针或其他任何东西,以便以前打开的文件fs_a
现在打开fs_b
。
(顺便说一句,同一磁盘或 raid 阵列上的多个格式化分区或 LVM 卷也是单独的文件系统,并且mv
也可以对它们进行复制和删除)
多年来,这个问题已经多次出现(有人谈论创建一个工具来做你想做的事情),据我了解,将其放入太难的篮子中的主要困难是如何处理快照的问题- 如果有 的快照fs_a
,则这些块将同时位于两个文件系统中。具有硬链接的文件也是如此。
我自己已经遇到过很多次(例如,当像您一样在数据集之间移动文件时,或者当我需要将子目录转换为文件系统时),并且刚刚学会忍受这种不便。它可以是一个主要的 PITA。
如果fs_b
为空或尚不存在并且您想要移动全部的fs_a
to的内容fs_b
(不仅仅是一些甚至大多数文件和目录),您可以用来zfs rename
重命名fs_a
为fs_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