Титла: Опростен изход от smartctl
Публикувано от: makeme в Dec 29, 2017, 21:04
Здравейте, колеги. Написал съм си едно просто баш скриптче дето ми събира изхода от "smartctl" и ми изважда в три реда това, което ми трябва. https://github.com/makemegit/lazy-smartctl/blob/master/lazy-smartctl ($2) Използва се:Вместо примерно smartctl -a /dev/sda пускате него ./lazy-smartctl -a /dev/sda. Би трябвало да върви на всяка модерна линукс система. Примери от изхода: Device: Seagate Constellation ES.3 - 7200 rpm - [1.00 TB] PowerOn Time: 2y 356d 4h Self-assessment test: PASSED Reallocated Sectors: 0 Temp: 30°C Device: SiliconMotion based SSDs - Solid State Device - [256 GB] PowerOn Time: 683 Days Total Reads: 2252.56 GB Total Writes: 5478.81 GB Self-assessment test: PASSED Reallocated Sectors: 0 Life: 99% Temp: 33°C Стойностите светват в червено, ако не ми харесват:) Та, върши си ми работа, но ми трябва малко фиидбек относно работата му на различни хардове/ссд-та. По специално дали това за което грепя, винаги е така (до колкото знам, различните СМАРТ контролери - репортват различно).Също така ще съм ви и много благодарен, ако кажете и за какво друго гледате в изхода от smartctl.Скрипта главно го използвам, когато ми дадат няколко стари (наемат се за последно и после отиват в коша) сървъри за да проверя състоянието на хардовете. Обикновено тези машини идват само с много стари хардове (първия изход от скрипта е от такъв, който е от добрите :) ) и аз ги проверявам дали ще могат да изкарат кат за последно :) Както знаете не съм програмист и скрипта съм го кърпил с времето, така че и предложения по кода също приемам. Идеята е да го направя по-гъвкав, че да не си губя времето да скролвам из изхода от smartctl (ако има смартЕрори е нещо страшно). ПП: Качил съм го в Гит понеже е около 150 реда, но ако искате ще го пейстна и тук. В случай, че не ви се занимава да го преглеждате, ще изброя нещата за които грепя, като се надявам поне да предложите и обсъдим допълнения: Model Family Rotation Rate Power_On_Hours Host_Reads_32MiB Host_Writes_32MiB Remaining_Lifetime_Perc overall-health Reallocated_Sector_Ct capacity error count Temperature_Celsius Current_Pending_Sector
Разбира се, ако го няма не го изважда.
Титла: Re: Опростен изход от smartctl
Публикувано от: Naka в Dec 29, 2017, 22:47
аз гледам най вече тези три работи. http://www.linux-bg.org/forum/index.php?topic=43458.msg263931#msg263931
Титла: Re: Опростен изход от smartctl
Публикувано от: makeme в Dec 29, 2017, 23:01
Много благодаря, @Naka! Въпреки, че тамата от линка е причината да съм в този форум (гугъл ме прати тук преди години :) ), не се бях сетил да я погледна пак. Може би защото всъщност се фокусирах върху различния изход при ssd-тата, но определено изброените от теб, отиват в скрипта.
Да добавя тук и един друг въпрос за хората, които имат SSD: Моля, ако на някой репорта за оставащия живот на диска е различен от "Remaining_Lifetime_Perc" да го пейстне тук.
ПП: Предложенията на @Naka са добавени. Скрипта е качен в Гит, че така, с прикачени файлове не е хава :)
Титла: Re: Опростен изход от smartctl
Публикувано от: jet в Dec 30, 2017, 02:40
Може би: Media_Wearout_Indicator
Едно четиво: https://media.kingston.com/support/downloads/MKP_306_SMART_attribute.pdf
Титла: Re: Опростен изход от smartctl
Публикувано от: Naka в Dec 30, 2017, 10:35
Специално за Reallocated_Sector_Ct самото наличие на нещо различно от нула не е грешка и не би трябвало да свети в червено, ако е малко - например само десетина-двадесет. Може би ако е повече от 50-100? Но това което е за тревога (и би трябвало да светне) е ако нараства постоянно с времето. Например днес е 1, утре го гледаш вече е 3, след още един два дена е станало 5, след това 6,7,10, 15. Е такова нарастване с времето ако можеш да го хванеш със скрипта и да светне например в жълто - за warning е много добра индикация, че с някой диск нещо става и в най-близко бъдеще може да умре. Не казвам че ще умре. Може както се покачват, така и да спрат и да се застопори. Мога ти кажа за Seagate как се държат. около 50 % от тях имат Reallocated сектори 10-20. другите 50% са на 0. И аз имам Constellation и редовно ги следя. Залепил съм си едно жълто листче на монитора и когато забележа промяна записвам Reallocated_Sector_Ct, работните часове и датата. тук преписвам лисчето за ориентация. sda сектори часове дата 4 12800 1.Aug.2014 5 13312 20.Aug.2014 6 14000 18.Sept.2014 7 42000 11.Dec.2017
sdd 67 24000 1.Aug.2014 69 37000 25.Jan.2016 70 37409 6.Feb.2016 Та ако скрипта ти може да прави такова нещо - лог като мойто лисче, кога е имало промяна и да писка при бързо нарастване ще е много хубава функция. Прави впечетление че sda-то за 1.5 месеца е скочило 4,5,6 а след това е спало цели 3 години до 11.Dec.2017 и чак тогава е дигнало на 7 сектора. А диска е само на 42000 часа. А пък другият диск има цели 70 сектора и е на 37000 часа. Пиша ги тези работи, щото съм виждал диск как умира. Цяла една година един обикновен Seagate работеше без проблеми и беше на 0. Един ден обаче показа 1. Следващият 2, последващият 3 и така всеки ден растеше с по 2-3 сектора. Така една седмица стигна до 50, и след това почна безконтролно да ги увеличава, направо се взриви. 100 -150- 500 и умря пред очите ми. От първия синдром докато умря минаха 2 седмици, а през всичкото това време работеше идеално.
Титла: Re: Опростен изход от smartctl
Публикувано от: 4096bits в Dec 30, 2017, 12:14
Супер!
Има някакъв питонски модул, който изглежда, че може да опрости цялата работа. Ама нещо май бачка само на Питон 2.
Титла: Re: Опростен изход от smartctl
Публикувано от: spec1a в Dec 30, 2017, 13:13
Една добра идея е стойностите периодично да се записват в база данни (напр. MySQL) и през известен период да се вика скрипт,който проверява как нарастват проблемните сектори.
Титла: Re: Опростен изход от smartctl
Публикувано от: makeme в Dec 30, 2017, 18:36
@Jet, можеш ли да ми дадеш изхода от този ред "Media_Wearout_Indicator" да видя дали стойността е 100 или 0, че в нета има всякакви. @Naka, разбирам ти логиката, но както споменах тези машини минават само през мен и след това не са под мой контрол, че да ги следя. Отделно смяната на харда е за сметка на датацентъра така че и 1 сектор да има - им пиша. Иначе ето ти един простичък скрипт да спреш да драскаш по монитора :) : GeSHi (Bash): #!/bin/bash smartctlpath="/usr/sbin/smartctl" HDDS="sda sdb" email="user@mail.com" filesdir="./" for DEV in $HDDS do realocated=$($smartctlpath -A /dev/$DEV | grep "Reallocated_Sector_Ct" | awk 'NF>1{print $NF}') poweron=$($smartctlpath -A /dev/$DEV | grep "Power_On_Hours" | awk 'NF>1{print $NF}') oldres=$(cat $filesdir/$DEV.txt | awk 'NR==1{print $1}') if [[ $realocated != $oldres ]] then echo -e $realocated ' \t '$poweron ' \t '$(date +%d.%B.%Y) >> $filesdir/$DEV.txt # && mail -s "New Reallocated Sector found in $DEV" $email < $filesdir/$DEV.txt fi done
Промени си само променливите и си махни коментара на края, ако искаш и да ти праща мейл. Нагласи си един крон (smartctl иска root) и си готов. Да стане по-сладко, може да си направиш филтър в мейла да ти ги събира в една папка и така ще си имаш листчета в мейла :) Не пречи и ръчно да попълниш sd*.txt с информацията, която си събрал на ръка и скрипта от там да продължи да следи. Ето и линк към Гит, ако искаш да го свалиш направо: https://github.com/makemegit/listche/blob/master/listche.sh @spec1a, намесят ли се бази данни става сложно и трябва да викам програмистите :) . То идеята ми е да е прост баш скрипт понеже докато съм логнат някъде буквално мога да му пейста кода в един файл и да го стартирам. Edit VladSun: bash syntax highlighting
Титла: Re: Опростен изход от smartctl
Публикувано от: Naka в Jan 15, 2018, 10:51
Май ще трябва да добавяш и 197 Current_Pending_Sectorтук при мен има един лаптопски диск който има 1 такъв сектор, но още няма 198 Offline_Uncorrectable, но очевидно диска има проблеми щото в лога му казва, че има проблем в един LBA сектор. Gogo_SZ в онази тема обесняваше каква е разликата. === START OF INFORMATION SECTION === Model Family: Seagate Momentus 5400.5 Device Model: ST9320320AS Serial Number: 5SX5SAGG LU WWN Device Id: 5 000c50 0166d69c4 Firmware Version: HP07 User Capacity: 320,072,933,376 bytes [320 GB] Sector Size: 512 bytes logical/physical Device is: In smartctl database [for details use: -P show] ATA Version is: ATA8-ACS T13/1699-D revision 4 SATA Version is: SATA 2.6, 3.0 Gb/s Local Time is: Sun Dec 17 17:16:11 2017 EST SMART support is: Available - device has SMART capability. SMART support is: Enabled
=== START OF READ SMART DATA SECTION === SMART overall-health self-assessment test result: PASSED See vendor-specific Attribute list for marginal Attributes.
General SMART Values: Offline data collection status: (0x00) Offline data collection activity was never started. Auto Offline Data Collection: Disabled. Self-test execution status: ( 0) The previous self-test routine completed without error or no self-test has ever been run. Total time to complete Offline data collection: ( 723) seconds. Offline data collection capabilities: (0x73) SMART execute Offline immediate. Auto Offline data collection on/off support. Suspend Offline collection upon new command. No Offline surface scan supported. Self-test supported. Conveyance Self-test supported. Selective Self-test supported. SMART capabilities: (0x0003) Saves SMART data before entering power-saving mode. Supports SMART auto save timer. Error logging capability: (0x01) Error logging supported. General Purpose Logging supported. Short self-test routine recommended polling time: ( 2) minutes. Extended self-test routine recommended polling time: ( 122) minutes. Conveyance self-test routine recommended polling time: ( 3) minutes. SCT capabilities: (0x003f) SCT Status supported. SCT Error Recovery Control supported. SCT Feature Control supported. SCT Data Table supported.
SMART Attributes Data Structure revision number: 10 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x000f 077 072 006 Pre-fail Always - 54720505 3 Spin_Up_Time 0x0002 099 096 000 Old_age Always - 0 4 Start_Stop_Count 0x0033 097 097 020 Pre-fail Always - 3723 5 Reallocated_Sector_Ct 0x0033 100 100 036 Pre-fail Always - 0 7 Seek_Error_Rate 0x000f 084 060 030 Pre-fail Always - 278639365 9 Power_On_Hours 0x0032 090 090 000 Old_age Always - 8937 10 Spin_Retry_Count 0x0013 100 100 097 Pre-fail Always - 0 12 Power_Cycle_Count 0x0033 097 097 020 Pre-fail Always - 3632 184 End-to-End_Error 0x0033 100 100 097 Pre-fail Always - 0 187 Reported_Uncorrect 0x0032 001 001 000 Old_age Always - 53622 188 Command_Timeout 0x0032 100 098 000 Old_age Always - 4295033294 189 High_Fly_Writes 0x003a 100 100 000 Old_age Always - 0 190 Airflow_Temperature_Cel 0x0022 081 043 045 Old_age Always In_the_past 19 (0 27 19 15 0) 191 G-Sense_Error_Rate 0x0032 100 100 000 Old_age Always - 12 192 Power-Off_Retract_Count 0x0032 100 100 000 Old_age Always - 0 193 Load_Cycle_Count 0x0032 099 099 000 Old_age Always - 3398 194 Temperature_Celsius 0x0022 019 057 000 Old_age Always - 19 (0 10 0 0 0) 195 Hardware_ECC_Recovered 0x001a 053 044 000 Old_age Always - 54720505 196 Reallocated_Event_Count 0x0033 100 100 036 Pre-fail Always - 0 197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 1 198 Offline_Uncorrectable 0x0010 100 100 000 Old_age Offline - 0 199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0 254 Free_Fall_Sensor 0x0032 100 100 000 Old_age Always - 0
SMART Error Log Version: 1 ATA Error Count: 61458 (device log contains only the most recent five errors) CR = Command Register [HEX] FR = Features Register [HEX] SC = Sector Count Register [HEX] SN = Sector Number Register [HEX] CL = Cylinder Low Register [HEX] CH = Cylinder High Register [HEX] DH = Device/Head Register [HEX] DC = Device Command Register [HEX] ER = Error register [HEX] ST = Status register [HEX] Powered_Up_Time is measured from power on, and printed as DDd+hh:mm:SS.sss where DD=days, hh=hours, mm=minutes, SS=sec, and sss=millisec. It "wraps" after 49.710 days.
Error 61458 occurred at disk power-on lifetime: 8936 hours (372 days + 8 hours) When the command that caused the error occurred, the device was active or idle.
After command completion occurred, registers were: ER ST SC SN CL CH DH -- -- -- -- -- -- -- 40 51 00 66 97 22 0b Error: UNC at LBA = 0x0b229766 = 186816358
Commands leading to the command that caused the error were: CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name -- -- -- -- -- -- -- -- ---------------- -------------------- 25 00 80 0f 97 22 eb 00 00:02:36.435 READ DMA EXT 25 00 80 87 24 0b ea 00 00:02:36.305 READ DMA EXT 25 00 80 0f 97 22 eb 00 00:02:34.072 READ DMA EXT 25 00 80 07 24 0b ea 00 00:02:34.071 READ DMA EXT 25 00 80 8f 96 22 eb 00 00:02:34.070 READ DMA EXT
Error 61457 occurred at disk power-on lifetime: 8936 hours (372 days + 8 hours) When the command that caused the error occurred, the device was active or idle.
After command completion occurred, registers were: ER ST SC SN CL CH DH -- -- -- -- -- -- -- 40 51 00 66 97 22 0b Error: UNC at LBA = 0x0b229766 = 186816358
Commands leading to the command that caused the error were: CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name -- -- -- -- -- -- -- -- ---------------- -------------------- 25 00 80 0f 97 22 eb 00 00:02:34.072 READ DMA EXT 25 00 80 07 24 0b ea 00 00:02:34.071 READ DMA EXT 25 00 80 8f 96 22 eb 00 00:02:34.070 READ DMA EXT 25 00 80 87 23 0b ea 00 00:02:34.069 READ DMA EXT 25 00 80 0f 96 22 eb 00 00:02:34.069 READ DMA EXT
Error 61456 occurred at disk power-on lifetime: 8936 hours (372 days + 8 hours) When the command that caused the error occurred, the device was active or idle.
After command completion occurred, registers were: ER ST SC SN CL CH DH -- -- -- -- -- -- -- 40 51 00 66 97 22 0b Error: UNC at LBA = 0x0b229766 = 186816358
Commands leading to the command that caused the error were: CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name -- -- -- -- -- -- -- -- ---------------- -------------------- 25 00 80 0f 97 22 eb 00 00:01:11.995 READ DMA EXT 35 00 08 47 00 60 e0 00 00:01:11.994 WRITE DMA EXT 35 00 08 2f 00 5e e0 00 00:01:11.994 WRITE DMA EXT 35 00 06 0f f1 00 e0 00 00:01:11.994 WRITE DMA EXT 35 00 08 ff ff ff ef 00 00:01:11.993 WRITE DMA EXT
Error 61455 occurred at disk power-on lifetime: 8936 hours (372 days + 8 hours) When the command that caused the error occurred, the device was active or idle.
After command completion occurred, registers were: ER ST SC SN CL CH DH -- -- -- -- -- -- -- 40 51 00 66 97 22 0b Error: UNC at LBA = 0x0b229766 = 186816358
Commands leading to the command that caused the error were: CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name -- -- -- -- -- -- -- -- ---------------- -------------------- 25 00 80 0f 97 22 eb 00 00:01:09.629 READ DMA EXT 35 00 08 47 00 5e e0 00 00:01:09.629 WRITE DMA EXT 35 00 05 0f f1 00 e0 00 00:01:09.628 WRITE DMA EXT 35 00 08 57 2d 00 e0 00 00:01:09.628 WRITE DMA EXT 25 00 80 0f 97 22 eb 00 00:01:07.223 READ DMA EXT
Error 61454 occurred at disk power-on lifetime: 8936 hours (372 days + 8 hours) When the command that caused the error occurred, the device was active or idle.
After command completion occurred, registers were: ER ST SC SN CL CH DH -- -- -- -- -- -- -- 40 51 00 66 97 22 0b Error: UNC at LBA = 0x0b229766 = 186816358
Commands leading to the command that caused the error were: CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name -- -- -- -- -- -- -- -- ---------------- -------------------- 25 00 80 0f 97 22 eb 00 00:01:07.223 READ DMA EXT 35 00 68 3f 39 5f e0 00 00:01:07.222 WRITE DMA EXT 35 00 10 b7 a9 34 e0 00 00:01:07.222 WRITE DMA EXT 35 00 18 df 44 01 e0 00 00:01:07.221 WRITE DMA EXT 35 00 10 cf 9c 00 e0 00 00:01:07.221 WRITE DMA EXT
SMART Self-test log structure revision number 1 No self-tests have been logged. [To run self-tests, use: smartctl -t]
SMART Selective self-test log data structure revision number 1 SPAN MIN_LBA MAX_LBA CURRENT_TEST_STATUS 1 0 0 Not_testing 2 0 0 Not_testing 3 0 0 Not_testing 4 0 0 Not_testing 5 0 0 Not_testing Selective self-test flags (0x0): After scanning selected spans, do NOT read-scan remainder of disk. If Selective self-test is pending on power-up, resume after 0 minute delay. Сега ще го тествам с dd за четене и с програмата на сеагейт и пак ще пиша. ------------------------------------------------------ PS: Както се очакваше току що dd-то изби с Input/output error на същият сектор кaто в лога му. oot@Microknoppix:~# dd if=/dev/sda of=/dev/null bs=32768 dd: error reading '/dev/sda': Input/output error 2919005+1 records in 2919005+1 records out 95649972224 bytes (96 GB, 89 GiB) copied, 1437.23 s, 66.6 MB/s root@Microknoppix:~# dmesg [ 3935.751455] blk_update_request: I/O error, dev sda, sector 186816358 [ 3935.751465] Buffer I/O error on dev sda, logical block 23352044, async page read
PS2: След SeaTools(dos) ->full_test, програмата го откри проблемният сектор, предложи да го оправи и го оправи. сега резултата е: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x000f 117 072 006 Pre-fail Always - 132909457 3 Spin_Up_Time 0x0002 099 096 000 Old_age Always - 0 4 Start_Stop_Count 0x0033 097 097 020 Pre-fail Always - 3726 5 Reallocated_Sector_Ct 0x0033 100 100 036 Pre-fail Always - 0 7 Seek_Error_Rate 0x000f 084 060 030 Pre-fail Always - 278640413 9 Power_On_Hours 0x0032 090 090 000 Old_age Always - 8940 10 Spin_Retry_Count 0x0013 100 100 097 Pre-fail Always - 0 12 Power_Cycle_Count 0x0033 097 097 020 Pre-fail Always - 3635 184 End-to-End_Error 0x0033 100 100 097 Pre-fail Always - 0 187 Reported_Uncorrect 0x0032 001 001 000 Old_age Always - 53626 188 Command_Timeout 0x0032 100 098 000 Old_age Always - 4295033294 189 High_Fly_Writes 0x003a 100 100 000 Old_age Always - 0 190 Airflow_Temperature_Cel 0x0022 075 043 045 Old_age Always In_the_past 25 (0 27 27 24 0) 191 G-Sense_Error_Rate 0x0032 100 100 000 Old_age Always - 12 192 Power-Off_Retract_Count 0x0032 100 100 000 Old_age Always - 0 193 Load_Cycle_Count 0x0032 099 099 000 Old_age Always - 3417 194 Temperature_Celsius 0x0022 025 057 000 Old_age Always - 25 (0 10 0 0 0) 195 Hardware_ECC_Recovered 0x001a 058 044 000 Old_age Always - 132909457 196 Reallocated_Event_Count 0x0033 100 100 036 Pre-fail Always - 0 197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 0 198 Offline_Uncorrectable 0x0010 100 100 000 Old_age Offline - 0 199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0 254 Free_Fall_Sensor 0x0032 100 100 000 Old_age Always - 0
Тъй че слагай го. Offline_Uncorrectable и Current_Pending_Sector са дупе и гащи. Винаги съм ги виждал в комплект - или е само едното или само другото или двете едновременно. Но и двата означават бад сектори и диска там не може да чете.
Титла: Re: Опростен изход от smartctl
Публикувано от: VladSun в Jan 15, 2018, 13:44
Една добра идея е стойностите периодично да се записват в база данни (напр. MySQL) и през известен период да се вика скрипт,който проверява как нарастват проблемните сектори.
За такива неща - Zabbix https://share.zabbix.com/storage-devices/smartmontools ($2) не съм ги разглеждал, но ако не ти харесат - пишеш си твои :)
Титла: Re: Опростен изход от smartctl
Публикувано от: go_fire в Jan 17, 2018, 07:19
Майк ми, ще си пзволя да те критикувам!
Темата е много интересна и както се казва на чист български — евала!
Ама прочети сам, за какво си говорите — баш, смарт, сървъри.
Е кое от тези, кой точно новак го знае, какво е ???
И сам си написал, че това нещо го ползваш, за да улеснява професионалния ти живот, макар вероятно да може да се употреби и вкъщи.
Така, че присъдата е дадена. Това не е тема за начинаещи!
Титла: Re: Опростен изход от smartctl
Публикувано от: makeme в Jan 17, 2018, 11:09
@Naka, когато прочетох за какво е Current_Pending_Sector и се двоумях, но след като писа, "камъчето обърна каруцата" и го добавих. :)
@go_fire, критика винаги понасям. Честно да ти кажа, доста време отделих в търсене на правилния раздел, но явно не съм се справил :) Ако можеш да ми кажеш по-подходящ раздел за подобни скриптчета, работещи с програми (smartctl) с удоволствие ще си взема бележка за следващия път.
|