目前我将整个磁盘/dev/sda
格式化为 ext4,并安装了 Gentoo。
(没有MBR,根本没有分区。)
但最后,我无法在其上安装 GRUB,因为似乎 GRUB 需要写入 MBR。
# grub-install /dev/sda
Unknown partition table signature
Unknown partition table signature
Unknown partition table signature
Unknown partition table signature
Unknown partition table signature
The file /boot/grub/stage1 not read correctly.
Run Code Online (Sandbox Code Playgroud)
两者都grub
不起作用,
# grub
grub> root (hd0)
Filesystem type unknown, using whole disk
grub> setup (hd0)
Error 17: Cannot mount selected partition
Run Code Online (Sandbox Code Playgroud)
有什么办法可以在没有 MBR 的情况下将 GRUB 安装到 /dev/sda 中?
PS/boot
目录和grub.conf
文件:
# tree /boot
/boot
|-- boot -> .
|-- grub
| |-- default
| |-- device.map
| |-- e2fs_stage1_5
| |-- fat_stage1_5
| |-- ffs_stage1_5
| |-- grub.conf
| |-- iso9660_stage1_5
| |-- jfs_stage1_5
| |-- menu.lst -> grub.conf
| |-- minix_stage1_5
| |-- reiserfs_stage1_5
| |-- splash.xpm.gz
| |-- stage1
| |-- stage2
| |-- stage2_eltorito
| |-- ufs2_stage1_5
| |-- vstafs_stage1_5
| `-- xfs_stage1_5
`-- kernel-2.6.36-gentoo-r5
# cat /boot/grub/grub.conf
default 0
timeout 30
splashimage=(hd0)/boot/grub/splash.xpm.gz
title Gentoo Linux 2.6.36-r5
root (hd0)
kernel /boot/kernel-2.6.36-gentoo-r5 root=/dev/sda
title Gentoo Linux 2.6.36-r5 Rescue
kernel /boot/kernel-2.6.36-gentoo-r5 root=/dev/sda init=/bin/bb
# cat /boot/grub/devices
(fd0) /dev/fd0
(hd0) /dev/sda
Run Code Online (Sandbox Code Playgroud)
BIOS 读取磁盘的第一个扇区(512 字节)并进入该扇区。如果您的磁盘包含 PC 样式的分区,则第一个扇区也包含分区表。如果您的磁盘包含单个文件系统,则第一个扇区包含文件系统决定放置在那里的任何内容。在 ext[234](和许多其他文件系统)的情况下,第一个扇区¹是为引导加载程序保留的(并且最初被清零)。您可以在/dev/sda
.
话虽如此,偶尔会有 BIOS 拒绝从不包含分区表的设备启动。(但也有 BIOS 拒绝从某些包含分区表的外部设备引导!)如果您有这些 BIOS 之一,则必须创建一个分区表。
即使不需要分区表,也建议使用。您只浪费了几千字节,并在许多非 Linux 操作系统下获得了可读性,并且不会让任何协同系统管理员感到惊讶。如果您不小心将磁盘插入运行 Windows 的机器,如果它没有看到分区表,它可能会建议您重新格式化磁盘,而如果它看到分区表,它只会抱怨它无法读取数据它无法识别的分区类型。
¹事实上,我认为第一个块是 1kB、2kB 或 4kB,具体取决于传递给mkfs
.