Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
witam, korzystam z narzędzia smartctl - w jaki sposób sprawdzić mogę czy dysk nadaje sie do uzytku albo nie jest ostro zajechany i zaraz moze odleciec w kosmos?
na które parametry powinienem zwrócić uwage?
chce napisac skrypt w bashu do automatycznego wykrywania takiego dysku w ramach nauki ale nie wiem, które parametry powinny zostac wziete pod uwage i w jaki wartosciach najlepiej
Offline
np tak:
# G1 ### wto sty 09 13:42:39 domek : ~ root ~> smartcheck /dev/sda - Model: Seagate Barracuda ES /dev/sda - Symbol: ST3400620NS /dev/sda - Seria: 9QH0BX9K /dev/sda: Power_On_Hours = 38930 /dev/sda: Reallocated_Sector_Ct = 0 /dev/sda: Spin_Retry_Count = 0 /dev/sda: Reported_Uncorrect = 0 /dev/sda: Current_Pending_Sector = 0 /dev/sda: Offline_Uncorrectable = 0 /dev/sda: UDMA_CRC_Error_Count = 0 /dev/sda: Multi_Zone_Error_Rate = 0
Skrypcio wygląda tak:
#!/bin/bash # SMARTCTL=`which smartctl 2>/dev/null` if [ -z $SMARTCTL ] || [ ! -x $SMARTCTL ]; then echo "It seems you have no smartmontools installed. " echo "Invoke 'apt install smartmontools' and re-run script" exit 1 fi function check { tmp_parm=`mktemp` tmp_name=`mktemp` $SMARTCTL -A $1 | sed -r 's/^\s+//g' > $tmp_parm $SMARTCTL -i $1| sed -r 's/^\s+//g' > $tmp_name echo -e $1 - `egrep -m1 "Model " $tmp_name | awk '{$1="";$2=""; print "Model: "$0}'` echo -e $1 - `egrep -m1 "Device " $tmp_name | awk '{$1="";$2=""; print "Symbol: "$0}'` echo -e $1 - `egrep -m1 "Serial " $tmp_name | awk '{$1="";$2=""; print "Seria: "$0}'` for val in 9 5 10 11 171 172 177 181 187 188 196 197 198 199 200 231 ; do print=`egrep "^$val " $tmp_parm | awk '{ print $2" = "$10 }'` if [ ! -z "$print" ]; then echo -n "$1: " if [[ `echo $print | grep "Power_On_Hours" ` ]]; then echo -e "\033[36;2m$print\033[0m" elif [ `echo $print | awk '{ print $3 }'` != 0 ]; then echo -e "\033[31;2m$print\033[0m" else echo -e "\033[32;2m$print\033[0m" fi fi done echo rm -f $tmp_parm rm -r $tmp_name } if [ $# -gt 0 ]; then devices=$@ else devices=`ls /dev/sd[a-z] 2>/dev/null ; ls /dev/nvme[0-9]n[0-9] 2>/dev/null` fi echo if [ -b /dev/twe0 ]; then check "-d 3ware,0 /dev/twe0" check "-d 3ware,1 /dev/twe0" else for d in $devices; do check $d done fi
Poza tym skonfiguruj sobie dostarczanie maili systemowych do skrzynki (np przez ESMTP), skonfiguruj demona [b]smartd[/b], żeby pilnował parametrów dysków,
w razie problemów dostaniesz eleganckiego maila z informacją.
Sznurki:
https://wiki.archlinux.org/index.php/S.M.A.R.T.#daemon_management
https://www.techrepublic.com/blog/linux-and-open-source/send-mail-with-esmtp-for-a-simple-single-user-system/
Ja np mam tak ustawione:
cat /etc/smartd.conf
DEVICESCAN -a -o on -S on -n standby,q -s (S/../.././02|L/../../6/03) -W 4,35,48 -m root /dev/sda -H -l error -l selftest -t -I 194-W 4,40,48 -R 5 -m root
Gdzie parametr [b]-m root[/b] oznacza, gdzie ma posłać pocztę (adres email lub nazwa użytkownika (p ile masz ustawione aliansy pocztowe)).
Pozdro
Ostatnio edytowany przez Jacekalex (2018-01-09 13:56:44)
Offline
Ale kombinujecie. xD
Demon smart potrafi sam wykrywać takie "padające w niedługim czasie" dyski i wysyła odpowiedni komunikat w logu systemowym. Praktycznie można sobie monitorować każdy z parametrów i jak te będą ulegać zmianie, to w logu będzie stosowna informacja, np:
Jan 07 18:11:31 morfikownia smartd[1286]: Device: /dev/sda [SAT], SMART Prefailure Attribute: 3 Spin_Up_Time changed from 142 to 141 Jan 08 10:54:23 morfikownia smartd[1286]: Device: /dev/sda [SAT], SMART Prefailure Attribute: 3 Spin_Up_Time changed from 141 to 142 Jan 08 18:49:01 morfikownia smartd[1286]: Device: /dev/sda [SAT], SMART Prefailure Attribute: 3 Spin_Up_Time changed from 142 to 141
A wszystko można se ustawić w /etc/smartd.conf . Ja mam tam taką linijkę:
/dev/sda -H -l error -l selftest -t -I 190 -I 194 -W 0,50,55
No i ona:
- włącza monitoring dysku /dev/sda
- sprawdza status żywotności dysku
- sprawdza liczbę błędów dysku
- sprawdza ilość błędnych testów
- monitoruje zmiany we wszystkich atrybutach dysku
- ignoruje zmiany w prametrach 190 i 194, które w przypadku mojego dysku odpowiadają za temperaturę.
- wypisuje log z informacją jedynie w przypadku gdy temperatura dysku przekroczy 50 stopni, a gdy przekroczy 55 to wysyła maila na konto root.
Ta konfiguracja może być rozbudowana jak cholera wliczając w to również automatyczne przeprowadzanie testów co jakiś czas. Więcej info jest w
$ man smartd.conf
Offline
Time (s) | Query |
---|---|
0.00011 | SET CHARSET latin2 |
0.00009 | SET NAMES latin2 |
0.00117 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.148.108.201' WHERE u.id=1 |
0.00073 | UPDATE punbb_online SET logged=1732684222 WHERE ident='3.148.108.201' |
0.00101 | SELECT * FROM punbb_online WHERE logged<1732683922 |
0.00079 | SELECT topic_id FROM punbb_posts WHERE id=316684 |
0.00104 | SELECT id FROM punbb_posts WHERE topic_id=30183 ORDER BY posted |
0.00094 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=30183 AND t.moved_to IS NULL |
0.00006 | SELECT search_for, replace_with FROM punbb_censoring |
0.00091 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=30183 ORDER BY p.id LIMIT 0,25 |
0.00081 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=30183 |
Total query time: 0.00766 s |