Je vous propose un script python pour lister les propriétés d'un stockage:
Pour cela il faut installer smartmontools et la librairie configparser:
sudo apt install smartmontools sudo pip3 install configparser
arborescence du projet:
|_TestHDD.py |_config/ |___TestHDD.ini
Fichier de configuration TestHDD.ini
[Config] # Repertoire temporaire ou seront stockés les fichiers smart. smart=/home/pi/scripts/logs/tmp/ # fichier de LOG log=/home/pi/scripts/logs/stockage.txt
#!/usr/bin/env python3 #-*- coding: utf-8 -*- # ---------------------------------------------------------------------------- # Information de version # ---------------------------------------------------------------------------- Minor_Version = "112" Major_Version = "1" Date_version = "23/02/2022" NomScript = "TestHDD" # ---------------------------------------------------------------------------- # import des modules # ---------------------------------------------------------------------------- import sys import os import time import subprocess from configparser import ConfigParser # ---------------------------------------------------------------------------- # Constantes # ---------------------------------------------------------------------------- SEP="--------------------------------------------------------------------------------------------------------------------------------------------------------\n" CMD="lsblk -o NAME,FSTYPE,LABEL,FSSIZE,FSAVAIL,FSUSED,FSUSE%,MOUNTPOINT,PARTUUID,MODEL" # ---------------------------------------------------------------------------- # procédure config # ---------------------------------------------------------------------------- def config(): global CFG,LOG,hdd dossier = os.path.dirname(os.path.abspath(__file__)) configfile = '%s/config/%s.ini' % (dossier,NomScript) CFG = ConfigParser() CFG.read(configfile) LOG = CFG.get('Config','log') DateFR = time.strftime('%d/%m/%Y %H:%M:%S') fichier = open(LOG, "w") fichier.write("Propriétés du Stockage le "+DateFR+"\n") fichier.write(SEP) fichier.close() cmd = "sudo fdisk -l | grep 'Disk /dev/[sh]d\|sata[[0-9]\|[a-z]]' |awk -F' ' '{print $2}'" var = subprocess.getoutput(cmd) hdd = var.replace(":","").split() os.chmod(LOG, 0o666) # ---------------------------------------------------------------------------- # procédure lsblk # ---------------------------------------------------------------------------- def lsblk(): fichier = open(LOG, "a") var = subprocess.getoutput(CMD) fichier.write(var+"\n") fichier.write(SEP) fichier.close() # ---------------------------------------------------------------------------- # procédure smartctl # ---------------------------------------------------------------------------- def smartctl(disk): fichier = open(LOG, "a") SmtFile ="%s%s.txt" %( CFG.get('Config','smart'),disk) dd="/dev/%s" % (disk) tt='{0:20}{1:50}'.format('Disque:',dd) fichier.write(tt+"\n") cmd = 'sudo smartctl --all /dev/%s -d sat > %s' % (disk,SmtFile) var = subprocess.getoutput(cmd) file = open(SmtFile,"r") tmp = "false" for line in file: if "Device Model:" in line: m1=line.split(":")[1].strip() mm1='{0:20}{1:50}'.format('Device Model:',m1) fichier.write(mm1+"\n") if "Model Family" in line: m2=line.split(":")[1].strip() mm2='{0:20}{1:50}'.format('Model Family:',m2) fichier.write(mm2+"\n") if "SATA Version is:" in line: s=line.split(":") ss = "%s %s" % (s[1].strip(),s[2].strip()) sata='{0:20}{1:50}'.format('Version Sata:',ss) fichier.write(sata+"\n") if "Power_On_Hours" in line: res=line.split() hh = "%s %s" % ((res[len(res)-1].strip()),"Heures") heure = '{0:20}{1:50}'.format('Durée sous tension:',hh) fichier.write(heure+"\n") if "Temperature_Cel" in line: if tmp == "false": res=line.split() #print (res[9]) tt = "%s %s" % ((res[9].strip()),"°C") tmp = '{0:20}{1:50}'.format('Temperature:',tt) fichier.write(tmp+"\n") tmp = "true" if "No Errors Logged" in line: er = '{0:20}{1:50}'.format('Status:',"Sain") fichier.write(er+"\n") fichier.write(SEP) fichier.close() #---------------------------------------------------------------------------- # Procédure main # ---------------------------------------------------------------------------- def main(): config() lsblk() for disk in hdd: smartctl(disk.replace("/dev/","")) fichier = open(LOG, "a") fichier.write(NomScript+": "+Major_Version+"."+Minor_Version) fichier.close() # ---------------------------------------------------------------------------- # début du script # ---------------------------------------------------------------------------- if __name__ == "__main__": main()
300