硬盘驱动器错误:错误/缺少感知数据

Kal*_*Kid 11 error-handling hard-drive

我最近尝试使用以下命令检查硬盘驱动器的停机时间:

sudo hdparm -I /dev/sdb | grep level
Run Code Online (Sandbox Code Playgroud)

并得到错误:

SG_IO: bad/missing sense data, sb[]:  70 00 05 00 00 00 00 0a 00 00 00 00 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Run Code Online (Sandbox Code Playgroud)

驱动器读取和写入数据很好,并在启动时安装。我只是无法在没有错误的情况下在此驱动器上运行此命令

这是什么意思,我该如何解决这个问题?

Ami*_*ias 8

看起来您的驱动器控制器不支持这种查询方法,并非所有 USB SATA 芯片组都是一样的。您没有说明您使用的是哪种型号的驱动器或控制器,因此很难在这里提供更多建议。

您可以通过插入另一个 USB 控制器或使用具有相同控制器的不同驱动器或更好地通过 SATA 直接进行测试。

3TB 驱动器对于某些 usb2 时代的控制器来说可能太大了,所以我建议改用信誉良好的 usb3 sata 桥接器,它也会快得多。


Mik*_*nen 8

此问题通常是由 USB-SATA 桥接实现引起的,并且应该仅在 USB 连接的磁盘盒中可见。

对于外部 USB 磁盘,系统需要使用 UAS(USB 附加 SCSI)协议通过 SAT(SCSI / ATA 转换)与机箱内的 SATA 驱动器通信,以通过 USB 的 SCSI 发送 ATA 命令。之所以如此复杂,是由于历史原因。

USB 链中的某个地方?无人机系统?SCSI ? SAT?SATA 某些硬件的实现不正确。通常所有这些都是由外壳内的单个微芯片完成的,称为 USB-SATA 桥接器,一些众所周知的变体是 ASM1051、ASM1053 和 ASM1153。其中,已知 ASM1051 存在缺陷,应避免使用包含该芯片的任何硬件使用 UAS。ASM1053 和 ASM1153 可能会或可能不会工作取决于芯片内部的实际固件(允许制造商自定义固件,参考实现确实可以正常工作)。例如,Seagate 制造的许多机箱使用带有自定义固件的 ASM1153,并且即使相同的芯片在参考固件下可以正常工作,某些 ATA 命令也会出现问题。(例如,只要操作系统从不发送任何 12 位或 16 位命令,Seagate 的某些机箱就可以工作。Linuxusb_storaget为此目的支持 quirk 。)最终用户通常无法更换固件,因此如果您的芯片/固件有问题,您唯一的选择就是向制造商投诉。就希捷而言,他们通过声明他们仅正式支持 Windows 和 OS X 来“解决”问题。希捷现在正式与 Linux 社区合作,所以也许他们的产品将来会真正起作用。

找出桥接芯片的唯一真正方法是拆除外壳并检查实际微芯片中的标记。

更新: “Seagate Backup Plus Hub”机箱具有正常工作的 USB-SATA 桥接器并且 UAS 正常工作(请注意,这是与“Seagate Backup Plus”不同的产品!)但是,由于 Seagate 机箱的不良历史,Linux 内核应用了t默认情况下的quirk会阻止此机箱使用所有 SATA 功能。您可以使用以下命令启用完整的 SATA 支持,包括 SMART 功能:

echo "0bc2:ab38:" > /sys/module/usb_storage/parameters/quirks
Run Code Online (Sandbox Code Playgroud)

请注意尾随冒号,之后没有任何内容 - 它禁用所选供应商:产品的所有内置怪癖。lsusb如果需要,请检查您的供应商和产品 ID 。

如果您的设备有足够的缺陷,您可能需要完全禁用 UAS 支持。这可以通过u怪癖来完成。例如,如果我想在 Seagate Backup Plus Hub 上禁用 UAS 支持,我将以 root 身份运行以下命令:

echo "0bc2:ab38:u" > /sys/module/usb_storage/parameters/quirks
Run Code Online (Sandbox Code Playgroud)

在那之后,外部磁盘将只会使用较慢但通常可以正常工作的 USB 存储设备功能,并且事情最终会运行......缓慢。如果您只需要传输一些大文件,差异还不错。如果您有很多小文件,那么拥有可用的 UAS 支持之间的差异可能会超过 10 倍的速度差异。


bli*_*dus 7

我的 Seagate backup slim 和 WD black SCSI 驱动器也有类似的问题。我也在用hdparm。对我sdparm有用的是实用程序。

安装

sudo apt install sdparm
Run Code Online (Sandbox Code Playgroud)

获取所有参数/设置

sudo sdparm -l -a /dev/sdX
Run Code Online (Sandbox Code Playgroud)

这里-a获取所有输出字段并-l获取长输出,即输出字段的解释。/dev/sdX是有问题的驱动器(类似于/dev/sda)。

使用以下命令获取减速计时器和STANDBY标志:

sudo sdparm -l --get SCT /dev/sdX
sudo sdparm -l --get STANDBY /dev/sdX
Run Code Online (Sandbox Code Playgroud)

SCT这里的降速时间以毫秒为单位,STANDBY标志是降速计时器开/关 (1/0) 开关

如果您的输出类似于:

# STANDBY     0  [cha: y, def:  1, sav:  1]
# SCT       4294967286  [cha: y, def:18000, sav:18000]
Run Code Online (Sandbox Code Playgroud)

这意味着您的设备未设置为降速。

如果需要,您可以使用以下命令更改当前会话的这些设置:

sudo sdparm -l --set SCT=6000 /dev/sdX
sudo sdparm -l --set STANDBY=1 /dev/sdX
Run Code Online (Sandbox Code Playgroud)

这些设置将在重新启动时丢失。

永久更改:

sudo sdparm -l --save --set SCT=6000 /dev/sdX
sudo sdparm -l --save --set STANDBY=1 /dev/sdX
Run Code Online (Sandbox Code Playgroud)

这里我选择了 6 秒(6000 毫秒),但您可以根据自己的要求进行选择。

如果由于某种原因,你不能保存你的设置,你可以把它放在你的/etc/rc.local启动中设置这些:

sdparm -l --set SCT=6000 --set STANDBY=1 /dev/sdX
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助。