Alpine Linux Bootloader

在Alpine Linux中,可以选择使用以下4种 bootloader :

  • rEFInd

  • Syslinux

  • Grub

  • EFI Boot Stub

警告

其实系统不使用bootloader也能启动,实际上 alpine linux 默认没有安装 bootloader (类似 Raspbery Pi OS(Raspbian) ),见下文。

备注

我在 树莓派环境安装Alpine Linux到USB磁盘启动 还没有意识到 树莓派Raspberry Pi 4 默认firmware使用的是传统的BIOS模式,这导致不能满足服务器架构的ARM SBBR ,出现 排查树莓派OpenRC:acpid crashed 现象。解决的方法是需要转换成 树莓派UEFI+ACPI

本文将分析 Alpine Linux 所使用的不同Bootloader,为后续转换UEFI做准备。此外, Alpine Linux运行Docker 需要修订内核参数,也需要深入了解Bootloader。

rEFInd

rEFInd 提供了一个图形化方式EFI启动菜单,并且可以允许启动到能够找到的分区上的操作系统。我最早在MacBook安装多操作系统启动(macOS + Linux)时使用过这个工具,确实对于MacBook上切换操作系统比较方便。

  • 安装 refind

    apt install refind  # 在debian/Ubuntu上安装refind
    refind-install --alldrivers  # 将refind安装到EFI分区,此时 --alldrivers 参数会为多个分区的操作系统准备启动项
    

/mdeia/sdXY (假设这是EFI分区)的配种加上默认启动Alpine:

echo '"Alpine" "modules=loop,squashfs,sd-mod,usb-storage quiet initrd=\boot\intel-ucode.img initrd=\boot\amd-ucode.img initrd=\boot\initramfs-lts"' > /media/sdXY/boot/refind_linux.conf

alpine不使用bootloader

我仔细检查了 树莓派环境安装Alpine Linux到USB磁盘启动 的系统,发现并默认并没有安装上述4种bootloader中的任何一个。但是系统只要设置了 /dev/sda1 是启动分区(并挂载到 /boot )就能够启动。

内核启动参数是通过 /media/sda1 (启动分区)的根目录下 cmdline.txt 配置的:

我是怎么看出来的呢?

  • cat /proc/cmdline 的内容是:

    coherent_pool=1M 8250.nr_uarts=0 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 bcm2708_fb.fbwidth=0 bcm2708_fb.fbheight=0 bcm2708_fb.fbswap=1 smsc95xx.macaddr=DC:A6:32:C5:48:9C vc_mem.mem_base=0x3eb00000 vc_mem.mem_size=0x3ff00000  modules=loop,squashfs,sd-mod,usb-storage quiet console=tty1 root=/dev/sda2
    
  • /media/sda1/cmdline.txt 内容是:

    modules=loop,squashfs,sd-mod,usb-storage quiet console=tty1 root=/dev/sda2
    

可以看到上述 /media/sda1/cmdline.txt 内容就是内核参数的最后一部分,所以在 Alpine Linux运行Docker 中配置内核参数需要修订的是 /media/sda1/cmdline.txt 而不是 /media/sda1/boot/cmdline.txt (是 /boot 软连接到 /media/sda1/boot )。

这块内容和我之前在 树莓派环境安装Alpine Linux到USB磁盘启动 操作有关,我感觉当时没有仔细检查 添加 sda2 分区作为系统分区 操作时的分区内容。有待后续再次实践时验证。

参考