我试图在无法启动的台式计算机上安装 GRUB,但遇到了几个错误。其他讨论这些错误的来源将其归因于第一个分区之前缺少可用磁盘空间(我拥有所需的可用空间),或问题/boot/grub/grub.cfg
(即使正确重新生成该文件后问题仍然存在)。
我使用实时 USB 启动并尝试使用以下命令重新安装 GRUB,但遇到阻止其运行的错误:
$ sudo mount /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 字节 磁盘标签类型: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
来重建配置文件:
$ for f in proc sys dev dev/pts ; 执行 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
。
grub-mkconfig
在传统模式下启动实时 USB,我收到相同的错误;唯一的区别是在环境中运行的输出chroot
:
# 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?
答案1
消除引导扇区和第一个分区之间的间隙。
# dd if=/dev/zero of=/dev/sdX seek=1 count=2047
这是针对第一个分区从扇区 2048 开始的情况。有些分区从扇区 2048 开始,尤其是在由 Windows 分区的驱动器上。为确保万无一失,请运行
# fdisk -l /dev/sdX
在开始之前检查第一个分区从哪里开始。使用count=S-1
,其中 S 是第一个分区的开始。
答案2
可以在 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
现在应该可以按预期工作了。
答案3
多个分区标签也存在类似的问题,尽管我很确定事实并非如此。
sudo grub-install target=i386-pc /dev/sda --force
是我以前解决这个问题的方法。添加一个--force
不是“推荐”的解决方案,但到目前为止我没有遇到任何问题 =P
答案4
这是我让它再次运行的方法:
用于gdisk
将 MBR 分区转换为 GPT,将分区插入空白处(类型 EF02“BIOS 启动分区”),将其条目与我原来的分区转置,并将其标记为可启动的旧式 BIOS。
然后跑了
$ sudo mount /dev/sda1 /mnt $ sudo grub-install --root-directory=/mnt /dev/sda
然后它安装成功,我能够启动到主驱动器。