如何通过命令行确定连接到系统的外部驱动器是否处于唤醒(旋转)或睡眠状态?
没有任何一个这里有答案有帮助。Powershell 方法根本不起作用,smartctl
下面描述了该方法。我也没有尝试过该hdparm
方法,因为我在 Windows 上尝试过,而且根据网上的众多帖子,该命令hdparm -C
无论如何都会唤醒驱动器。
测试外部 Seagate 硬盘。
使用的命令:
smartctl -n standby G:
上述操作仅在驱动器处于唤醒状态时才有效,并且会立即报告:
Device is in ACTIVE or IDLE mode
但是,如果驱动器处于休眠状态,命令将挂起 1-2 分钟,然后报告:
CHECK POWER MODE: incomplete response, ATA output registers missing
CHECK POWER MODE not implemented, ignoring -n option
ATA device successfully opened
您可能会说不同的错误消息解决了这个问题,但我希望找到一个干净的解决方案,这样我就不必等待几分钟才能得到不完整的响应。这将用于探测所有连接磁盘的脚本中。此外,它并不总是这样工作,见下文。
测试外部 WD 驱动器。
无论驱动器是否旋转,上述命令都会显示相同的消息:
CHECK POWER MODE: incomplete response, ATA output registers missing
CHECK POWER MODE not implemented, ignoring -n option
ATA device successfully opened
但是它不再像以前那样挂起,而且响应是即时的。
测试内部 WD 驱动器。
当驱动器旋转时:
Device is in ACTIVE or IDLE mode
当驱动器处于睡眠状态时:
Device is in STANDBY (OS) mode, exit(2)
这是唯一按预期工作的情况。
答案1
除非外部驱动器的桥接板以某种方式传达该信息,否则您无法做到这一点。
您提到的所有 Windows 命令都与直接连接到系统主板的驱动器有关。当驱动器直接连接到系统主板时,额外的数据连接使这些命令能够正常工作。
对于外置驱动器,驱动器通过桥接板连接到您的系统。桥接板主要负责接收 USB 命令并将其转换为核心硬盘接口使用的命令:无论是 SATA、PATA、IDE 等...
在最常见的外置驱动器设置类型中(您提到了“外置 Seagate 驱动器”),SATA 驱动器连接到桥接板,该桥接板允许 USB 连接到驱动器。该 USB 连接主要用于读取和写入数据;不传输其他数据,例如 SMART 数据或与驱动器睡眠/唤醒状态相关的数据。
作为这篇针对 macOS 的博客文章Other World Computing 指出:
“此外,外部驱动器和 USB 驱动器通常不支持 SMART。”
该帖子可能是针对 macOS 的,但总体概念是相同的:外部驱动器通常不支持 SMART。
唯一能让这些额外数据通过外部连接返回的方法就是桥接板以某种方式传输这些数据。或者如果连接方式类似于以太网老实说,这是一个奇怪的外部连接。
我不太确定老式的 SCSI 设备是否可以向外部和内部发送这样的数据,但如果我没记错的话,SCSI 内部和外部协议之间几乎没有区别,所以可能可以为内部 SCSO 驱动器传达更深层数据的系统级命令也可以用于外部 SCSI 驱动器。
但如今这一切都只是理论上的,因为外部驱动器与系统之间最典型的连接就是某种 USB 连接。
PS:在某些情况下,制造商会提供某种专有软件,允许主系统操作系统直接连接到外部设备中的桥接板。这通常用于刷新桥接板上的固件,但可能传达更深层的磁盘数据,例如 SMART 状态。但这是一个很大的“可能”;专有软件仅以制造商希望的方式连接到外部驱动器。并且只会传达制造商想要提供的数据。并且很可能不会以常见的内部硬盘驱动器命令所需的方式传达任何更深层的数据。
答案2
在阅读手册页后,我偶然发现了-d
允许您指定“设备类型”的选项。因此以下命令似乎按预期工作:
smartctl -d ata -n standby G:
当驱动器处于睡眠状态时,我会立即收到响应:
Device is in STANDBY (OS) mode, exit(2).
当驱动器旋转时我也会立即收到响应:
Device is in ACTIVE or IDLE mode.
不过,我不确定为什么-d ata
有效但-d sat
无效。
该命令必须在 Windows 的提升提示符下运行,否则它会对某些磁盘产生错误结果:例如,如果在非提升提示符下发出该命令,我的内部 WD 驱动器始终被报告为 ACTIVE。