PROBLEMA Modificare apm e spindown time out su hard disk usb

omega1310

Nuovo Utente
1
0
Salve,
Ho due hard disk esterni usb (un wd elements (WDC WD10SDRW-34A0XS0) ed un toshiba canvio basic (MQ04UBF100)) che uso principalmente per conservare dati a cui accedo sporadicamente durante il giorno. Il pc rimane acceso anche 7-8 ore di fila e così anche gli hard disk, ma dato che non vengono eseguiti programmi (nel senso che non sono installati sull'hdd e non devono modificare/accedere a file sull'hdd, devo solo leggere e scrivere file ad esempio ogni 15-30 minuti) gli hard disk vanno in sospensione e si risvegliano parecchio durante la giornata. Credo che ciò possa impattare notevolmente sulla vita dell'hdd. Perché per quanto ne so i meccanismi dell'hdd si usurano di più con continui fermarsi e ripartire piuttosto che lasciando in rotazione il disco anche in assenza di I/O.

Io uso ubuntu sul mio pc e facendo delle ricerche ho scoperto hdparm, dovrebbe permettermi di modificare i seguenti parametri che mi interessano:
-advanced power management, un algoritmo che definisce il comportamento dell'hard disk fino allo scadere dello spindown time out (https://bbs.archlinux.org/viewtopic.php?id=216832): hdparm -B <num> /dev/sdX
-spindown time out, il tempo dopo il quale il disco va in sospensione: hdparm -S <num> /dev/sdX

Il problema è che sono in grado di leggere il parametro apm tramite hdparm, ma le altre opzioni non vengono rispettate sebbene settate senza che vengano riportati errori.
Il secondo problema è che io vorrei iniziare a effettuare dei selftest sui due hdd (usando la utility smartctl di smartmontools) periodicamente, ma i selftest lunghi falliscono perché i dischi vanno in sospensione (dato che non c'è I/O).
Così ho iniziato a fare un po' di prove, questo è quello che ho fatto e scoperto.
Ho considerato i due hdd usb sopra citati (il wd usb e il toshiba usb) e altri due hdd sata presi da due portatili (un seagate momentus thin e un wd scorpio blue), per i due hdd sata ho usato due adattatori sata-usb differenti (uno di questi è un sabrent).

Ho provato a fare un selftest lungo sul toshiba usb, ma fallisce perché il disco (dopo 3 min) va in sospensione e il test viene abortito. Ho fatto un selftest lungo anche al wd usb (che va in sospensione di default dopo 30 min), anche in questo caso il disco va in sospensione (non dopo i 30 minuti di default ma un po' dopo, mentre il toshiba usb esattamente dopo quei 3 minuti andava in sospensione).
Il disco toshiba usb ha qualche settore riallocato, ma nessun settore incorreggibile. I self test corti falliscono in seguito ad un errore di lettura sempre sullo stesso LBA. Il disco wd usb è in perfetta salute: i parametri smart sono perfetti e i selfetest corti vengono completati senza errori.
Ho controllato i parametri smart perché pensavo che non riuscissi a fare rispettare i parametri sul toshiba usb (il primo su cui ho provato) perché fosse prossimo ad una rottura, ma non è questa il caso.

Queste sono le prove che ho fatto con hdparm e i dischi usb.
Sia sul toshiba usb che sul wd usb se mando hdparm -S 6 /dev/sdb (che dovrebbe settare lo spindown time a 30s, cioè dopo 30s dovrebbe sospendersi (per fare delle prove)) non ci sono cambiamenti, continuano a sospendersi con i loro tempi di default. Ci tengo a precisare che il comando va a buon fine (non vengono riportati errori) e la situazione non cambia anche se passo hdparm -B 254 /dev/sdb che setta l'advanced power management per le massime prestazioni e il minor risparmio energetico (per valori superiori a 128 lo spindown viene disabilitato fino allo scadere dello spindown time out). Un valore di 255 disabilita l'apm, ma sulle man pages c'è scritto che non è supportato da tutti i dischi, quindi ho preferito lasciarlo a 254. Anche provando a settarlo a 255 non vengono riportati errori e non ci sono cambiamenti.

Dopodiché ho fatto delle prove anche con i dischi sata, usando con entrambi i due adattatori a mia disposizione.
Il primo adattatore è palesemente marcio, funziona per montare i dischi e spostare i file ma poi per nient'altro. Se mando smartctl -a /dev/sdb (per ottenere i parametri smart) il prompt viene occupato per un periodo di tempo piuttosto lungo (circa 90s) poi si vede che scade qualcosa e il programma si interrompe, senza però aver stampato alcun parametro. Se provo a dare hdparm -S 6 /dev/sdb o hdparm -B 254 /dev/sdb succede la stessa cosa. Però posso leggere il valore dell'apm con hdparm -B /dev/sdb.
Passiamo al secondo adattatore. Qui le cose vanno meglio perché riesco ad ottenere i dati smart di entrambi i dischi sata. Se però provo a settare con hdparm -B 254 /dev/sdb oppure hdparm -S 6 /dev/sdb mi viene stampato il seguente errore con entrambi i dischi sata SG_IO: bad/missing sense data, sb[]: 70 00 01 00 00 00 00 0a 00 00 00 00 00 1d 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00. Una volta addirittura settando hdparm -S 6 /dev/sdb con il seagate sata ho visto questo HDIO_DRIVE_CMD(setidle) failed: Invalid argument.
Ho fatto qualche ricerca su internet ma non ho trovato niente. Un errore simile al primo veniva riscontrato anche da altri utenti che però cercavano di usare il secure erase su un ssd, oppure perché cercavano di impostare la password sempre su un ssd (il tutto sempre con hdparm).

Quindi le seguenti sono le parziali conclusioni a cui sono giunto. Semplicemente mi viene da pensare che non si possa interagire con il firmware degli hdd via usb. Probabilmente con i dischi sata avrei potuto farlo se li avessi connessi direttamente alla porta sata (purtroppo però possiedo solo dei pc portatili).
Per quanto riguarda i dischi sata, forse questo è dovuto al fatto che il controller usb dell'adattatore non traduce i comandi da usb ad ata. Per quanto riguarda i dischi usb suppongo la ragione sia simile. Sempre che gli hdd usb abbiano un controller usb. Smontandoli ho visto che hanno la porta micro usb 3.0 saldata direttamente sulla scheda, quindi mi viene da dire che il firmware dei dischi usb sia proggettato per interagire direttamente con i comandi usb.

L'unico workaround che ho trovato per evitare la sospensione dei dischi (durante i selftest e l'uso normale) è uno script che va scrivere in un file la data corrente ogni tot (2.5 min sul toshiba usb e 29.5 sul wd usb). In questo modo il disco ha continue operazioni di I/O (che non dovrebbero essere stressanti in alcun modo) e non va in sospensione.

Su windows usavo entrambi i dischi usb ed ero in grado di evitare che andassero in sospensione andando in gestione dispositivi e disattivando l'opzione "risparmio energetico" (il dispositivo tra l'altro non veniva riconosciuto come disco ma come "supporto di memorizzazione esterna usb").
Quindi le mie ipotesi a sto punto sono due: o esistono dei driver proprietari per interagire via usb con il firmware del disco, oppure windows crea un file temporaneo dove scrive/legge ogni tot minuti per evitare che il disco vada in sospensione. In effetti la seconda ipotesi è piuttosto plausibile e vi spiego il perché. Quando non abilitavo quella spunta su windows il disco andava in sospensione dopo un tot tempo (uguale sia su windows che su ubuntu) e poi se volevo espellerlo ci riuscivo senza problemi. Attivando quella spunta invece il disco non andava in sospensione però capitava spesso (2 volte su 5 circa) che se provavo ad espellerlo non ci riuscivo, perché mi dava l'errore che un file sul disco era in uso da un programma. Io non avevo programmi aperti ed ero assolutamente certo che non ce ne fossero anche in background, quindi doveva per forza essere un servizio di windows. Il dubbio è stato confermato da LockHunter (un programma che analizza quali programmi occupano una parte del file system evitando l'espulsione del dispositivo), la root del disco risultava occupata dall'esplora risorse e a volte da defender (di cui avevo tra l'altro disabilitato ogni scansione dal registro di sistema). Quindi mi verrebbe da dire che non sia proprio possibile interagire con il firmware dei dischi usb e che anche windows usi un workaround simile a quello che ho descritto.


Detto tutto ciò sottolineo le domande che mi sono rimaste:

-È possibile interagire con il firmware degli hdd (sia usb, che sata, che sata con adattatore)? Oppure è possibile anche solo poter modificare i parametri apm e spindown time out in un qualche modo?

-Esistono dei modelli di hdd usb che permetto di interagire con il firmware? Oppure adattatori che siano in grado di tradurre il comando da usb a sata. Io vorrei poter modificare a mio piacimento solo l'advanced power management e lo spindown time out.
Per essere precisi, io avrei bisogno di un disco usb che supporti la traduzione scsi-ata (https://en.wikipedia.org/wiki/SCSI_/_ATA_Translation). Sulle man page di hdparm c'è scritto che quasi tutti i dischi usb dopo il 2008 la supportano, ma vista la mia esperienza o non è così comune come dicono oppure ho avuto sfiga a beccarmi due dischi non compatibili di fila.

-Qualcuno di voi ha mai provato a fare cose simili con hdparm con dischi connessi con usb? Ci siete riusciti?
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!