使用 syslinux 启动无分区磁盘

XZS*_*XZS 5 boot partition boot-loader btrfs syslinux

文件系统可以配置为跨越整个磁盘,省略任何分区表。请注意,执行此操作的命令故意不使用/dev/sda1原始的、未分区的设备。

mkfs.btrfs /dev/sda
Run Code Online (Sandbox Code Playgroud)

Arch Linux Wiki 中关于 btrfs 的文章中提到了这个想法。我在使用 btrfs 文件系统作为唯一存储的虚拟机中尝试了这一点。它甚至可以按照wiki 中的说明使用 grub 启动。ext3、ext4 和 jfs 也以这种方式工作。我只测试了这些,但大多数文件系统都会将第一个块放置一个偏移量,从而为引导记录留出足够的空间。

现在我想使用 syslinux 而不是 grub。前面提到的 wiki已经指出,这需要专门放置ldlinux.sys,但不包括解决此问题的说明。我高度怀疑通常的mbr.bin文件也不合适,因为它通常负责读取分区表并找到活动的可引导分区。现在,找不到分区。

有人有在无分区磁盘上使用 syslinux 的经验吗?无分区磁盘可以使用 syslinux 启动吗?

XZS*_*XZS 5

主引导记录/BIOS

将 syslinux 安装到分区磁盘时发出的命令通常有两个。

extlinux --install /boot/syslinux
Run Code Online (Sandbox Code Playgroud)

第一行安装卷引导记录,固定放置在分区的开头。它负责从文件系统加载引导加载程序的文件。他们通常居住在/boot/syslinux.

dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/bios/mbr.bin of=/dev/sda
Run Code Online (Sandbox Code Playgroud)

第二行安装主引导记录,固定在磁盘的开头。它的任务是读取分区表并在标记为活动的分区中找到上述卷引导记录。

在本例中,分区和磁盘是相同的,因此dd会覆盖 extlinux 创建的数据。但一开始不需要主引导记录。没有可读取的分区表。所以神奇的解决方案就是完全省略这条dd线。

因此,使用没有分区表的文件系统不仅可以节省空间,而且还可以节省引导过程中的一个步骤。


GPT/EFI

对于 EFI,这只能与传统引导一起使用,它将读取 MBR/VBR 并相应地引导。这样做的话,EFI 的大部分优势都会丧失。

使用带有 GPT 的 EFI 引导,始终需要 FAT32 EFI 系统分区来读取可执行文件,该可执行文件可以是 EFI shell 或要引导的内核。因此,在现代设置中,分区是不可避免的且固有的。由于 EFI 本身就像引导加载程序,因此也无需像 MBR 那样保存任何步骤。