scripts-bash/local/bin/check_smart.sh

99 lines
3.0 KiB
Bash
Executable File

#!/bin/bash
# Fonction de hachage SHA-256
hash_serial() {
echo -n "$1" | sha256sum | awk '{print $1}'
}
# Fonction pour exécuter le script avec sudo
run_with_sudo() {
sudo "$0" "$@"
exit $?
}
# Envoi des infos
send_tracker() {
# Envoyer les données au site checksmart.abonnel.fr via HTTP POST avec la date et l'heure
status_disk=$1
date_time=$(date "+%Y-%m-%d %H:%M:%S")
echo "Envoi des données sur smartctl.abonnel.fr"
curl -d "serial_number=$hashed_serial&data=$status_disk&date_time=$date_time" https://checksmart.abonnel.fr/api/submit
echo -e "\n"
}
# Vérifier si l'utilisateur a les privilèges sudo
if [ "$EUID" -ne 0 ]; then
echo "Ce script nécessite des privilèges sudo. Tentative de relance avec sudo..."
run_with_sudo "$@"
fi
# Vérifier si smartctl est installé
if ! command -v smartctl &> /dev/null; then
echo "Le programme smartctl n'est pas installé sur ce système."
# Vérifier quel gestionnaire de paquets est utilisé
if command -v apt &> /dev/null; then
read -p "Voulez-vous installer smartmontools avec apt ? (O/N) " choice
if [[ "$choice" =~ ^[oO] ]]; then
apt install smartmontools
else
echo "Installation annulée."
exit 1
fi
elif command -v yum &> /dev/null; then
read -p "Voulez-vous installer smartmontools avec yum ? (O/N) " choice
if [[ "$choice" =~ ^[oO] ]]; then
yum install smartmontools
else
echo "Installation annulée."
exit 1
fi
else
echo "Gestionnaire de paquets non pris en charge. Veuillez installer smartmontools manuellement."
exit 1
fi
fi
# Numéro de série du disque
serial_number=$(smartctl -i /dev/sda | grep "Serial Number" | awk '{print $3}')
hashed_serial=$(hash_serial "$serial_number")
# Récupérer la liste des disques
disks=$(lsblk -o NAME -n -d)
# Parcourir tous les disques et vérifier l'état SMART
for disk in $disks; do
# Date et heure actuelles
echo "----------------------------------------------"
# Utiliser smartctl pour vérifier si le disque prend en charge SMART
if smartctl -i /dev/$disk > /dev/null 2>&1; then
echo "Vérification de l'état SMART pour le disque $disk :"
output=$(smartctl -H /dev/$disk)
if [[ "$output" =~ "PASSED" ]]; then
status="OK"
else
status="En panne"
fi
echo "État : $status"
#echo "Lancement d'un scan pour la prochaine passe."
#smartctl -t long "/dev/$disk"
status_disk=$(smartctl -a /dev/$disk)
send_tracker "$status_disk"
else
echo "Le périphérique $disk ne prend pas en charge SMART et est exclu de la vérification."
echo "----------------------------------------------"
fi
done
# URL de consultation des informations
url="https://checksmart.abonnel.fr/?hs=$hashed_serial"
# Afficher un message pour indiquer que les données sont consultables
echo "Consultez les informations à l'adresse : $url"