Linux記錄讀寫硬碟的程式指令碼
阿新 • • 發佈:2021-08-12
前言
自己用樹莓派整了個NAS玩玩,但是經常聽到硬碟在本應無訪問的時候轉來轉去,遂想查明究竟為何轉。
曾考慮使用fuser -mv /dev/sda這樣的命令,但是奈何輸出內容我不知如何輸出到檔案,用>或tee都無法重定向到檔案裡。
思路
使用lsof /dev/sda得到當前正在讀寫硬碟的程序,將內容輸出至檔案,並記錄時間戳
實現
方法並不是最優解,也請大佬不吝賜教
使用方法 python3 ./watch.py /dev/sda a 1
引數1: 監控的硬碟
引數2: 寫入檔案的檔名(a.txt)
引數3: 每隔1s執行一次lsof
import os from pathlib import Path import time import subprocess import sys def run(): p = subprocess.Popen('sudo lsof '+sys.argv[1],shell=True,stdout=subprocess.PIPE) out,err = p.communicate() result = [] for line in out.splitlines(): line = line.decode('utf-8').split() result.append((line[0],line[2],str(line[8:]).replace('\'','')[1:-1])) return result if __name__ == '__main__': if os.path.exists(Path('./'+sys.argv[2]+'.txt')): os.remove('./'+sys.argv[2]+'.txt') line_old=[] while 1: result = run() for line in result: now ='\t\t'+ line[0]+'\t\t'+line[1]+'\t\t'+str(line[2])+'\n' if not now in line_old[:]: with open('./'+sys.argv[2]+'.txt','a') as f: f.write(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())+'') f.write(now) f.close() line_old.append(now) time.sleep(float(sys.argv[3]))
總結
最後這份程式碼也沒有查明到底為何導致我的硬碟轉,後猜測為OpenMediaValut的S.M.A.R.T開啟所導致,雖說那是並無檢查任務,但估計是Bug之類的問題吧。另外,在使用OpenmeidaVault管理介面時,也會莫名其妙喚醒硬碟,同時不會被上述程式碼記錄。