Evite que o disco rígido USB externo gire durante a suspensão para a RAM

1

Sempre que a máquina (Linux 4.4.0-38-generic, Ubuntu 16.04) suspender para a RAM, meu disco rígido Western Digital 2TB Portable USB 3.0 (Modelo WDBU6Y0020BBK) girará e continuará girando indefinidamente. Por que a unidade não é enviada para o modo de suspensão / espera?

A julgar pelo LED da unidade, o acesso na unidade (que o acorda) acontece muito tarde no procedimento de suspensão: devido a um pequeno atraso, a unidade gira de forma audível mesmo depois que a máquina já dorme (ou seja, concluiu a suspensão).

O dispositivo de armazenamento em questão está conectado ao barramento 3, porta 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

Para esclarecer o assunto, usei as opções cmdline do kernel initcall_debug no_console_suspend ignore_loglevel dyndbg="file suspend.c +p" e a ferramenta de depuração AnalyzeSuspend da Intel para coletar o dmesg e saída ftrace. O primeiro pode ser encontrado aqui e o último é bastante longo (> 340M), mas não contém erros óbvios:

$ grep err=[^0] mem_ftrace.txt ; echo $?
1
Além disso, o problema não parece pertencer aos módulos do driver, já que a repetição do procedimento de continuação da suspensão após sudo modprobe -r uas usb_storage (que permite que a unidade desacelere e durma) não trouxe nenhuma mudança! A unidade girou de qualquer maneira.

Quaisquer ponteiros que procurar e / ou tentar em seguida?

FYI: Eu uso uma ferramenta de monitoramento ( hd-idle ) que assiste /proc/diskstats e coloca o disco para dormir ( ou seja, deixa girar para baixo) após uma quantidade especificada de tempo ocioso.

    
por ste-fan 26.09.2016 / 12:51

0 respostas