如何使用 squashfs 映像作为 rootfs 启动

如何使用 squashfs 映像作为 rootfs 启动

我从系统根目录制作了一个 squashfs 映像,我想将其放在 USB 驱动器上的一些 Live ISO 中,并使用 GRUB2 制作启动菜单。

我应该使用什么内核启动参数来指定 Squashfs 映像作为根文件系统?

我用它作为 grub 配置,但是 Dracut失败查找并挂载 root:

insmod gzio
insmod xzio
insmod part_msdos
insmod squash4
insmod iso9660
insmod ext2
insmod btrfs
insmod regexp
menuentry 'Fedora Workstation' {
    set imgfile=/images/fedora*.squashfs
    loopback loop0 /$imgfile
    linux16 (loop0)/boot/vmlinuz-4.1.8-200.fc22.x86_64 ro rd.fstab=0 root=$imgfile elevator=deadline enforcing=0 #rhgb quiet LANG=en_US.utf8
    initrd16 (loop0)/boot/initramfs-4.1.8-200.fc22.x86_64.img
}

答案1

在我看来,您仍然应该使用 initramfs。几乎任何都可以,但是您需要squashfs文件系统内核模块(如果它尚未编译到您的内核中)在您的 initramfs 映像中。

大多数 initramfs 系统都尊重 fstab——Dracut 也确实如此。因此,您只需配置两个/etc/fstab文件 - 一个在您的.sfs映像中,一个在 initramfs 映像中。

{   cd /tmp; cat >fstab
    mkdir -p sfs/sfs sfs/usb
    dracut  -i fstab /etc/fstab     \
            -i sfs sfs              \
            --add-drivers overlay   \
            --add-drivers squashfs  \
            initramfs.img 
}   <<"" #FSTAB
    UUID={USB-UUID}     /sfs/usb    $usbfs      defaults    0 0
    /sfs/usb/img.sfs    /sfs/sfs    squashfs    defaults    0 0

老实说,我对dracutinitramfs 构建系统并不完全熟悉,因此要成功完成该命令可能还需要一些东西。我正在一般熟悉大多数 initramfs 安装的设置方式以及我在man页面中找到的信息dracut 这里。可能需要进行一些进一步的组装,但这应该会让您进展顺利。

在您安装了适当的/etc/fstabinitramfs 后,您应该能够使用以下与根设备相关的参数来获取 overridefs rootfs:

root=overlay \
rootfstype=overlay \
rootflags=\
lowerdir=/sfs/sfs,\
upperdir=/sfs/usb/persist,\
workdir=/sfs/usb/tmp

这假设您的 USB 驱动器上有一个名为 的目录/persist和另一个名为 的空目录/tmp,并且可以在 USB 文件系统的根目录中找到您的 squashfs 映像,名称为/img.sfs.

相关内容