我用 SSD 替换了旧的笔记本电脑驱动器(win7 和 ubuntu 双启动)。
现在我通过 USB 适配器连接了旧驱动器,并且想从它启动。
但出现了以下情况:
unknown filesystem
grub rescue>
由于我需要旧驱动器中的程序,因此我必须不时从旧驱动器启动,并且我不想在新驱动器上安装这些软件。更换驱动器需要花费太多时间,所以我想从 USB 启动。
我怎样才能解决这个问题?
答案1
我认为最便捷的方法是...将旧驱动器复制到 SSD 上。虚拟化也可能是一种方法,将 USB 磁盘转换为“原始”映像并全屏运行(它与 USB3 配合良好)。
否则,您必须从 grub 启动。您可以为此添加一个菜单项(如果您可以这样做的话)。
Polyshell 的问题
为了测试以下内容,我安装了 Windows 7 Home Premium(可惜我没有其他可用的许可证)作为单一操作系统。
然后(从 Windows 7)我缩小了分区以便为 Fedora 18 释放足够的空间。
此时我从 Fedora 18 DVD(桌面版,Xfce)启动,并安装到硬盘上。安装程序发现“有足够的空间安装 Fedora!”,我使用自动分区,并默认双启动。
两个系统均正确启动。
此时,我删除了 F18 分区(来自 Windows),并格式化了可用空间。
重启后,我得到:
GRUB loading.
Welcome to GRUB!
error: unknown filesystem.
Entering rescue mode...
grub rescue> _
跑步
ls
找到三个 Windows 分区(第一个是由 Windows 7 创建的,是一个 100Mb 的服务分区。不知道启动应该是 msdos1 还是 msdos2;我创建的现在是 msdos3)。
(hd0) (hd0,msdos3) (hd0,msdos2) (hd0,msdos1) (fd0)
因此,必要的 GRUB2 代码所在的 Linux 分区丢失。而且 Grub2 显然无法进行“盲启动”(即在扇区级别将引导加载程序链式加载到现有分区上)。因此,现在我们需要原始 GRUB2 文件才能执行任何操作;这意味着,我们需要另一个 GRUB2 安装。
因此,我们从另一台计算机下载此工具,它实际上是 GRUB2 恢复安装:http://www.supergrubdisk.org/super-grub2-disk/(它是一个 12 Mb ISO)并将其放到可启动 USB 上,或刻录到 CD 上。
然后我们从它启动。菜单出现,我们转到“检测任何操作系统”;它应该可以看到 Windows 分区并能够启动它。
不幸的是,完整的 Windows 操作系统也会锁定系统磁盘并阻止其修改,因此我们需要启动 Windows然后立即按 F8进入维护模式并解锁磁盘。
当然,此时更快捷的方法是保留原始的 Windows DVD,或者让朋友刻录 Windows 恢复 CD,从该 CD 启动,而不是从 Grub2 恢复 CD 启动,然后按照这些步骤(对于 Windows 8,有自动修复功能)。
进入 Windows 7 启动菜单后,第一个菜单项(我想应该是“启动修复”——我的安装不是英文的)会自动查找可能阻止 Windows 启动的内容(它说“不会丢失任何数据或文档”)。然后,我还被提供了执行系统还原的选项,但我拒绝了:系统没有问题,需要恢复的是引导加载程序,这就是甚至不在系统还原中。
几分钟后,启动修复选项彻底失败(希望 Windows 8 会变得更好)。
于是我再次启动图形模式,在谷歌上搜索bootsect.exe
(前两个链接试图让我下载间谍软件 - 好文件大约 95 KB),将其下载到磁盘,再次按 F8 重新启动进入恢复工具,打开命令提示符后,我找到了BOOTSECT.EXE
我下载的二进制文件。所以我运行
BOOTSECT /nt60 SYS /mbr
然后重新启动(取出恢复 CD 后)。
系统顺利进入Windows 7原版GUI(我猜,除了一开始有大量磁盘活动而需要长时间等待之外,其余时间CHKDSK
都在默默运行)
从 USB 启动
这是不是保证可以正常工作,因为它取决于 GRUB 启动时 USB 设备如何“显示”。能够从 BIOS 提示符下从 USB 启动可能还不够。
至少,grub 加载程序必须进行修改,因为当 USB 磁盘为 hd0 时,它“将自己视为”hd0。现在它仍然如此,但 hd0 现在是另一个磁盘,因此 grub 在错误的地方寻找东西。
上述命令可能仍然有效,只是现在不是 hd0,而是 hd1、2... 等等。不过,完全不能保证。但你可能会走运。
root (hd2,1)
chainloader +1
boot
根据 SSD 上的内容,你可能需要一个更加复杂的设置,在 BIOS 级别交换磁盘(需要硬件 EFI 支持)甚至隐藏 SSD 本身。
作为第一次尝试,我会尝试在 USB 挂载点上找到映像并从那里启动映像,希望 USB 被视为hd2
:
root (hd2,1)
find / <-- press "Tab"
kernel <path to kernel>
initrd <path to initrd>
boot
您可以找到上述内容的小教程这里。
答案2
首先你可以尝试:
grub rescue> ls
(hd0) (hd0,1)
grub rescue> insmod ext2
grub rescue> insmod msdos
错误:未知文件系统。
那么你必须调查
http://www.gnu.org/software/grub/manual/multiboot/multiboot.html
答案3
首先从 iso 启动进入 Ubuntu。
1.找到 Ubuntu 分区和包含 Grub 模块的文件夹。
必须找到包含模块的 Grub 文件夹,以便加载正确的模块。此文件夹将在 Ubuntu 的初始安装期间创建,并且应位于 Ubuntu 分区中。此文件夹通常位于 (hdX,Y)/boot/grub 或 (hdX,Y)/usr/lib/grub/i386-pc 查找您现有的 Ubuntu 分区和模块文件夹。
ls # List the known drives (hdX) and partitions (hdX,Y)
ls (hdX,Y)/ # List the contents of the partition's root
ls (hdX,Y)/boot/grub # Normal location of the Grub 2 modules.
ls (hdX,Y)/usr/lib/grub/i386-pc # Alternate location of the Grub 2 modules.
- ls - 应返回所有已知驱动器 (hdX) 和分区 (hdX,Y)
- ls (hdX,Y)/ - 应该显示分区根目录的内容。
- 如果您收到“错误:未知文件系统”,则这不是您的 Ubuntu 分区。
- 如果这是 Ubuntu 分区,您将看到 Ubuntu 文件夹,包括 lost+found/、home/、boot/ 以及 vmlinuz 和 initrd.img。使用此地址作为下一个命令的第一部分。
- ls (hdX,Y)/boot/grub - 应该会显示几十个 *.mod 文件。这是您要查找的文件夹。
- 如果找不到模块,请尝试其他位置:ls (hdX,Y)/usr/lib/grub/i386-pc
2.加载模块。
set prefix=(hdX,Y)/<path to modules>
- 此命令必须正确指向包含 Grub 模块的文件夹。该地址应该是上一节中显示模块的地址。
例子:
set prefix=(hd0,5)/boot/grub
set prefix=(hd1,1)/usr/lib/grub/i386-pc
加载模块:
insmod linux insmod loopback insmod iso9660 insmod fat # 如果 ISO 位于 fat16 或 fat32 格式的分区上。 insmod ntfs # 如果 ISO 位于 NTFS 格式的分区上。 insmod nftscomp # 如果分区上使用 NTFS 压缩。如果不确定,请加载。
“文件未找到”错误意味着前缀中的路径不正确或特定模块不存在。可以使用 set 命令检查前缀设置。使用正确的路径重新运行“set prefix=”命令。
3.找到 Ubuntu ISO 文件。
- 使用 ls 命令组合,找到 Ubuntu ISO 映像。
4.创建环回设备。loopback loop (hdX,Y)//
例子:
环回循环 (hd1,1)/path/to/ubuntu-10.04.1-desktop-i386.iso
5.加载Linux内核和initrd映像。
set root=(loop)
linux /casper/vmlinuz boot=casper iso-scan/filename=/<ISO-name.iso> noprompt noeject
initrd /casper/initrd.lz
- 如果 ISO 或文件名的路径不正确,启动将在 BusyBox 屏幕上停止并生成一条消息,指出“无法打开 /dev/sr0:未找到介质”。
注意:如果 ISO 文件不在 / 文件夹中,请在 iso-scan/filename= 条目中包含路径。请参阅第二个示例。
例子:
linux /casper/vmlinuz boot=casper iso-scan/filename=/ubuntu-10.04.1-desktop-i386.iso linux /casper/vmlinuz boot=casper iso-scan/filename=/my-iso/ubuntu-10.04.1-desktop-i386.iso
6.启动。
- 就是这样。如果命令运行时没有任何消息/错误,则命令被接受为输入。现在是启动的时候了:
引导
更多信息这里
启动后执行以下操作::
这里有同样问题的帖子,解决方法如下,
1.sudo mount /dev/sdaX /mnt
这sdaX
是你的启动分区。你可以像这样使用 sudo blkid 获取列表,
/dev/sda1: LABEL="Windows XP" UUID="96A4390DA438F0FB" TYPE="ntfs"
/dev/sda3: LABEL="Ubuntu 11.04" UUID="b61fcae3-7744-45b4-95b9-7528d50a3652" TYPE="ext4"
/dev/sda5: LABEL="Se7en" UUID="A2DC9D71DC9D4109" TYPE="ntfs"
/dev/sda6: LABEL="Development" UUID="DEB455A1B4557CC9" TYPE="ntfs"
/dev/sda7: LABEL="EXTRA" UUID="D8A04109A040F014" TYPE="ntfs"
/dev/sda8: LABEL="SONG" UUID="46080FCD080FBAC7" TYPE="ntfs"
/dev/sda9: LABEL="BACKUPS" UUID="766E-BC99" TYPE="vfat"
注意:sdaX
必须是linux分区。
2.sudo grub-install --boot-directory=/mnt/boot /dev/sda
3.sudo update-grub
答案4
您可以使用 Ubuntu 和 Lilo 恢复该驱动器上的 MBR。我在 thenewtech.tv 上写了一篇关于如何执行此操作的教程