我有一个压缩的加密 zfs 数据集,它似乎已经完全丢失了。谷歌搜索到了很多“zfs 丢失数据集”或类似的内容,它们几乎总是类似于数据集未自动挂载,但它实际上仍然存在。在我看来,这似乎不是问题所在。我看不到数据集的任何迹象,但历史记录中没有任何内容表明它被销毁了。
root@ryzen:~# zpool history epool
History for 'epool':
2020-06-05.18:15:43 zpool create -f -m /extra epool /dev/disk/by-id/ata-WDC_WD80EFAX-68KNBN0_VDJ8GVBD
2020-06-05.18:17:02 zfs create epool/USERDATA
2020-06-05.18:18:14 zfs set mountpoint=none epool
2020-06-05.18:20:20 zfs create -o mountpoint=/extra/ian epool/USERDATA/ian_i01gxn
2020-06-06.00:32:47 zpool import -c /etc/zfs/zpool.cache -aN
2020-06-06.00:44:55 zpool attach epool /dev/disk/by-id/ata-WDC_WD80EFAX-68KNBN0_VDJ8GVBD /dev/disk/by-id/ata-WDC_WD80EFAX-68KNBN0_VDJ63U4K
2020-06-07.23:24:31 zfs set compression=on epool
2020-06-07.23:29:21 zfs rename epool/USERDATA/ian_i01gxn epool/USERDATA/ian_i01gxn_old
2020-06-07.23:35:23 zfs create -o compression=on -o encryption=on -o keyformat=passphrase epool/USERDATA/ian_i01gxn
2020-06-07.23:35:45 zfs set mountpoint=/extra/ian2 epool/USERDATA/ian_i01gxn
2020-06-08.12:32:30 zfs set mountpoint=/extra/ian epool/USERDATA/ian_i01gxn
2020-06-08.12:34:18 zfs destroy epool/USERDATA/ian_i01gxn_old
2020-06-14.00:24:11 zpool scrub epool
2020-06-18.17:37:32 zpool import -c /etc/zfs/zpool.cache -aN
2020-06-18.17:40:31 zfs load-key epool/USERDATA/ian_i01gxn
2020-06-18.18:47:25 zpool import -c /etc/zfs/zpool.cache -aN
2020-06-18.18:50:09 zfs load-key epool/USERDATA/ian_i01gxn
2020-06-18.19:26:06 zpool set autoexpand=on epool
2020-06-27.01:18:08 zpool import -c /etc/zfs/zpool.cache -aN
2020-06-27.02:31:48 zpool import -c /etc/zfs/zpool.cache -aN
2020-06-27.02:49:49 zpool import -c /etc/zfs/zpool.cache -aN
这显示了在镜像池上创建数据集 epool/USERDATA/ian_i01gxn。然后我往里面填了一些东西。之后我认为我应该对它进行加密和压缩,所以我重命名了它,创建了另一个加密和压缩数据集,复制了文件,并销毁了原始数据集。此后一切都运行正常,您可以看到系统重新启动了几次,我重新加载了密钥。昨晚我又进行了一次内核升级,并对 BIOS 配置进行了一些小调整,这需要重新启动几次。现在数据集 epool/USERDATA/ian_i01gxn 已经消失了:
root@ryzen:~# zfs load-key epool/USERDATA/ian_i01gxn
cannot open 'epool/USERDATA/ian_i01gxn': dataset does not exist
root@ryzen:~# zfs list
NAME USED AVAIL REFER MOUNTPOINT
bpool 750M 1.02G 96K none
bpool/BOOT 746M 1.02G 96K none
bpool/BOOT/ubuntu_xqma33 746M 1.02G 196M /boot
bpool/BOOT/ubuntu_xqma33/grub 16.6M 1.02G 7.46M /boot/grub
epool 29.1M 7.04T 104K none
epool/USERDATA 96K 7.04T 96K none
rpool 569G 1.19T 192K none
rpool/ROOT 254G 1.19T 192K none
rpool/ROOT/ubuntu_xqma33 254G 1.19T 25.0G /
....
root@ryzen:~# zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
bpool 1.88G 750M 1.14G - - 5% 39% 1.00x ONLINE -
epool 7.27T 29.8M 7.27T - - 0% 0% 1.00x ONLINE -
rpool 1.80T 569G 1.25T - - 13% 30% 1.00x ONLINE -
zpool 列表显示池中只分配了几 MB,而实际上应该有几 TB。我可以恢复大部分数据,因为这是最近的硬盘升级,我仍有旧硬盘,但我使用带有镜像磁盘的 ZFS,这样我就再也不用担心数据丢失了(合理的定义是“永不”。所以这很可怕,我似乎丢失了数据。有人知道发生了什么吗?
答案1
我刚刚在 Ubuntu 20.04 上遇到了同样的问题。但在我的例子中,由于系统锁定而强制关机后加密数据集消失了。
我发现当我运行“zpool history -i poolname”来获取更多详细信息时,其中“poolname”是包含加密数据集的池 - 加密数据集在某个时候被明确销毁!
所以也请检查一下你的。鉴于这是一个明确的破坏,我不认为这是一个 ZFS 错误,而是一个 Ubuntu 20.04 错误。我仍在调查,但我认为在这种情况下,某些启动时服务正在出于某些不正当的原因清理数据集。
编辑:似乎其他人在最近几个月也遇到了这个问题。怀疑是 Ubuntu 的 Zsys。有关更多信息,请参阅此答案和评论:为什么 ZFS 上的 Ubuntu 20.04 会在启动时 zpool.cache 的 zpool 导入时破坏自定义数据集?
再次编辑:以防万一,也许可以节省你一些时间 - 我们确实遇到了这个错误https://github.com/ubuntu/zsys/issues/103,出于某些原因,该网站已被关闭。在我们的两个案例中,并不是数据集被加密,而显然只是它在 USERDATA 数据集中。我必须阅读更多内容,但这对我来说似乎不合理。