#!/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"