防止外部 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)在指定的空閒時間後監視並讓磁碟進入睡眠狀態(即讓它旋轉)。

相關內容