Raspi - Wiki

Installation de RaspiOS

Outils pour utilisateurs

Outils du site


scripts:hdd

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

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
TestHDD.py
#!/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()
 

48

scripts/hdd.txt · Dernière modification : 2022/03/09 14:24 de michel