如何将GRUB安装到没有分区表的整个ext4磁盘上?


15

目前,我将整个磁盘/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. 

同样没有grub工作,

# grub
grub> root (hd0)
 Filesystem type unknown, using whole disk

grub> setup (hd0)
 Error 17: Cannot mount selected partition

在没有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

如果您可以包括所使用的命令以及尝试安装时收到的错误消息,将很有帮助。例如,您尝试过grub-install /dev/sda吗?
phunehehe

我已经使用MBR重新创建了磁盘布局,并将原始文件系统复制到了磁盘的单个分区中。不过,我将重试新的Gento安装,并在一段时间后粘贴错误消息。谢谢
谢杰利

编辑我已经添加了错误信息。
谢耶利

Answers:


5

BIOS读取磁盘的第一个扇区(512字节)并分支到其中。如果您的磁盘包含PC样式的分区,则第一个扇区也包含分区表。如果磁盘包含单个文件系统,则第一个扇区包含文件系统决定放置在该文件系统中的任何内容。在ext [234](和许多其他文件系统)的情况下,第一个扇区¹保留用于引导加载程序(并最初清零)。您可以在安装Grub /dev/sda

话虽如此,有些BIOS拒绝从不包含分区表的设备启动。(但是,如果某些BIOS确实包含分区表,则有些BIOS拒绝从某些外部设备引导!)如果您具有这些BIOS之一,则必须创建一个分区表。

即使不需要分区表,也建议使用。您只浪费了几千字节,并且在许多非Linux操作系统下获得了可读性,并且对任何co-sysadmin而言都没有什么惊喜。如果您不小心将磁盘插入运行Windows的计算机,则可能会建议您在没有看到分区表的情况下重新格式化磁盘,而如果看到有分区表,它只会抱怨无法读取数据。无法识别的分区类型。

¹ 实际上,我认为第一个块是1kB,2kB或4kB,具体取决于传递给的选项mkfs


5
由VirtualBox中的访客Gentoo OS使用。我创建了一个.raw后端的.vmdk虚拟磁盘image.ext4。我将整个磁盘用于一个文件系统的原因是,我想直接在主机OS中挂载卷,而没有像这样的棘手的分区偏移量-o loop,offset=1048576
谢雷(YièJìléi)2010年

1
在相关情况下,我们将FC磁盘连接到系统。它们是供数据库或LVM使用的JBOD,旨在实现无分区。当使用重新安装Grub时--recheck,它将使用那些无分区的驱动器更新其映射表,然后在它检查不存在的分区表时抱怨。如果我从映射文件中删除这些驱动器路径,则警告消失。
Otheus 2015年


0

几乎所有东西都需要一个分区表。我认为您将必须重新安装,并遵循建议的至少具有/ boot,swap和/ root分区的准则。您的交换在哪里?


4
Linux不在乎。大多数BIOS不在乎(尽管有些在乎)。不需要单独的交换分区和引导分区,并且/boot不再建议在现代硬件上使用(这是绕过BIOS对磁盘大小的限制以及缺乏对高级磁盘模式(例如Grub 1中的LVM)的支持的一种尝试。
吉尔(Gilles)“所以,别再邪恶了”,2010年

@Gilles您的意思是,我可以不带分隔地使用LVM /boot吗?如果是这样,为什么最好与保留/boot在相同的分区中/
phunehehe

2
@phunehehe:你可以有LVM无需单独/boot使用LILO或GRUB 2,但不使用GRUB 1.独立的/boot具有行政成本(你需要一个更分区,你需要小心不要混淆/boot/)因此,仅在有原因的情况下才使用它(例如,引导程序不了解LVM)。
吉尔(Gilles)“所以,别再作恶了”

1
@Gilles现在,您让我感到重新安装...
phunehehe 2010年

1
您还可以进行全盘加密之类的事情:)
XTL 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.