![如何在启动驱动器时忽略 /dev/sda?](https://linux22.com/image/973550/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%90%AF%E5%8A%A8%E9%A9%B1%E5%8A%A8%E5%99%A8%E6%97%B6%E5%BF%BD%E7%95%A5%20%2Fdev%2Fsda%EF%BC%9F.png)
我想让一台旧笔记本电脑(用正确的术语来说,是古老的笔记本电脑)运行 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/sda1
noauto
ro
0
0
/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(用于在启动时挂载文件系统的实用程序)仍会尝试在启动时挂载文件系统。