如何通过命令行确定连接到我的系统的外部驱动器是唤醒(旋转)还是休眠?
这里的答案都没有帮助。Powershell方法根本不起作用,smartctl
下面介绍方法。我也没有尝试过该hdparm
方法,因为我正在 Windows 上尝试此方法,并且根据许多在线帖子,该命令hdparm -C
无论如何都会唤醒驱动器。
测试外部希捷硬盘。
使用的命令:
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)
这是它按预期工作的唯一情况。
除非外部驱动器的桥接板以某种方式传达该信息,否则您无法执行此操作。
您提到的所有 Windows 命令都与直接连接到系统主板的驱动器有关。当驱动器直接连接到系统的主板时,额外的数据连接是允许这些命令工作的原因。
对于外部驱动器,驱动器通过桥接板连接到您的系统。该板主要管理接收 USB 命令并将它们转换为核心硬盘驱动器接口使用的命令:无论是 SATA、PATA、IDE 等……
在最常见的外部驱动器设置类型中——您提到“外部希捷驱动器”——SATA 驱动器连接到允许 USB 连接到驱动器的桥接板。USB连接主要用于读取和写入数据;不传送其他数据,例如 SMART 数据或与驱动器睡眠/唤醒状态相关的数据。
正如来自 Other World Computing的这篇特定于 macOS 的博客文章所述:
该帖子可能特定于 macOS,但一般概念是相同的:外部驱动器通常不支持 SMART。
您可以通过外部连接将额外数据发送回的唯一方法是桥板是否以某种方式传送该数据。或者,如果连接类似于eSATA连接,这确实是一个奇怪的外部连接。
我不太确定老式 SCSI 设备是否可以在外部和内部发送此类数据,但如果我没记错的话,SCSI 内部协议与外部协议之间几乎没有区别,因此可能是系统级命令可以为内部传送更深入的数据SCSO 驱动器也可用于外部 SCSI 驱动器。
但这在当今世界上都是学术性的,外部驱动器与系统之间最典型的连接是某种 USB 连接。
PS:在某些情况下,制造商会提供某种专有软件,允许您的主系统操作系统直接连接到外部设备中的桥接板。这通常用于刷新桥接板上的固件,但可能会传达更深层次的磁盘数据,例如 SMART 状态。但这是一个很大的“可能”;专有软件仅以制造商希望的方式连接到外部驱动器。并且只会传达制造商想要提供的数据。并且很可能不会以常见的内部硬盘驱动器命令需要它们的方式传递任何更深层次的数据。
阅读手册页后,我偶然发现了
-d
允许您指定“设备类型”的选项。因此,以下命令似乎按预期工作:当驱动器处于睡眠状态时,我会立即得到响应:
当驱动器旋转时,我也会得到即时响应:
不过,我不确定为什么
-d ata
有效但-d sat
无效。该命令必须在 Windows 上的提升提示符下运行,否则对于某些磁盘会给出错误结果:例如,如果在非提升提示符下发出命令,我的内部 WD 驱动器总是被报告为 ACTIVE。