我可以在启动时阻止对特定设备发出 IDENTIFY PACKET DEVICE 命令吗?

我可以在启动时阻止对特定设备发出 IDENTIFY PACKET DEVICE 命令吗?

这与上一个问题与安装相关的问题现已解决。我提出一个新问题,因为我仍需要使 DVD 驱动器正常工作。

问题

当我的 ASUS DRW-24B1/ST DVD 驱动器连接到我的 asmedia ASM1061 时,启动失败。

症状

ata8.00: exception Emask 0x52 Sact 0x0 SErr 0xffffffff action 0xe frozen
ata8: SError: { blah blah }
ata8.00: failed command: IDENTIFY PACKET DEVICE
ata8.00: cmd blah blah
         res blah blah (ATA bus error)
ata8.00: status: { DRDY }
ata8: hard resetting link

背景

ASM1061是 PCIe 至 SATA 桥接器,提供 2 x 6Gb/s 端口,并且应该完全符合 SATA 规格。

我刚刚在我的华硕 P8Z77-Vpro 主板上写着“这些 SATA 端口仅用于数据硬盘。不支持 ATAPI 设备。”

但是,我已经使用此驱动器安装了 Windows 7,并且我也可以在此驱动器上运行 Ubuntu 12.04 安装程序。我唯一遇到问题的时候是在 Ubuntu 启动过程中,它尝试 IDENTIFY PACKET DEVICE,这似乎是ATAPI 命令

我无法简单地将此设备切换到另一个 SATA 端口,因为它们已分配给其他设备。(我的芯片组的 2 x 6Gb/s 连接到我的启动 SSD 和快速 HDD,而 4 x 3Gb/s 端口正在运行 RAID 5 阵列。)如果无法修复或解决这个问题,我想我必须去购买 SATA 附加卡。呸。

思考

如果这确实是设备特定问题(即不支持 ATAPI 发现),那么我无法期望udev它能正常工作 - 是吗? - 但是,Windows 甚至 Ubuntu 安装程序似乎都运行正常。那么为什么会udev出现问题呢?

归根结底,如果 DVD 可以在 Ubuntu 下工作就好了,但我没有它也可以。但是,由于这是一台双启动机器,我无法物理断开它,因为我希望它与 Windows 一起工作。(而且每次我想启动 Ubuntu 时都物理断开它不是一个选择。;-)

问题

  1. 这应该算是一个错误吗?我的感觉是,如果它能在其他操作系统上运行,那么它也应该能与 Ubuntu 运行。

  2. 我该如何解决这个问题?我对 Linux 内部知识了解有限,但似乎我应该能够以某种方式告诉udev(或任何进行发现的人)忽略该设备。有办法吗?

答案1

事实证明,这些是内核发送 ATAPI 命令到 DVD 驱动器时产生的 libata 消息。问题是,DVD 所连接的 ASM1061 不支持 ATAPI。

解决方案是编辑 /lib/udev/rules.d/60-persistent-storage.rules,找到包含单词“ATAPI”的行并注释掉下一行。

感谢 Olli Helin 对我之前帖子的回答!

答案2

显然,ASM106x 和光驱就是不搭。它大部分时间都能正常工作。但突然间,整个机器崩溃了,屏幕上出现了最后一条消息:

ata10.00: exception Emask 0x52 SAct 0x0 SErr 0xffffffff action 0xe frozen
ata10: SError: { RecovData REcovComm UnrecovData Persist Proto HostInt PHYRdyChg PHYInt CommWake 10B8B Dispar BadCRC Handshk LinkSeq TrStaTrns UnrecFIS DevExch }
ata10.00: failed command: IDENTIFY PACKET DEVICE
ata10.00: cmd a1/00:01:00:00:00/00:00:00:00:00/0 tag 0 pio 512 in
         res 40/00:03:00:00:00/00:00:00:00:00/a0 Emask 0x56 (ATA bus error)
ata10.00: status: { DRDY }
ata10: hard resetting link

linux-ide 邮件列表中也讨论了这个问题:http://thread.gmane.org/gmane.linux.ide/55284

其中提到的另一个解决方法是libata.atapi_passthru16=0(内核参数)。

但最终它似乎是一个有缺陷的 SATA 控制器,你应该完全避免将它用于光驱。使用由另一个控制器支持的 SATA 端口或 USB 适配器。

相关内容