Hd-idle a încetat să funcționeze când am instalat kernelul 5.11 HWE pe Ubuntu 20.04. În cele din urmă, am descoperit că /proc/diskstats raporta activitatea de citire a discului fantomă. Iată statisticile pentru una dintre unitățile mele care rulează sub 5.4.0. Am subliniat contorul de citire a discului care este folosit de hd-idle pentru a verifica activitatea discului:
grep sdg /proc/diskstats
8 96 sdg 12758 4 793104 49835 446 0 7840 262 0 47720 39172 0 0 0 0
------
8 97 sdg1 12606 4 787936 49248 446 0 7840 262 0 47308 38712 0 0 0 0
8 105 sdg9 41 0 576 94 0 0 0 0 0 112 68 0 0 0 0
Nucleul HWE (5.11) raportează o creștere continuă a citirilor pe disc pe dispozitivul brut, cu poate 5 până la 10 citiri pe secundă, iar acest lucru împiedică hd-idle să se rotească pe disc. Rețineți că nu există activitate de citire pe partițiile individuale.
Discul în sine pare să fie cu adevărat inactiv, deoarece îl pot forța să se rotească în jos (folosind „hd-idle -t sdg”) și nu se rotește imediat înapoi.
Deci, se pare că nucleul 5.11 HWE raportează I/O de citire fantomă care nu există cu adevărat. După cum am spus în titlu, nucleul 5.4 funcționează corect.
Această unitate este una dintre şase hard disk-urile care sunt membre ale unui zpool ZFS și toate au această problemă. Celelalte unități ale mele, de sistem, sunt un SSD NVME și un SSD de 2,5" și nu știu dacă raportează și citiri de disc fantomă pentru că nu merg niciodată complet inactiv.
FWIW, am căutat launchpad și bugzilla.kernel.org și nu văd niciun bug sau rapoarte care să se potrivească cu acest comportament.
Actualizare 17/01/22: Aceeași problemă apare pe Linux 5.8.0-63. Iată o altă demonstrație (la versiunea 5.8.0) a problemei în care diskstats arată citirile care apar pe o unitate care este de fapt rotită și inactivă:
$ sudo hd-idle -t sdg
$ hddtemp /dev/sdg
/dev/sdg: HGST HDN726040ALE614: unitatea este în stare de repaus
$ grep sdg /proc/diskstats
8 96 sdg 6272 2 48966 34365 345 1 5952 315 0 21544 34858 0 0 0 0 12 177
8 97 sdg1 3279 2 42088 29129 345 1 5952 315 0 16584 29445 0 0 0 0 0 0
8 105 sdg9 41 0 576 86 0 0 0 0 0 104 86 0 0 0 0 0 0
$ dormi 5
$ grep sdg /proc/diskstats
8 96 sdg 6302 2 48986 34367 345 1 5952 315 0 21580 34860 0 0 0 0 12 177
8 97 sdg1 3279 2 42088 29129 345 1 5952 315 0 16584 29445 0 0 0 0 0 0
8 105 sdg9 41 0 576 86 0 0 0 0 0 104 86 0 0 0 0 0 0
$ hddtemp /dev/sdg
/dev/sdg: HGST HDN726040ALE614: unitatea este în stare de repaus