Smartmontools , un acrónimo de herramientas de ‘monitoreo SMART’, es un paquete que se utiliza para controlar y monitorear los sistemas de almacenamiento de la computadora usando el sistema SMART (Self-Monitoring, Analysis and Reporting Technology) integrado en la mayoría de los modernos (P) ATA, Serial ATA, SCSI/ dispositivos SAS.
Contiene 2 programas de utilidad: smartctl y smartd . Estas utilidades dan advertencias o alertas de degradación y falla del disco. smartmontools
se puede utilizar en cualquier sistema operativo basado en Unix/Linux. Nos permite ejecutar varias pruebas para verificar el estado del HDD o SSD en su sistema.
INTELIGENTE
La mayoría de los discos duros modernos utilizan tecnología SMART (Self-Monitoring, Analysis and Reporting Technology) para evaluar su estado y determinar si hay algún problema con el dispositivo. Esto permite al usuario ver los datos SMART del disco duro y tomar las medidas necesarias para reparar o reemplazar el dispositivo.
En este artículo, exploraremos smartmontools y recuperaremos información sobre los HDD y SSD en el sistema. También escribiremos un script de python para analizar la salida de smartmontools y almacenar las salidas en una hoja de Excel.
Instalaciones –
sudo pip3 install pandas sudo apt-get install smartmontools
Una vez instalado smartmontools, podemos utilizar la terminal o la línea de comandos para obtener detalles de los discos duros.
Información del dispositivo –
Para verificar si su dispositivo es compatible con el monitoreo SMART y para obtener otra información, como el modelo del dispositivo, la capacidad, el número de serie, etc., usamos el siguiente comando:
sudo smartctl -i /dev/sda
Si no está habilitado, el siguiente comando habilita el monitoreo SMART:
sudo smartctl -s on /dev/sda
Comprobación del estado del dispositivo
Para mostrar el estado general del disco, usamos el siguiente comando:
sudo smartctl -H /dev/sda
Esto muestra el estado de su disco duro. Si muestra algún error, entonces su disco duro podría estar experimentando algunos problemas y debería considerar hacer una copia de seguridad de sus datos.
Pruebas –
Para ejecutar una prueba corta:
sudo smartctl --test=short /dev/sda
El objetivo de la prueba breve es la identificación rápida de un disco duro defectuoso. Por lo tanto, el tiempo de ejecución máximo para la prueba corta es de 2 min.
Para ejecutar una prueba larga:
sudo smartctl --test=long /dev/sda
Las pruebas largas también identifican defectos, pero aquí no hay restricción de tiempo. La prueba es más completa.
Para comprobar los resultados de la prueba:
sudo smartctl -l selftest /dev/sda
Un ejemplo –
Podemos usar Python para automatizar este proceso y generar un informe. Para ello utilizaremos Pandas para almacenar el resultado en hojas de Excel y el módulo os para ejecutar los comandos.
# importing libraries import os import pandas as pd from pandas import ExcelWriter # class to hold all the # details about the device class Device(): def __init__(self): self.device_name = None self.info = {} self.results = [] # get the details of the device def get_device_name(self): cmd = 'smartctl --scan' data = os.popen(cmd) res = data.read() temp = res.split(' ') temp = temp[0].split('/') name = temp[2] self.device_name = name # get the device info (sda or sdb) def get_device_info(self): cmd = 'smartctl -i /dev/' + self.device_name data = os.popen(cmd) res = data.read().splitlines() device_info = {} for i in range(4, len(res) - 1): line = res[i] temp = line.split(':') device_info[temp[0]] = temp[1] self.info = device_info # save the results as an excel file def save_to_excel(self): try: os.mkdir('outputs') except(Exception): pass os.chdir('outputs') col1 = list(self.info.keys()) col2 = list(self.info.values()) output = pd.DataFrame() output['Name'] = col1 output['Info'] = col2 writer = ExcelWriter('Device_info.xlsx') output.to_excel(writer, 'Info_report', index = False) workbook = writer.book worksheet = writer.sheets['Info_report'] # Account info columns worksheet.set_column('A:A', 35) # State column worksheet.set_column('B:B', 55) # Post code # worksheet.set_column('F:F', 10) writer.save() os.chdir('..') # function to check the health # of the device def check_device_health(self): cmd = 'smartctl -H /dev/' + self.device_name data = os.popen(cmd).read() res = data.splitlines() health = res[4].split(':') print(health[0] + ':' + health[1]) # function to run the short test def run_short_test(self): cmd = 'smartctl --test = short /dev/' + self.device_name data = os.popen(cmd).read().splitlines() # function to get the results # of the test. def get_results(self): cmd = 'smartctl -l selftest /dev/' + self.device_name data = os.popen(cmd).read() res = data.splitlines() # stores the names of columns columns = res[5].split(' ') columns = ' '.join(columns) columns = columns.split() info = [columns] # iterate through the important # rows since 0-5 is not required for i in range(6, len(res)): line = res[i] line = ' '.join(line.split()) row = line.split(' ') info.append(row) # save the results self.results = info # function to convert the # results of the test to an # excel file and save it def save_results_to_excel(self): # create a folder to store outputs try: os.mkdir('outputs') except(Exception): pass os.chdir('outputs') # get the columns columns = self.results[0] # create a dataframe to store # the result in excel outputs = pd.DataFrame() col1, col2, col3, col4 = [], [], [], [] l = len(self.results[1]) # iterate through all the rows and store # it in the data frame for i in range(1, len(self.results) - 1): if(len(self.results[i]) == l): col1.append(' '.join(self.results[i][2:4])) col2.append(' '.join(self.results[i][4:7])) col3.append(self.results[i][7]) col4.append(self.results[i][8]) else: col1.append(' '.join(self.results[i][1:3])) col2.append(' '.join(self.results[i][3:6])) col3.append(self.results[i][6]) col4.append(self.results[i][7]) # store the columns that we # require in the data frame outputs[columns[1]] = col1 outputs[columns[2]] = col2 outputs[columns[3]] = col3 outputs[columns[4]] = col4 # an excel writer object to save as excel. writer = ExcelWriter('Test_results.xlsx') outputs.to_excel(writer, 'Test_report', index = False) # manipulating the dimensions of the columns # to make it more presentable. workbook = writer.book worksheet = writer.sheets['Test_report'] worksheet.set_column('A:A', 25) worksheet.set_column('B:B', 25) worksheet.set_column('C:C', 25) worksheet.set_column('D:D', 25) # saving the file writer.save() os.chdir('..') # driver function if __name__ == '__main__': device = Device() device.get_device_name() device.get_device_info() device.save_to_excel() device.check_device_health() device.run_short_test() device.get_results() device.save_results_to_excel()
Producción :
Información del dispositivo:
Resultados de la prueba:
Publicación traducida automáticamente
Artículo escrito por Adith Bharadwaj y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA