当出现“尝试在磁盘'hd0'之外读取或写入”错误并且Boot Repair无法解决问题时该怎么办?


35

我试图在较旧的计算机上安装Xubuntu 13.10。我发现安装过程中遇到了一些可能与我的问题有关的困难。值得注意的是:

  1. 屏幕分辨率非常低。窗户比屏幕大得多,我不得不将它们四处移动以转到“下一步”按钮。

  2. 鼠标光标是一直闪烁的颜色模糊。

安装完成,我尝试重新启动计算机。我立刻得到:

error: attempt to read or write outside of disk 'hd0'. 
Entering rescue mode... 
grub rescue>

我制作了引导修复 USB磁盘,将其引导并选择了默认修复。该应用程序告诉我问题已修复,并且如果这不能解决我的问题,则应将此链接显示给可以帮助我的人员。

接下来我该怎么办?我已经尝试安装Ubuntu和Xubuntu,但都没有成功。

编辑:

我找到了解决方法。

  1. 插入Xubuntu活动USB
  2. 选择“尝试Xubuntu”
  3. 在设置菜单中选择“安装Xubuntu”

这为我解决了问题。既然解决了,我就无法测试答案。


Answers:


36

在以下技术的帮助下找到存在Linux的分区

grub rescue > ls
(hd0) (hd0, msdos9)
grub rescue > ls (hd0,msdos9)/
grub rescue > ls (hd0,msdos8)/
grub rescue > ls (hd0,msdos5)/ # suppose this is root and bootloader of linux
grub rescue > ls (hd0,msdos5)/
grub rescue > set root=(hd0,msdos5)
grub rescue > set prefix=(hd0,msdos5)/boot/grub
grub rescue > insmod normal
grub rescue > normal

现在,出现系统的启动菜单。引导进入linux。

sudo update-grub
sudo grub-install  /dev/sda # If the drive is hd0 the equivalent is sda, if it's hd1 then use sdb

这修复了引导加载程序。


17
我不知道该怎么办。您指定了很多命令,这对我来说毫无意义。请添加更多说明文字!为什么将“ msdos9”从“倒数”到5?您如何看待“这是linux” ??就我而言,它显示(hd0,msdos1)!我无法“递减计数”-一旦设置了root和prefix并执行“ insmod normal”,我将得到与以前完全相同的错误消息。抱歉。这不是任何人都可以使用的答案。:(
Zordid 2014年

13
键入后,insmod normal我会再次收到消息:“错误:尝试在分区外部进行读取或写入。”
2014年

2
您说“假设这是linux”,而没有说出如何辨别哪个Linux。每当我正常键入insmod时,我都会得到“错误:未知文件系统”,这对我不起作用。另外,您能否解释一下为什么会首先发生这种情况?
msknapp

1
我得到的最好的是另一个grub提示。菜单从不弹出。
jbo5112

2
我同意@Zordid-仅列出一些隐秘命令而不解释这些命令的作用不仅是不够的,而且可能存在潜在的危险。
约瑟姆

27

对于其他有此问题的人:

这发生在我身上,在那里可以进行新的安装或grub修复,然后重新启动,但是下次我重新启动时,也会出现同样的“尝试读取错误”。大多数情况下,我会出现内核崩溃的情况,并且计算机需要重新启动。

我遵循了一些建议,并使用以下分区设置使用了高级选项(不要使用“擦除磁盘并安装ubuntu”)进行新安装:

  1. 在磁盘的开头创建一个1 GB(1024 MB)的ext4分区;安装在“ / boot”中
  2. 在安装在“ /”中的ext4中创建所需的安装空间,减去 交换区域
  3. 使用剩余空间进行交换。(所有分区都是主分区)
  4. 在启动安装下拉菜单中,选择“ / boot”分区。不是默认的驱动器根目录!

当接受的答案中的命令获取“无法识别文件系统”时,这对我有用。我最终使用了相同的文件系统集,但是这个小的专用/ boot分区解决了我的问题。谢谢。
GregHNZ 2015年

如果/ boot是唯一的主分区,这似乎也可行。
亚伦·梅森

加入这个网站只是说这对我也有用。当将Ubuntu放置在外部HDD上时,小启动分区是我要使它工作所需的。谢谢!
rayryeng-恢复莫妮卡

它帮助了我:我有一个大(> 5TB)/分区,添加了一个小/ boot分区解决了该问题
neutrinus

可以这样做而不删除现有分区吗?我有一个很大的分区,所有数据都从磁盘的开头开始。
pir

6

通过Grub救援提示可以轻松解决该问题。第一个答案不是很完整,起初我遇到了同样的错误。下面是它的工作原理:

首先,我们需要找到主分区。这将是Linux引导所需的基本文件所在的位置,因此我们输入以下内容-

Grub> ls

现在,您应该看到一个与(hd0)(hd0,msdos5)(hd0,msdos1)类似的列表。请注意,您可能具有的分区和我自己的分区以及多个驱动器,但是过程是相同的。

现在搜索分区以找到主要-

Grub> ls (hd0)
Grub> ls (hd0,msdos5)
Grub> ls (hd0,msdos1)

直到grub输出该分区上的文件列表或显示文件系统类型和上次修改日期为止。

第二,找到主分区后,我们需要进行一些设置-

Grub> set prefix=(hd0,msdos1)/boot/grub
Grub> set root=(hd0,msdos1)
Grub> set

一旦执行了最后一个设置命令,Grub将输出不同参数的列表。现在,请检查我们是否设置了正确的根和前缀-

Grub> ls /boot

Grub应该输出/ boot中包含的文件列表。

第三,我们需要设置安装点并加载内核-

Grub> linux /vmlinuz root=/dev/sda1
Grub> initrd /initrd.img

最后,我们启动系统-

Grub> boot

如果最终引导进入busybox shell,只需输入fsck /dev/sda1。之后,只要输入exit,您的系统即可正常启动。


救了我的命,谢谢!
Timmah

3

我通过将Linux分区移动到靠近硬盘的开头来解决了这个问题。当Linux分区位于我的120 Gb HDD的末尾(距离末尾40 Gb)时,我遇到了这个问题。没有一个解决方案无效。将Linux分区从40Gb迁移到80Gb后,问题消失了。


1
如何将Linux分区移动到磁盘的开头?
pir

1

经过数小时的搜索,我尝试了此解决方案,重新安装了内核,效果很好:

sudo dpkg --configure -a
sudo apt-get install --reinstall linux-image-$(uname -r)

0

当我在virt-manager / QEMU / KVM中使用OVA虚拟机软件包中的vmdk磁盘时,就解决了这个问题。虚拟机出现此错误消息失败。

解决方案是将vmdk转换为qcow2:

qemu-img convert -O qcow2 MyAppliance-disk1.vmdk MyAppliance.qcow2

并在virt-manager中使用转换后的图像。


0

尝试在Dell服务器上安装Ubuntu 18 Server和Xubuntu 18时遇到此问题。在BIOS菜单中选择UEFI代替Legacy可以解决此问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.