如何让 update-grub 在 /etc/fstab 中将 zfs 数据集识别为 root 并添加最少的 zfs 选项集?

如何让 update-grub 在 /etc/fstab 中将 zfs 数据集识别为 root 并添加最少的 zfs 选项集?

我无法找到如何让update-grub2.02 grub-efi~beta2-9ubuntu1 识别 ZFS 数据集作为根设备的规范,/etc/fstab并有条件地添加一组最小的 ZFS 选项没有编写代码(在/etc/grub.d/10_*或中/etc/default/grub)。

目前我的设置是,位于/ZFS 池上rpool2/ROOT/ubuntu-trusty-1/boot/位于 ext4 分区上,使用 EFI 启动(所有条目都在 中/etc/fstab),磁盘具有 GPT。这需要root=ZFS=rpool2/ROOT/ubuntu-2 boot=zfs bootfs=rpool2/ROOT/ubuntu-2 rpool=rpool2而不是root=/dev/sda5仅作为linux中的指令的参数/boot/grub/grub.cfg,并且自动添加是我的目标是。

据我所知,解决方案应该独立于在多重引导中设置其他系统。我在 Ubuntu 14.04 amd64 上运行。我安装了ubuntu-zfs0.6.3 并zfs-initramfsppa:zfs-native/stable

更多细节:这个问题已经出现在 Github 上的一些问题报告中(例如https://github.com/zfsonlinux/grub/issues/10)。对我而言,研究的结果是,需要一个“zfs 感知”的 grub 版本,该版本需要来自源代码(因为 PPAppa:zfs-native/grub仅支持到 13.04,缺少对 14.04 的支持,已在https://github.com/zfsonlinux/grub/issues/12)。当前从源代码构建的版本有错误,例如由于超出我理解范围的LANG=C apt-get source --build grub-efi冲突而失败,详细信息:libzfs-dev

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Picking 'grub2' as source package instead of 'grub-efi'
NOTICE: 'grub2' packaging is maintained in the 'Git' version control system at:
git://anonscm.debian.org/pkg-grub/grub.git -b experimental
Skipping already downloaded file 'grub2_2.02~beta2-9ubuntu1.dsc'
Skipping already downloaded file 'grub2_2.02~beta2.orig.tar.xz'
Skipping already downloaded file 'grub2_2.02~beta2-9ubuntu1.debian.tar.gz'
Need to get 0 B of source archives.
Skipping unpack of already unpacked source in grub2-2.02~beta2
dpkg-buildpackage: source package grub2
dpkg-buildpackage: source version 2.02~beta2-9ubuntu1
dpkg-buildpackage: source distribution trusty
dpkg-buildpackage: source changed by Colin Watson <[email protected]>
dpkg-buildpackage: host architecture amd64
 dpkg-source --before-build grub2-2.02~beta2
dpkg-checkbuilddeps: Build conflicts: libzfs-dev libnvpair-dev
dpkg-buildpackage: warning: build dependencies/conflicts unsatisfied; aborting
dpkg-buildpackage: warning: (Use -d flag to override.)
Build command 'cd grub2-2.02~beta2 && dpkg-buildpackage -b -uc' failed.
E: Child process failed

即我无法估计这个冲突有多严重,以及我是否监督了 github 上众多解决问题和/或引用修复的问题报告之一。

答案1

我创建了一个补丁,可在https://code.launchpad.net/~krichter722/+junk/grub2_zfs_support_improvement。只要它没有集成到包中(如果它没有被拒绝)。应该可以使用

sudo apt-get update
sudo apt-get build-dep grub-efi # after you set up sources in apt repositories
bzr branch lp:~krichter722/+junk/grub2_zfs_support_improvement
cd grub2_zfs_support_improvement
./autogen.sh
./configure --with-platform=efi
make
sudo make install
sudo mv /etc/grub.d/10_linux /etc/grub.d/10_linux.bk
sudo cp 10_linux /etc/grub.d/

然后您就可以sudo update-grub照常运行(grub将安装的实验版本!)。

相关内容