====== Propriétés du Stockage ======
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()
{{counter}}