`install-grub`声称我有多个分区标签,并且无法嵌入


19

我试图在非引导台式计算机上安装GRUB,但遇到几个错误。其他讨论这些错误的消息人士将其归因于第一个分区之前的可用磁盘空间不足(我有必需的可用空间),或存在问题/boot/grub/grub.cfg(即使正确地重新生成该文件后问题仍然存在)。

我使用活动USB启动,并尝试使用以下命令重新安装GRUB,但遇到错误,导致它无法正常工作:

$ sudo安装/ dev / sda1 / mnt
$ sudo grub-install --root-directory = / mnt / dev / sda
为i386-pc平台安装。
grub-install:警告:尝试将GRUB安装到具有多个分区标签的磁盘上。目前尚不支持。
grub-install:警告:无法嵌入。只能使用阻止列表在此设置中安装GRUB。但是,阻止列表是不可靠的,不鼓励使用它们。
grub-install:错误:不会继续执行阻止列表。

但是,/dev/sda似乎正确格式可用于安装grub:

$ sudo fdisk -l / dev / sda

磁盘/ dev / sda:111.8 GiB,120034123776字节,234441648扇区
单位:1 * 512的扇区= 512字节
扇区大小(逻辑/物理):512字节/ 512字节
I / O大小(最小/最佳):512字节/ 512字节
Disklabel类型:dos
磁盘标识符:0x8d91017b

设备启动起始端扇区大小ID类型
/ dev / sda1 * 2048 234440703 234438656 111.8G 83 Linux

$ blkid / dev / sda1
/ dev / sda1:UUID =“ 84e9ff65-c4ba-42eb-8a6d-ebc703fae1f7” TYPE =“ ext4” PARTUUID =“ 8d91017b-01”

开头具有标准的1 MiB可用空间,并且/dev/sda1格式正确。我尝试使用grub-mkconfig重建配置文件:

$代表proc sys dev dev / pts中的f;做sudo mount --bind / $ f / mnt / $ f; 完成
$ sudo chroot / mnt
#grub-mkconfig -o /boot/grub/grub.cfg
生成grub配置文件...
找到Linux映像:/boot/vmlinuz-3.19.0-26-generic
找到的initrd映像:/boot/initrd.img-3.19.0-26-generic
找到Linux映像:/boot/vmlinuz-3.19.0-23-generic
找到initrd映像:/boot/initrd.img-3.19.0-23-generic
添加启动菜单项以进行EFI固件配置
完成

但是,grub-install无论在chroot环境中还是环境中运行时,我仍然会收到相同的错误消息。

在传统模式下启动实时USB时,出现相同的错误;唯一的区别是grub-mkconfigchroot环境中运行的输出:

#grub-mkconfig -o /boot/grub/grub.cfg
生成grub配置文件...
找到Linux映像:/boot/vmlinuz-3.19.0-26-generic
找到的initrd映像:/boot/initrd.img-3.19.0-26-generic
找到Linux映像:/boot/vmlinuz-3.19.0-23-generic
找到initrd映像:/boot/initrd.img-3.19.0-23-generic
找到memtest86 +映像:/boot/memtest86+.elf
找到了memtest86 +映像:/boot/memtest86+.bin
在/ dev / sdc1上找到Windows 7(加载程序)
完成

如何正确安装grub?

Answers:


25

消除引导扇区和第一个分区之间的间隙。

# dd if=/dev/zero of=/dev/sdX seek=1 count=2047

这是因为第一个分区起始于扇区2048。某些分区较早启动,尤其是在Windows分区的驱动器上。可以肯定的是,运行

# fdisk -l /dev/sdX

在启动之前,请检查第一个分区的启动位置。使用count=S-1,其中S是第一个分区的开始。


这对我有用。我正在尝试在单独的ext4 / boot分区上使用BTRFS。谢谢。
Thales Ceolin

请注意,这将破坏GPT布局。可以从备份中恢复。
CR。

如果您使用的是GPT,则需要擦除BIOS BOOT PARTITION。那在哪里取决于您如何布置磁盘。我在框34和2047之间的GPT之后添加了我的位置,假设第一个“真实”分区从框2048开始。修改给定的命令行以seek=34 count=2014对我有用。
starfry

完美地工作!!!grub应该自动执行此操作
brauliobo

1
是的,您会这样认为,@ brauliobo,但是GRUB完全是垃圾。我什至不再使用它。这些天来,我将syslinux用于mbr,将systemd-boot用于gpt。
enigmaticPhysicist,

3

可以在GPT记录所在的位置创建一个新分区,然后使用擦除它dd。这样,将仅保留MBR记录。

假设问题设备是/dev/sda

在最初的1 MiB中创建一个新分区

$ parted /dev/sda
$ mkpart primary ext4 0MiB 1MiB
$ quit

然后,将新创建的分区归零

$ dd if=/dev/zero of=/dev/sda2

然后,删除分区

$ parted /dev/sda
$ rm 2
$ quit

grub-install 现在应该可以正常工作了。


修改您的答案,以证明该代码的作用以及为什么您认为它是一种解决方案。
马丁·桑顿

为我工作。为了清楚起见对其进行了编辑
-Nitz

3

多个分区标签也有类似的问题,尽管我很确定事实并非如此。

sudo grub-install target=i386-pc /dev/sda --force

这就是我过去解决这个问题的方法。后跟踪一个--force不是“推荐”的解决方案,但到目前为止,我还没有遇到任何问题= P


1

这是我所做的,再次使它工作:

用于gdisk将MBR分区转换为GPT,将分区插入空白空间(类型EF02“ BIOS引导分区”),将其条目与我的原始分区换位,并将其标记为可引导的旧BIOS。

然后跑

$ sudo安装/ dev / sda1 / mnt
$ sudo grub-install --root-directory = / mnt / dev / sda

然后,它成功安装,并且我能够启动到主驱动器。

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.