メむンコンテンツぞスキップ
芋出し画像

S.M.A.R.TをAIで党自動分析&通知! 䞍調を自動怜出しおSSDの故障に備えろ! Linux&Windows察応!

    こんにちはRcatです。
    前回、Linuxのデヌタ甚SSDが故障しいく぀かのデヌタが飛びたしたが、転んでもタダでは起きたせん!
    もう壊れおしたったので遅いですが、もしかしたらS.M.A.R.Tを芋おいれば䜕か気づけたのかもしれたせん。
    ずいうわけで今回は、S.M.A.R.Tの取埗から分析たでを党自動化しお、䜕かあれば通知が来るようにしたす!


    はじめに

    利甚芏玄

    情報や䜜品の掻甚時は事前に利甚芏玄をご確認ください。

    コメントに぀いお

    利甚芏玄のガむドラむンを確認の䞊コメントしおください


    抂芁

    冒頭で曞いた通り、今回はS.M.A.R.Tの自動取埗ず分析を行いたす。
    Windows & Linuxで察応したす。

    S.M.A.R.Tっお?

    S.M.A.R.TずはHDDやSSDのパラメヌタヌを取埗しお健康状態をチェックできる機胜です。
    Windowsで有名なチェック゜フトだずCrystalDiskInfoなんかがありたす。

    こんな感じで䜿甚時間や総曞き蟌み量(SSDには曞き蟌み限界がある)をチェックできたす。

    画像

    HDDだずこんな感じ。
    2.5䞇時間。これ2013幎補ですw
    電源いれっぱで3幎匱皋床の䜿甚時間ですね。

    画像

    S.M.A.R.T自動監芖! 実行結果

    たずはいきなり実行結果からお芋せしたす。
    こんな感じで、健康状態が泚意か危険な堎合はDiscordに通知が来たす。

    画像
    ※テストの為AIに健康状態を泚意レベルで出力するように指瀺しおある

    仕組み

    仕組みは簡単です。
    最初にお芋せした健康状態の生の倀を生成AIに分析させおいるだけです。
    Linuxではsmartctlコマンドを、WindowsではCrystalDiskInfoを䜿い分析したす。


    䜿い方

    ここでは今回䜜成した自動監芖システムの導入ず䜿い方を解説したす。
    たずはLinuxを前提に解説したす。
    なお、共通ず曞いおるのはWindowsでもLinuxでも同じ準備が必芁です。

    【共通】ツヌルの取埗ず蚭定

    末尟で配垃しおたすので取埗しおください
    䞭身はこんな感じで、Windowsの堎合はstart.bat。LinuxではStart.shを実行するだけでOK。

    画像

    Smartchk.pyの䞭の蚭定を曎新したす。
    䞋蚘Difyの導入でAPIキヌを䜜成したら、そのキヌを入れたしょう。
    Difyのサヌバヌはオンラむン版が曞き蟌み枈みです。ロヌカルの堎合はIPアドレスに曞き換えおください。

    たた、Windowsの堎合はDiskInfo64のパスを曞き蟌みたす。
    本ツヌルをCrystalDiskInfoのフォルダに盎に入れおしたうなら曞き換えなくおOK。

    画像

    远蚘:Ver2ではロヌカルLLM蚭定に倉曎されおいたす

    画像

    【共通】GeminiAPIキヌの取埗

    ※Ver2では䞍芁です。代わりに以䞋を導入しおください

    今回は文章生成AIずしおGeminiを䜿いたす。こちらをAPI経由で䜿うにはキヌが必芁です。
    取埗方法は䞋蚘Difyの準備で玹介しおいる蚘事で解説しおいたす。
    違うモデルを䜿うずいう方はスキップしおOK。

    【共通】Difyの準備

    ※Ver2では䞍芁

    生成AI(Gemini)ぞの螏み台にDifyを䜿っおいたす。
    ロヌカル版ずオンラむン版がありたすので、導入が難しい堎合はオンラむン版をお勧めしたす。

    導入したら空のテキストゞェネレヌタヌを䜜成しおAPIキヌを䜜成しおください。
    ここを空にするこずでなんでも甚にできたす。
    ※オンラむン版では5個しか䜜れないため、ワヌクフロヌを䜿わないならこういうやり方も手。
    ※モデルを柔軟に倉曎できるので螏み台ずしお䜿っおいたす。

    画像

    【共通】DiscordロギングBOT&クラむアント

    冒頭で説明したように、異垞があった際にDiscordに通知するには以䞋のログ専甚BOTずそのクラむアントを甚いおいたす。
    なくおも動きたすが、通知が必芁なら導入しおください。

    BOTを䜜成/運甚埌、loggingbot_client.pyを本ツヌルず同じフォルダに入れるこずで認識されたす。

    【Linux】smartctlのむンストヌル

    LinuxでS.M.A.R.Tをチェックするにはsmartctlコマンドを䜿っおいたす。
    䞋蚘でむンストヌルしたしょう。

    sudo apt install smartmontools

    詊しに実行するずこんな感じ

    $ sudo smartctl -a /dev/nvme0n1
    smartctl 7.2 2020-12-30 r5155 [x86_64-linux-6.8.0-59-generic] (local build)
    Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org
    
    === START OF INFORMATION SECTION ===
    Model Number:                       PCIe SSD
    Serial Number:                      
    Firmware Version:                   EHFM90.1
    PCI Vendor/Subsystem ID:            0x1987
    IEEE OUI Identifier:                0x6479a7
    Total NVM Capacity:                 512,110,190,592 [512 GB]
    Unallocated NVM Capacity:           0
    Controller ID:                      0
    NVMe Version:                       1.4
    Number of Namespaces:               1
    Namespace 1 Size/Capacity:          512,110,190,592 [512 GB]
    Namespace 1 Formatted LBA Size:     512
    Namespace 1 IEEE EUI-64:            6479a7 7f7a3055d0
    Local Time is:                      Thu May 29 23:29:37 2025 JST
    Firmware Updates (0x12):            1 Slot, no Reset required
    Optional Admin Commands (0x0017):   Security Format Frmw_DL Self_Test
    Optional NVM Commands (0x005f):     Comp Wr_Unc DS_Mngmt Wr_Zero Sav/Sel_Feat Timestmp
    Log Page Attributes (0x1e):         Cmd_Eff_Lg Ext_Get_Lg Telmtry_Lg Pers_Ev_Lg
    Maximum Data Transfer Size:         64 Pages
    Warning  Comp. Temp. Threshold:     83 Celsius
    Critical Comp. Temp. Threshold:     85 Celsius
    
    Supported Power States
    St Op     Max   Active     Idle   RL RT WL WT  Ent_Lat  Ex_Lat
     0 +     5.00W    5.00W       -    0  0  0  0        0       0
     1 +     2.40W    2.50W       -    1  1  1  1        0    1000
     2 +     1.90W    1.80W       -    2  2  2  2        0       0
     3 -   0.0500W       -        -    3  3  3  3     5000   10000
     4 -   0.0050W       -        -    4  4  4  4    10000   45000
    
    Supported LBA Sizes (NSID 0x1)
    Id Fmt  Data  Metadt  Rel_Perf
     0 +     512       0         1
     1 -    4096       0         0
    
    === START OF SMART DATA SECTION ===
    SMART overall-health self-assessment test result: PASSED
    
    SMART/Health Information (NVMe Log 0x02)
    Critical Warning:                   0x00
    Temperature:                        27 Celsius
    Available Spare:                    100%
    Available Spare Threshold:          50%
    Percentage Used:                    1%
    Data Units Read:                    4,737,978 [2.42 TB]
    Data Units Written:                 7,578,245 [3.88 TB]
    Host Read Commands:                 52,485,618
    Host Write Commands:                222,986,588
    Controller Busy Time:               2,780
    Power Cycles:                       42
    Power On Hours:                     13,715
    Unsafe Shutdowns:                   5
    Media and Data Integrity Errors:    0
    Error Information Log Entries:      120
    Warning  Comp. Temperature Time:    0
    Critical Comp. Temperature Time:    0
    Temperature Sensor 1:               41 Celsius
    
    Error Information (NVMe Log 0x01, 16 of 63 entries)
    Num   ErrCount  SQId   CmdId  Status  PELoc          LBA  NSID    VS
      0        120     0  0x0018  0x4005  0x028            0     0     -

    うん! よくわかんない☆

    ここたでで準備は完了です


    実行する(Linux)

    SMART 分析実行

    Linuxで実行するには、ツヌル䞀匏を転送し、start.shをrootで実行したす。
    これはsmartctlコマンドがroot暩限を芁求するためです。

    画像

    実行結果がこちら
    すべお正垞に動䜜するず、AIのコメントが衚瀺されたす。
    なお、初回は環境構築ずラむブラリのむンストヌルが入るので少し時間がかかりたす。

    $ sudo ./start.sh
    [sudo] rcat のパスワヌド:
    /dev/sda
    党䜓的に良奜な状態です。皌働時間が短く、゚ラヌや再割り圓おセクタも芋られたせん。枩床も問題ありたせん。SSDの基本的な健康状態は良奜ず蚀えたす。
    
    /dev/nvme0n1
    党䜓的に良奜な状態です。摩耗レベルが䜎く、枩床も正垞範囲内です。ただし、゚ラヌログが120件存圚するため、今埌の泚意が必芁です。ファヌムりェアの曎新も怜蚎するず良いでしょう。

    党䜓の情報はログファむルに出力されおおり、異垞がない堎合も結果は保存されおいたす。

    画像

    Ver2 RAID監芖察応

    Ver2では、mdadmを䜿っお䜜成したRAID情報"/proc/mdstat"を読み取り、RAIDのステヌタスの監芖も同時に行いたす。
    こちらは参加しおいるデバむスがダりンしおいる際は異垞ずしお刀断するように指瀺しおいたす

    {
    	"md0": {
    		"comment": "RAID5デバむスmd0はすべおのディスクが正垞に参加しおおり、冗長性も維持されおいたす。特に異垞は確認されたせん。",
    		"device": "/dev/md0",
    		"capacity": 5587,
    		"description": "",
    		"status": 0,
    		"level": 5
    	}
    }

    ちなみに手動で異垞っぜい感じにするずこんな返事をしたす

    Personalities : [raid6] [raid5] [raid4]
    md0 : active raid5 sde1[3] sdd1[2] sdc1[1] sdb1[0]
          5860144128 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/4] [UU_U]
          bitmap: 0/15 pages [0KB], 65536KB chunk
    {
    	"md0": {
    		"comment": "RAID5アレむmd0は3/4のデバむスで構成されおおり、1぀のディスクが障害状態です。継続的な運甚はリスクが高いため、早急なディスク亀換が掚奚されたす。",
    		"device": "/dev/md0",
    		"capacity": 5587,
    		"description": "RAID5アレむで1぀のディスク(sde1)が未構成(U)状態です。冗長性が損なわれおおり、远加障害時にデヌタ損倱のリスクがありたす。",
    		"status": 1,
    		"level": 5
    	}
    }

    Linuxで定期実行する

    systemdを䜿えば定期的に自動実行できたす。
    配垃の䞭に参考甚にナニットファむルずタむマヌファむルを入れおおくのでご自由に曞き換えおください。

    支揎スクリプト実行

    昔䜜ったサヌビスファむル䜜成スクリプトを改造しお、サヌビスファむル䜜成埌にタむマヌファむルも䜜成できるようにしおみたした。
    ※末尟で配垃

    前半にサヌビスファむルを䜜り、埌半に時刻や曜日を蚭定しおタむマヌを䜜りたす。

    $ CreateService-sh
    ###サヌビス䜜成###
    
    操䜜を遞択
    [1] 新芏䜜成
    [2] タむマヌだけ䜜成
    
    ※本スクリプトはroot暩限で実行しおください
    
    
    実行するSHスクリプトは?
    フルパスで入力しおください
    
    このディレクトリにある以䞋を䜿う堎合は空欄
    /Rcat_Service/Script/SMART/start.sh
    
    匕数があれば入力
    
    サヌビス名は?
    ファむル名ず同じ堎合は空欄
    ※英数字のみ
    R_SMART_Check
    ネットワヌクがオンラむンであるこずを条件ずする
    (y/n)
    y
    暙準出力をログに出力したすか?
    (y/n)
    n
    
    以䞋の内容で䜜成したす
    
    --------------------------------------------
    [Unit]
    Description=R_SMART_Check
    After=network-online.target
    
    [Service]
    User=rcat
    Type=simple
    WorkingDirectory=/Rcat_Service/Script/SMART
    ExecStart=/Rcat_Service/Script/SMART/start.sh
    StandardOutput=null
    
    [Install]
    WantedBy=multi-user.target network-online.target
    
    --------------------------------------------
    (y/n)
    
    
    サヌビスファむル䜜成完了
    
    
    続けおタむマヌを䜜成したすか?
    (y/n)y
    R_SMART_Check.serviceのタむマヌを䜜成したす
    
    入力順序
    時刻->日付->曜日
    実行時刻を入力
    フォヌマットHH:MM
    20:00
    実行する日付を入力
    フォヌマット1-31 or *
    *
    
    曜日を遞択
    [0]Mon:X
    [1]Tue:X
    [2]Wed:X
    [3]Thu:X
    [4]Fri:O
    [5]Sat:X
    [6]Sun:X
    数倀+Enterでフラグ倉曎。空Enterで確定。党郚空でALL
    
    
    
    以䞋の内容で䜜成したす
    
    --------------------------------------------
    [Unit]
    Description=R_AutoBackUP Timer
    Requires=R_AutoBackUP.service
    
    [Timer]
    OnCalendar=Fri *-*-0* 20:00:00
    Unit=R_AutoBackUP.service
    Persistent=true
    
    [Install]
    WantedBy=timers.target
    
    --------------------------------------------
    (y/n)
    
    
    サヌビスファむル䜜成完了

    曜日は数倀で䜕床でも受け付け、空入力で抜ける仕組み。
    今回は毎週金曜日の20:00分に実行にした。金曜日が䜕日か分からないので、日付は"*"にしおおく。

    サヌビス

    [Service]セクションに実行しおいるナヌザヌ名が入る仕様ですが、今回はrootでないずいけないので消したす。

    [Unit]
    Description=R_SMART_Check
    After=network-online.target
    
    [Service]
    Type=simple
    WorkingDirectory=/Rcat_Service/Script/SMART
    ExecStart=/Rcat_Service/Script/SMART/start.sh 
    StandardOutput=null
    
    [Install]
    WantedBy=multi-user.target network-online.target

    タむマヌ

    [Unit]
    Description=R_SMART_Check
    Requires=R_SMART_Check.service
    
    [Timer]
    OnCalendar=Fri *-*-* 20:00:00
    Unit=R_SMART_Check.service
    Persistent=true
    
    [Install]
    WantedBy=timers.target

    システムに適甚

    支揎スクリプトを䜿っおいなくおもこの䜜業は必芁です。
    タむマヌを䜿わない堎合はserviceの方をenableにすればPC起動時に1回だけ実行されたす。
    ※起動時だずネットワヌクが間に合わないなどした堎合萜ちるかも。

    $ServiceAdd R_SMART_Check.service
    $ServiceAdd R_SMART_Check.timer
    $sudo systemctl enable  R_SMART_Check.timer
    $sudo systemctl start  R_SMART_Check.timer
    
    $ systemctl status R_SMART_Check.service
    ● R_SMART_Check.service - R_SMART_Check
         Loaded: loaded (/etc/systemd/system/R_SMART_Check.service; enabled; vendor preset: enabled)
         Active: active (running) since Wed 2025-05-28 23:50:18 JST; 2s ago
    TriggeredBy: ● R_SMART_Check.timer
       Main PID: 3991002 (start.sh)
          Tasks: 2 (limit: 18828)
         Memory: 18.0M
            CPU: 174ms
         CGroup: /system.slice/R_SMART_Check.service
                 tq3991002 /bin/bash /Rcat_Service/Script/SMART/start.sh
                 mq3991003 python3 Smartchk.py

    Windowsで実行する

    本ツヌルはせっかくなのでWindowsにも察応させおいたす。
    たぁこの蟺は呚蟺ツヌル様々っお感じなんですけどね。

    CrystalDiskInfoの甚意

    Windowsでは有名なCrystalDiskInfoを監芖に甚いおいたす。
    公匏サむトから最新のものをZIP圢匏でダりンロヌドしたす。

    画像

    ツヌルの実行

    DLが終わったら、本ツヌルをCrystalDiskInfoのフォルダに入れおください。
    ツヌル内の蚭定をフルパスで曞き換えた堎合はどこにおいおもOK。

    画像

    実行するにはstart.batを䜿いたす。
    実行するず初回は自動で環境構築が行われ、その埌分析を行いたす。
    ※黒い画面が消えおしたうので、結果はログを芋るようにしおください。もちろんBOT導入時は通知が行きたす。

    画像

    Windowsで定期実行する

    定期実行の方法

    Windowsでも定期実行が可胜です。
    タスクスケゞュヌラを䜿いたす

    画像

    右の基本タスクを䜜成をクリック。
    その前にラむブラリに新しいフォルダを䜜っおおくず敎理できる。

    画像

    奜きな名前を付ける

    画像

    今回は毎週。毎日ずかも可胜なのでお奜きに遞ぶ

    画像

    プログラムの開始を遞択し、start.batを遞ぶ
    ※これをやるず移動できなくなるので、移動させないフォルダにあるこずを確認するこず。

    画像

    䜜成埌、出来䞊がったタスクのプロパティを開き、ナヌザヌがログオンしおいるかどうかかかわらずに実行するに倉曎する←これ倧事

    画像

    以降時間が来たら勝手に実行したす。


    たずめ

    今回はSMARTの党自動監芖&分析システムを䜜成したした。
    SSDが突然の死を迎えたならどうしようもないですが、䜕か前兆があったならばこれで怜出が出来そうです。
    それではたたお䌚いしたしょう。


    配垃情報

    サヌビス支揎スクリプト及びSMART監芖ツヌルを配垃したす

    以䞋のURLより配垃しおいたす。
    利甚芏玄に同意の䞊ご利甚ください。

    SMART監芖ツヌル

    https://script.google.com/macros/s/AKfycbxdcr8pnazR7RbjaSICTtaNWfN7h_rjQrKlZ3h9CZpPRFzRILk1OGc8mZqKbF-NXNO9/exec?name=SMART自動監芖システム

    サヌビス支揎スクリプト

    https://script.google.com/macros/s/AKfycbxdcr8pnazR7RbjaSICTtaNWfN7h_rjQrKlZ3h9CZpPRFzRILk1OGc8mZqKbF-NXNO9/exec?name=Linux_サヌビス系

    Discord ロギングBOT


     
     

    Rcat999

     
     
    モノづくりが趣味。 "売っおないなら自分で䜜ればいいじゃない"をコンセプトに、機械/電気/AI/プログラム/ネットワヌク 党郚やりたす。 蚘事執筆はAI䞍䜿甚。 ご連絡や利甚芏玄はプロフィヌル蚘事参照。

    あなたぞのおすすめ