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

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

我在同一个 zfs 池中有两个文件系统,/mnt/fs_a并且/mnt/fs_b.我想将大约 1TB 的数据从 移动fs_afs_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_ato的内容fs_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

相关内容