99 lines
3.0 KiB
Bash
99 lines
3.0 KiB
Bash
|
#!/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"
|