如何从 ZFS 格式化的驱动器恢复数据?

如何从 ZFS 格式化的驱动器恢复数据?

几天前,我的电脑满了,我去别人家过新年,所以我想回家后就导出一些东西。我到家了,但我的电脑关机了,所以我试着启动它,大约 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

相关内容