防止外部 USB 硬盘在挂起至 RAM 期间旋转

防止外部 USB 硬盘在挂起至 RAM 期间旋转

每当机器(Linux 4.4.0-38-generic、Ubuntu 16.04)暂停到 RAM 时,我的 Western Digital 2TB 便携式 USB 3.0 硬盘(型号 WDBU6Y0020BBK)就会旋转并继续无限期旋转。为什么驱动器没有进入睡眠/待机模式?

从驱动器的 LED 判断,对驱动器的访问(将其唤醒)发生在挂起过程的最后阶段:由于很小的延迟,即使在机器已经休眠(即完成挂起)之后,驱动器也会听到旋转的声音。

有问题的存储设备连接到总线 3、端口 1 ( 3-1):

$ lsusb | grep Western
Bus 003 Device 002: ID 1058:10b8 Western Digital Technologies, Inc. Elements Portable (WDBU6Y, WDBUZG)
$ lsusb -t | grep -A1 'Bus 03'
/:  Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
    |__ Port 1: Dev 2, If 0, Class=Mass Storage, Driver=usb-storage, 5000M

为了阐明这个问题,我使用了内核命令行选项initcall_debug no_console_suspend ignore_loglevel dyndbg="file suspend.c +p"和英特尔的分析暂停用于收集 dmesg 和 ftrace 输出的调试工具。前者可以找到这里后者相当长(>340M),但没有明显错误:

$ grep err=[^0] mem_ftrace.txt ; echo $?
1

此外,问题似乎与驱动程序模块无关,因为之后重复挂起恢复过程sudo modprobe -r uas usb_storage(这让驱动器旋转并休眠)并没有带来任何变化!无论如何,驱动器旋转了。

有什么指示下一步要寻找和/或尝试什么吗?

仅供参考:我使用监控工具(高清空闲/proc/diskstats)在指定的空闲时间后监视并让磁盘进入睡眠状态(即让它旋转)。

相关内容