如何在启动驱动器时忽略 /dev/sda?

如何在启动驱动器时忽略 /dev/sda?

我想让一台旧笔记本电脑(用正确的术语来说,是古老的笔记本电脑)运行 Ubuntu 14.04。安装的硬盘驱动器无法正常工作,因此 Ubuntu 有很多抱怨。以下是错误:

ata1.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
ata1.00: BMDMA stat 0x25
ata1.00: failed command: READ DMA
ata1.00: cmd c8/00:08:00:00:00/00:00:00:00:00/e0 tag 0 dma 4096 in
     res 51/40:08:00:00:00/00:00:00:00:00/e0 Emask 0x9 (media error)
ata1.00: status: { DRDY ERR }
ata1.00: error: { UNC }
end_request: I/O error, dev sda, sector x
Buffer I/O error on device sda, logical block x

我努力了:

  • 在 /etc/fstab 中的 /dev/sda 行中添加“nobootwait”
  • 将“options libata noacpi=1”插入到 /etc/modprobe.d/options

在我添加“options libata noacpi=1”之前,它实际上已经进入了 shell。现在,几分钟后它就挂起了。

我不想使用或更换硬盘,因为我使用闪存驱动器进行启动。因此,我需要知道如何摆脱这些错误,或者告诉 Ubuntu 停止生成错误。

答案1

您还可以尝试修改 中的条目/etc/fstab。其中设备的默认值为,rw,suid,dev,exec,auto,nouser,async这意味着如果您的设备在mount 中/dev/sda有一个条目,那么您应该通过将和(可能为只读)放入 mount 选项和dump 以及fsck(文件系统检查)中来覆盖默认行为。可能看起来像这样:/etc/fstab/dev/sda1noautoro00

/dev/sda1     /mnt/windows     noauto,ro     0     0

希望有所帮助。

答案2

是的,可以告诉 Linux 忽略故障驱动器(1),而无需物理断开它(2)。

看看这个问题:我怎样才能告诉 Linux 内核完全忽略一个磁盘,就好像它根本没有连接一样?

那里注释的内核补丁包含在内核 3.13 及更高版本中,因此在 14.04 中您应该能够将命令行选项添加到内核中:

 libata.force=1.00:disable

磁盘将被完全忽略(3)。如果您需要有关添加内核启动参数的帮助,请参阅如何添加内核启动参数?


脚注:

(1) 十个月前这是不可能的。后来我发布了链接的问题,因为我的 SDD 出现了故障,一位好心的内核开发人员注意到了这个问题,为内核添加了一个补丁,现在我有了一个可以运行的系统。这就是 Linux 的真正威力。

(2)尽管如果可以的话,最好的策略是从物理上摆脱它。不耗电,没有噪音……

(3) 请注意,这显然意味着启动后该磁盘将完全无法访问。它将像不存在一样(这意味着,例如,在您的情况下,原来的磁盘/dev/sdb现在将不再存在/dev/sda,等等)。您可能需要在启动配置中考虑到这一点。

答案3

删除 /dev/sda 的 /etc/fstab 条目是否不起作用?IIRC,即使您没有使用 nobootwait,mountall(用于在启动时挂载文件系统的实用程序)仍会尝试在启动时挂载文件系统。

相关内容