几天前,我的电脑满了,我去别人家过新年,所以我想回家后就导出一些东西。我到家了,但我的电脑关机了,所以我试着启动它,大约 20 分钟过去了,它仍然没有启动,所以我四处检查,果然,当 ZFS 驱动器装满时,它会停止启动,但这不是我的问题,我一直想换一种口味,这似乎是个绝佳的机会,我只需要我的数据。
每次我在分区上运行 zpool import 时,整个命令提示符都会冻结,甚至无法使用Ctrl+C退出命令,我尝试了很多 zpool 和 zfs 命令,但到目前为止都没有用,我甚至在 zpool 上尝试了 -F 标志;毫无效果。任何帮助都非常感谢,我知道 ZFS 是一项实验性功能,但我认为,让计算机在驱动器填满后不会停止启动是 canonical 可能需要研究的事情。
我使用的是 20.04LTS,没什么特别的,我只是选择了默认的 zfs 选项。
答案1
虽然本身并不是真正的“解决方案”,但也许是一些值得思考的东西。;-)
我认为您可能只需要对 ZFS 多一点耐心(也许还要添加一些 RAM!)然后让它完成工作... :-)
正如您所说,如果您的 zpool 容量已达到 100%,那么 ZFS 可能会变得非常慢!
我的容量似乎不是很大,也没有那么“满”——但完成擦洗仍然需要很长时间。
想象一下,当数据的完整性依赖于 Merkle 树时,ZFS 需要处理多少信息 -https://en.wikipedia.org/wiki/Merkle_tree
那么,为什么它会这么慢呢?
至少有两个简单的原因(两者都将接近 100% 的容量!):
- 没有特定于数据的数据集(例如,一个数据集中的大文件,另一个数据集中的小文件)
- 块大小并未针对数据集的内容进行调整 - 参见上文观点和 Merkle 树链接。
truenas% zpool list Storage
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
Storage 14.5T 10.9T 3.66T - - 0% 74% 1.00x ONLINE /mnt
truenas% zfs list Storage
NAME USED AVAIL REFER MOUNTPOINT
Storage 5.27T 1.55T 192K /mnt/Storage
truenas% zpool status Storage | grep scrub
scan: scrub repaired 0B in 05:33:26 with 0 errors on Sun Jan 10 05:33:26 2021
虽然这是一个老例子,但它可能仍然与您有一定相关性 - 我们不知道您的系统配置是什么,或者您的池在文件和布局等方面由什么组成。
https://github.com/openzfs/zfs/issues/864
也可以看看:
https://openzfs.org/wiki/System_Administration#Data_Integrity
https://youtu.be/Js535LqapFE
顺便说一句:对于您的文件系统来说,无法Ctrl+是件好事。尽管如此,有时您还是希望自己能够+尤其是当您发现自己遇到“糟糕!”的时刻时!CCtrlC
编辑:这也可能是为什么导入需要这么长时间的原因 -https://serverfault.com/a/213866/255055