Se v těch zkratkách ztrácím. Co je CDI?
Strašně mě štve když věci nefungují jak mají. A ještě víc když dělám chyby. Půl noci vzhůru a nad ránem myšlenka. Tak se v tom nimrám. Mojí chybu mám na mysli, že jsem sem nedal testovací verzi
conktemp.sh a hlavně si neuvědomil při testování, že jí mám jinou. Spouští se tam na začátku podshel hozený na pozadí, který mi testovací disk uspí abych nemusel čekat než to udělá sám.
(sleep 8m; smartctl -s standby,now -d sat /dev/sda)& No, co na to říct. Jsem
(#$%&*)^²!!
Každopádně to byl posun vpřed tak i tak. Protože ostatní řešení aby byla teplota, ty disky vždy probudí. Toto řešení to neudělá, pokud disk spí. Jakmile se disk z jakéhokoliv důvodu rozběhne, tak už "nemá" šanci usnout. Ono je to ještě trošku složitější, rozlišuje se ještě
sleep,
standby a
idle. Pro nás je žádoucí standby. Dá se nastavit a to fakt funfuje, že disk po vykonání jakékoliv činnosti přejde neprodleně do
standby módu. Ale to je pro životnost disku také nic moc (pořád se rozbíhá a zastavuje). To už je lepší ho nechat běžet. Anebo ho nechat automaticky přepnout do standby po nějaké době nečinnosti.
A řekl bych, že tady vývojáři linuxu nejspíš zaspali:
Jádro vyřizuje diskové operace mimo jiné pomocí ioctl() Díky kterému proudí info mezi diskem a jádrem. A tady je i zakopaný pes. Jádro v tomto smyslu nemá žádný
treshold Vnímá přesně buď nic, nebo aktivita a tím nepředá disku info teď po tobě nic nechci tak si "to udělej po svém". Avšak je tu nějaká možnost si to dodělat. Původně jsem chtěl načítat připojené disky ze souboru
/proc/diskstats páč čím méně externích programů, tím lépe. Avšak jsem si to rozmyslel protože program
lsblk je součástí
core a tak musí být v systému pokaždé a není třeba ho doinstalovávat. Od výše zmiňovaného souboru už je jen krůček k informacím o prováděných a provedených operací na daném diskovém zařízení. Aby se nemusel číst celý soubor, který je souhrnem více dílčích souborů, dá se číst přesně co potřebujem ze
stat souboru daného disku. Ty jsou mapovány v
/sys/block/*/stat. Jsou to jaderné výstupy, takže stále aktuální a mají přesně daný formát:
https://docs.kernel.org/admin-guide/iostats.html Napsal jsem pokusný skript na přečtení informací a proběhlých čtecích operací (ostatní operace jsou pro tento účel as nepotřebné) na disku:
#! /usr/bin/env bash
ktery_disk="sdc"
pocet_cyklu=10
cyklu=$pocet_cyklu
sekund_sleep_loop=1
# načtem kolik proběhlo operací read před našim testem
poc_sektoru=`cat /sys/block/$ktery_disk/stat | awk {'print $1'}`
# smyčka o zadaném počtu cyklů
while [ "$pocet_cyklu" -gt 0 ]; do
# načtem teplotu z disku
TEPLOTA=`sudo smartctl -l scttempsts --json=g -d sat /dev/$ktery_disk | grep 'json.temperature.current' | cut -d '=' -f 2`
# vypisem teplotu
echo ${TEPLOTA//';'/'°C'}
# počkáme si ať nežerem procesorový čas
sleep $sekund_sleep_loop
# dekrementace cyklu
pocet_cyklu=$(( $pocet_cyklu - 1 ))
done
# kolik readů po testu
kon_sektoru=`cat /sys/block/$ktery_disk/stat | awk {'print $1'}`
# rozdíl v počtu readů
rozdil=$(( $kon_sektoru - $poc_sektoru ))
echo "start sektoru: $poc_sektoru | end sektoru: $kon_sektoru | rozdíl: $rozdil"
echo "Jeden read = $(( $rozdil / $cyklu ))"
Testoval jsem to na disku ve
standby módu. A pak na roztočeném bez jakýchkoliv jiných operací s diskem. A nakonec spustil ikdyž byl disk používán. Nastavoval jsem různé časové hodnoty
$sekund_sleep_loop i počtu cyklů
$pocet_cyklu. Vyšlo mi, že
jedno čtení infa teploty dělá dva
ready, pokud se disk nepoužívá. Zajímá mne kolik to dělá u vás?
Pokud to bude i u ostatních také tak, dalo by se to použít na zmiňovaný
treshold. Počítalo byse kolikrát za nějaký časový úsek proběhlo čtení teploty. To vydělilo počtem readů a pokud by to bylo v tresholdu, dát disku povel na okamžitý přechod do standby módu. Jen jsem přesvědčen, že
bash už na to bude krátký. Vidím to spíš na jazyk kde se dá vytvořit třída
disk a od ní by vznikali instance jednotlivých připojených disků.
Je to dlouhý psaní také proto abych si to sám ujasnil. A aby mne někdo popřípadě poupravil v mých myšlenkových pochodech.
P.S.: taková blbost kvůli diskům kterých je čím dál méně
