移动系统分区并从中启动

移动系统分区并从中启动

我在以前的 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,msdos5hd0,msdos1改为sda5sda1改为msdos5msdos1不是很简单吗?FWIW,msdos这里的意思是“MSDOS 分区表”,通常被认为是“MBR 分区表”的更合适的名称。hd0ahci0并不总是出现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。现在你必须按照其余步骤完成。

相关内容