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