我按照通常的方式将 GRUB2 安装在 /dev/sda 上(MBR 中的阶段 1 和扇区 0-63 中的阶段 1.5);我正在使用 BIOS/MBR。我的磁盘上有四个分区:
- Win10 100 MB -- 保留
- Win10 30GB
- Linux 20GB
- 数据分区(将其视为
/home
)——磁盘的其余部分
当然,GRUB2 的第 2 阶段安装/dev/sda3
在/boot/grub/
.现在的问题是,我可以擦除/dev/sda3
并/dev/sda4
仍然能够从 GRUB 命令行手动启动到 Win10 吗?使用insmod part_msdos
等insmod ntfs
,最多chainloader +1
.
根据维基百科,没关系,但互联网上的一些其他来源表明您在删除第 2 阶段后可能会陷入困境(不过,这些来源可能指的是 GRUB 遗留版本)。
为什么我需要这样做?我想延长/dev/sda2
。据我所知,最可靠的方法是使用标准的 Win 10 磁盘分区工具(我不太相信 Linux 会这样做)。在启动到您试图扩展的同一分区时这样做据说是有风险的,但我已经做到了,而且效果很好(还有一些第三方软件可以通过在引导之间扩展来更平滑地处理它)。
所以,我想删除/dev/sda3/
, /dev/sda4/
, 扩展/dev/sda2/
,然后启动到 Live USB,重新分区未分配的空间,安装 Linux,安装 GRUB 并完成。
我只担心,如果出现问题(通常会发生)怎么办,我是否能够手动启动?
还有另一种方法:将 GRUB2 Stage 2 安装到 USB 上(在我的 BIOS 引导顺序中,USB 位于 HDD 之前)并从 USB 引导。但这很笨拙(我以前从未这样做过),所以如果可能的话我宁愿避免它。
(当然,我确实备份了。)
答案1
事实证明它不是照原样,但是这是经过初步的额外努力。
我做了什么
- 从 Linux LiveUSB 启动,挂载
/dev/sda3
(带 grub 的 Linux 分区),mv /boot/grub /boot/grib
(或任何其他操作,只是为了让阶段 1.5 不再能找到阶段 2) - 从 HDD 重新启动,grub 不出所料地无法加载第 2 阶段并退回到 grub 救援模式
- 但是,救援模式仅提供非常少的支持,因此,例如,您可以运行
insmod part_msdos
,但insmod ntfs
、 或chainloader +1
等等都不起作用。ext4
不过(当然)它支持。 - 我能够手动加载所有需要的模块(使用完整路径,如
insmod (hd1,msdos3)/boot/grib/i386-pc/ntfs.mod
,或者简单地先设置前缀:set prefix=(hd1,msdos3)/boot/grib
然后使用相对路径insmod ntfs
:) - 您可以通过加载普通模块然后输入
normal
将 grub 从救援模式转移到类似 bash 的 grub 命令行来让您的生活变得更轻松。从那里,您可以再次加载所有需要的模块(例如,还必须加载 chainloader 模块) - 最后,通过复制与中相同的命令序列来加载 Win10(或其他任何东西)
grub.cfg
解决方案
i386-pc
因此,考虑到这一切,我认为作为临时解决方案,只需将整个目录复制到单独的 USB 并根据需要手动加载模块就可以了。只需确保单独的 USB 格式化为 MBR 并有一个ext4
分区。
更新:确实有效。只需将 U 盘格式化为 MBR、创建ext4
分区并从之前的安装中进行复制(正确配置)/boot/grub/
即可。当 grub 回退到 grub rescue 时,只需输入set prefix=(hdX,msdosY)/boot/grub
(其中X
是 USB 驱动器的编号,Y
是相应的分区),然后insmod normal
和normal
。就是这样,grub 第 2 阶段加载并工作得很好。