我已经使用 ZFS 在 Dell PowerEdge R720xd 上安装了 Ubuntu 18.04。mirror
ZFS配置中有两个 1TB 引导驱动器。我按照Linux Wiki 上的 ZFS中的说明进行操作。
(注意:我的系统使用的是 LSI LSI00244 (9201-16i) 主机总线适配器 (HBA) 而不是板载 RAID 卡,因为 ZFS 和这个 RAID 卡不能相处。)
启动 Ubuntu 时,系统枚举驱动器大约需要 10 秒钟(有 14 个驱动器 - 两个用于操作系统,12 个用于稍后将在其他 zpool 中设置的数据存储)。但是,引导过程会在驱动器被枚举之前尝试导入引导池。
BusyBox 错误消息在屏幕上闪过,它基本上说:
池无法导入。
在此 BusyBox shell 中手动导入池,然后键入
exit
以继续引导过程。
如果我在该消息后等待几秒钟,我会看到 14 个驱动器被列出。
我zpool import rpool
在 BusyBox 提示符下键入,该提示符有效(用 确认zpool list
),然后exit
继续启动过程。(这导致了我的下一个问题,内核崩溃,但这是一个单独的问题。)
我尝试添加rootdelay=15
引导选项,但这似乎不起作用,因为它似乎想在 ZFS 池导入后运行该延迟。
在尝试导入池之前,如何让引导过程等待设备出现?
我终于在以下位置找到了这个
/etc/default/zfs
:以下是如何设置它。
/mnt
使用zpool import rpool -R /mnt
mount --rbind /dev /mnt/dev; mount --rbind /proc /mnt/proc; mount --rbind /sys /mnt/sys
/mnt
:chroot /mnt /bin/bash --login
/etc/default/zfs
以将上面的值从更改0
为15
update-initramfs
和update-grub
2022 年 5 月 27 日更新:
我安装并运行带有 ZFS-on-root(和 ext4
/boot
分区)的 Ubuntu 22.04。但是,根据我遇到的问题,我建议不要在 Linux 上使用 ZFS-on-root。
具体来说,似乎:Linux + ZFS-on-root + 快照(可能还与绑定挂载和/或容器结合使用)可能会导致问题。更具体地说:快照问题。
通过为根文件系统创建一个 ZFS 池并为其他所有内容创建一个单独的 ZFS 池,这些问题可能会得到缓解或避免。但我没有试过这个。
如果您确实想尝试在 Linux 上运行 ZFS-on-root,我建议您首先在 GitHub 上搜索打开和关闭(!)问题,以熟悉您可能遇到的问题。
我遇到的问题似乎在以下 GitHub 问题报告中有所提及: 816、 4514、 9461、 9479、 9958、 10348,可能还有更多。
由于许可证冲突,OpenZFS 将(很可能)永远不会与 Linux 内核合并。因此,我怀疑 OpenZFS 永远不会像 Linux 上的根文件系统那样接受像直接构建在 Linux 内核中的 GPL 许可文件系统(例如 ext4、Btrfs、XFS)那样多的测试。
2022 年 5 月 20 日的原始答案:
从 Ubuntu 22.04 开始,添加
ZFS_INITRD_POST_MODPROBE_SLEEP='15'
to/etc/default/zfs
仍然可以解决问题。(旁白:就我而言,我只需要1
延迟一秒。)但是,我认为值得指出的是,两者...
ZFS_INITRD_POST_MODPROBE_SLEEP
ZFS_INITRD_PRE_MOUNTROOT_SLEEP
...现在已弃用并已从 (
/etc/default/zfs
note1 , note2 , pull request)中删除。此处描述了弃用的理由。
简而言之,似乎现在
rootdelay=n
应该使用一个内核命令行选项。如果您想查看使用这些变量的实际 OpenZFS initramfs 脚本,请访问:
https ://github.com/openzfs/zfs/blob/master/contrib/initramfs/scripts/zfs