我在以前的 Windows(Vista)硬盘上运行 Linux Mint 系统。经过一年左右从未启动过 Windows,并且 Linux 系统分区出现空间问题后,我决定擦除 Windows 分区(现在是/dev/sda1
下面的主分区)并将 Linux 系统移至该分区。我遵循这指南,一切似乎都运行正常,直到我移动并重新配置 grub2、主引导记录和所有内容后重新启动,系统仍然使用旧分区引导。没有办法让它从 引导sda1
。
我的分区表:
我设法在新位置编辑了 grub.cfg、/etc/fstab,更新了 MBR,但系统无法在我想要的分区上启动。无论我做什么,我总是从旧分区启动。
我必须承认,并非所有内容都与指南中的内容完全一致。grub.cfg 中有一些意想不到的内容。以下是 grub.cfg 的摘录,我不得不在其中进行即兴创作。这是原始版本:
if [ "$linux_gfx_mode" != "text" ]; then load_video; fi
menuentry 'Linux Mint 17.1 Cinnamon 64-bit, 3.13.0-37-generic (/dev/sda5)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
set root='hd0,msdos5'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos5 --hint-efi=hd0,msdos5 --hint-baremetal=ahci0,msdos5 6b3cf8c6-8c6e-4c24-8f01-90276ef061c1
else
search --no-floppy --fs-uuid --set=root 6b3cf8c6-8c6e-4c24-8f01-90276ef061c1
fi
linux /boot/vmlinuz-3.13.0-37-generic root=UUID=6b3cf8c6-8c6e-4c24-8f01-90276ef061c1 ro quiet splash $vt_handoff
initrd /boot/initrd.img-3.13.0-37-generic
}
这里我根据需要将 UUID 替换为新分区,但不太明白如何更改root=hd0,msdos5
。所以没有更改它。指南说:
使用 gedit 查找并适当替换每个“(hdX,Y)”
X 和 Y 应该根据新分区的 /dev/sdZY 或 /dev/hdZY 进行替换,如果 Z 是“a”,则 X 应该是“0”,如果 Z 是“b”,则 X 应该是“1”,依此类推。
我可以想象这是因为 grub 被设置为在 Windows 中启用启动。有一个这样的菜单项,我在新的 grub.cfg 中将其完全删除:
menuentry 'Windows 7 (loader) (on /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-chain-BE8602CA860282DF' {
insmod part_msdos
insmod ntfs
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 BE8602CA860282DF
else
search --no-floppy --fs-uuid --set=root BE8602CA860282DF
fi
parttool ${root} hidden-
chainloader +1
}
我感觉这些hd0,msdos
条目应该有所不同,但我不知道该输入什么。
无论如何,系统一直从旧分区启动,系统磁盘上仍然没有空间,如果能找到解决方案,我将不胜感激!谢谢!
答案1
事实上你可以修剪:
set root='hd0,msdos5'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos5 --hint-efi=hd0,msdos5 --hint-baremetal=ahci0,msdos5 6b3cf8c6-8c6e-4c24-8f01-90276ef061c1
else
search --no-floppy --fs-uuid --set=root 6b3cf8c6-8c6e-4c24-8f01-90276ef061c1
fi
向下:
search --fs-uuid --set=root 6b3cf8c6-8c6e-4c24-8f01-90276ef061c1
或者也可以这样:
search -u -s 6b3cf8c6-8c6e-4c24-8f01-90276ef061c1
当然,您可以将所有 改为hd0,msdos5
。hd0,msdos1
改为sda5
;sda1
改为msdos5
,msdos1
不是很简单吗?FWIW,msdos
这里的意思是“MSDOS 分区表”,通常被认为是“MBR 分区表”的更合适的名称。hd0
但ahci0
并不总是出现sda
在启动的系统中。
但在修改 grub.cfg 之前,您需要确保 MBR(和后 MBR 间隙)上的 grub 启动代码将在所需分区上查找 grub.cfg。(您声称您updated the MBR
,但我不知道您到底做了什么。)
mount /dev/sda1 /mnt
grub-install --boot-directory /mnt/boot /dev/sda
并编辑 grub.cfg 和 fstab:
$EDITOR /mnt/boot/grub/grub.cfg
$EDITOR /mnt/etc/fstab
顺便说一句,如果您编辑 grub.cfg,则意味着您不应再使用update-grub
或之类的实用程序grub-mkconfig
,除非您稍后进一步相应地更新 /etc/default/grub。
但是,我不确定您是否可以做到mount /dev/sda1 /mnt
,因为根据您的 gparted 屏幕截图,sda1 和 sda5 都已以某种方式挂载到 /。所以我甚至不知道/boot/grub/grub.cfg
您编辑时实际修改了哪些。我不知道修复这个烂摊子是否像umount /
修复这个烂摊子一样简单。我会说您最好使用实时介质修复所有问题。
答案2
当然,一旦你要从 sda1 启动,你必须按照你参考的手册的第 5 步将所有 msdos5 实例更改为 msdos1。现在你必须按照其余步骤完成。