#!/bin/bash # # Alpinux — état des lieux d'une machine avant d'installer Linux Mint # # À lancer depuis la session live, AVANT de toucher au disque : # wget https://gitea.alpinux.org/alpinux.cedrica5l/alpinux-wiki/raw/branch/main/code/linux/linux-mint/verif-disque.sh # chmod +x verif-disque.sh # ./verif-disque.sh # # Ou, sur le réseau de l'install party : # wget http://10.0.0.1/verif-disque.sh && chmod +x verif-disque.sh && ./verif-disque.sh # # Le script ne modifie RIEN : il lit, il affiche, il conseille. Il peut s'exécuter # sans droits d'administration, mais plusieurs vérifications les demandent : il # relance alors sudo de lui-même. # # testé le 20/09/2026 sur Linux Mint 22.3 Cinnamon set -u VERT=$'\e[32m'; ROUGE=$'\e[31m'; ORANGE=$'\e[33m'; GRAS=$'\e[1m'; RAZ=$'\e[0m' titre() { printf '\n%s%s%s\n' "$GRAS" "$1" "$RAZ"; printf '%s\n' "${1//?/─}"; } ok() { printf ' %s✓%s %s\n' "$VERT" "$RAZ" "$1"; } attention(){ printf ' %s!%s %s\n' "$ORANGE" "$RAZ" "$1"; } probleme(){ printf ' %s✗%s %s\n' "$ROUGE" "$RAZ" "$1"; } info() { printf ' %s\n' "$1"; } # Les alertes collectées en chemin, résumées à la fin. AVERTISSEMENTS=() BLOQUANTS=() if [ "$(id -u)" != "0" ]; then echo "Certaines vérifications demandent les droits d'administration." exec sudo -- "$0" "$@" fi printf '%s\n' "════════════════════════════════════════════════════════════" printf '%s\n' " Alpinux — état des lieux avant installation" printf '%s\n' " $(date '+%d/%m/%Y %H:%M')" printf '%s\n' "════════════════════════════════════════════════════════════" # ───────────────────────────────────────────────────────────────────── titre "La machine" MODELE="$(cat /sys/devices/virtual/dmi/id/sys_vendor 2>/dev/null) $(cat /sys/devices/virtual/dmi/id/product_name 2>/dev/null)" info "Modèle : ${MODELE:-inconnu}" info "Processeur : $(grep -m1 'model name' /proc/cpuinfo | cut -d: -f2- | sed 's/^ //')" if grep -qw lm /proc/cpuinfo; then ok "Processeur 64 bits" else probleme "Processeur 32 bits : Linux Mint ne s'installera pas" BLOQUANTS+=("Processeur 32 bits — voir Debian ou LMDE") fi RAM_MO=$(( $(grep MemTotal /proc/meminfo | tr -dc '0-9') / 1024 )) info "Mémoire vive : ${RAM_MO} Mo" if [ "$RAM_MO" -lt 2000 ]; then probleme "Moins de 2 Go : en dessous du minimum de Linux Mint" BLOQUANTS+=("RAM insuffisante (${RAM_MO} Mo)") elif [ "$RAM_MO" -lt 4000 ]; then attention "Moins de 4 Go : conseillez l'édition Xfce plutôt que Cinnamon" AVERTISSEMENTS+=("RAM de ${RAM_MO} Mo — édition Xfce conseillée") else ok "Mémoire suffisante pour l'édition Cinnamon" fi # ───────────────────────────────────────────────────────────────────── titre "Le mode de démarrage" if [ -d /sys/firmware/efi ]; then ok "Démarrage en UEFI — le disque sera en GPT, avec une partition EFI" MODE=UEFI SB=/sys/firmware/efi/efivars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c if [ -r "$SB" ]; then if [ "$(od -An -t u1 "$SB" 2>/dev/null | awk '{print $5}')" = "1" ]; then attention "Secure Boot actif : à désactiver si un pilote propriétaire est nécessaire" AVERTISSEMENTS+=("Secure Boot actif") else ok "Secure Boot désactivé" fi fi else attention "Démarrage en BIOS hérité — le disque sera en MBR, sans partition EFI" MODE=BIOS AVERTISSEMENTS+=("Machine démarrée en mode BIOS hérité") fi # ───────────────────────────────────────────────────────────────────── titre "Les disques" mapfile -t DISQUES < <(lsblk -dn -o NAME,TYPE | awk '$2=="disk"{print $1}') NB_DISQUES=${#DISQUES[@]} if [ "$NB_DISQUES" -eq 0 ]; then probleme "Aucun disque détecté" BLOQUANTS+=("Aucun disque vu par le système — contrôleur SATA en RAID/Intel RST ?") elif [ "$NB_DISQUES" -gt 1 ]; then attention "$NB_DISQUES disques présents : identifiez le bon avant de partitionner" AVERTISSEMENTS+=("$NB_DISQUES disques — risque d'effacer le mauvais") fi for d in "${DISQUES[@]}"; do TAILLE=$(lsblk -dn -o SIZE "/dev/$d" | tr -d ' ') ROT=$(cat "/sys/block/$d/queue/rotational" 2>/dev/null) TYPE=$([ "$ROT" = "0" ] && echo "SSD/NVMe" || echo "disque mécanique") TABLE=$(blkid -p -s PTTYPE -o value "/dev/$d" 2>/dev/null || echo "aucune") printf '\n %s/dev/%s%s — %s, %s, table %s\n' "$GRAS" "$d" "$RAZ" "$TAILLE" "$TYPE" "${TABLE:-aucune}" lsblk -o NAME,SIZE,FSTYPE,LABEL,FSUSE%,MOUNTPOINT "/dev/$d" | sed '1d;s/^/ /' TAILLE_GO=$(( $(lsblk -dbn -o SIZE "/dev/$d") / 1000000000 )) if [ "$TAILLE_GO" -lt 11 ]; then probleme " Moins de 11 Go : l'installateur refusera de démarrer" BLOQUANTS+=("/dev/$d trop petit (${TAILLE_GO} Go)") elif [ "$TAILLE_GO" -lt 30 ]; then attention " ${TAILLE_GO} Go : installable, mais en dessous des 30 Go conseillés" AVERTISSEMENTS+=("/dev/$d de ${TAILLE_GO} Go seulement") fi if [ "$MODE" = "UEFI" ] && [ "$TABLE" = "dos" ]; then attention " Machine en UEFI mais disque en MBR : table à refaire en GPT" AVERTISSEMENTS+=("/dev/$d en MBR alors que la machine démarre en UEFI") fi done # ───────────────────────────────────────────────────────────────────── titre "Ce qui est déjà installé" TROUVE_WINDOWS=0 TROUVE_LINUX=0 while read -r part type; do [ -z "$part" ] && continue case "$type" in BitLocker) probleme "$part : partition chiffrée par BitLocker" BLOQUANTS+=("$part chiffrée BitLocker — suspendre le chiffrement depuis Windows AVANT de toucher au disque") TROUVE_WINDOWS=1 ;; ntfs) TROUVE_WINDOWS=1 ETIQUETTE=$(blkid -s LABEL -o value "$part" 2>/dev/null) ok "$part : partition Windows (NTFS)${ETIQUETTE:+ — « $ETIQUETTE »}" POINT=$(mktemp -d) if mount -o ro,noexec,nosuid "$part" "$POINT" 2>/dev/null; then [ -f "$POINT/hiberfil.sys" ] && { attention " hiberfil.sys présent : Windows est en veille prolongée ou en démarrage rapide" AVERTISSEMENTS+=("$part : désactiver le démarrage rapide de Windows, puis arrêt complet") } [ -d "$POINT/Windows" ] && info " Windows installé sur cette partition" umount "$POINT" 2>/dev/null else attention " Montage impossible en lecture seule : partition sale, chiffrée, ou mal démontée" AVERTISSEMENTS+=("$part illisible — Windows mal arrêté ?") fi rmdir "$POINT" 2>/dev/null ;; ext4|ext3|btrfs|xfs) ETIQUETTE=$(blkid -s LABEL -o value "$part" 2>/dev/null) ok "$part : partition Linux ($type)${ETIQUETTE:+ — « $ETIQUETTE »}" TROUVE_LINUX=1 ;; vfat) if [ "$(blkid -s PARTLABEL -o value "$part" 2>/dev/null)" = "EFI system partition" ] \ || [ "$(lsblk -no PARTTYPENAME "$part" 2>/dev/null)" = "EFI System" ]; then ok "$part : partition EFI existante — à réutiliser, pas à recréer" fi ;; crypto_LUKS) attention "$part : partition chiffrée LUKS" AVERTISSEMENTS+=("$part chiffrée (LUKS) — récupérer la phrase de passe avant d'effacer") ;; esac done < <(lsblk -pnl -o NAME,FSTYPE | awk 'NF==2 && $1 ~ /[0-9]$/') [ "$TROUVE_WINDOWS" = "0" ] && info "Aucune partition Windows détectée." if [ "$TROUVE_LINUX" = "1" ]; then attention "Un système Linux occupe déjà ce disque" AVERTISSEMENTS+=("Linux déjà installé — sauvegarder /home avant de réinstaller") fi # ───────────────────────────────────────────────────────────────────── titre "Santé des disques" if command -v smartctl >/dev/null; then for d in "${DISQUES[@]}"; do SANTE=$(smartctl -H "/dev/$d" 2>/dev/null | grep -Ei 'overall-health|SMART Health' | cut -d: -f2- | sed 's/^ *//') case "$SANTE" in *PASSED*|*OK*) ok "/dev/$d : $SANTE" ;; "") info "/dev/$d : pas d'information SMART (disque virtuel, USB, ou contrôleur muet)" ;; *) probleme "/dev/$d : $SANTE" BLOQUANTS+=("/dev/$d signalé défaillant par SMART — ne pas installer dessus") ;; esac REALLOC=$(smartctl -A "/dev/$d" 2>/dev/null | awk '/Reallocated_Sector_Ct/{print $10}') if [ -n "${REALLOC:-}" ] && [ "$REALLOC" -gt 0 ] 2>/dev/null; then attention "/dev/$d : $REALLOC secteurs réalloués — disque fatigué" AVERTISSEMENTS+=("/dev/$d : $REALLOC secteurs réalloués") fi done else info "smartmontools absent de la session live." info "Pour l'ajouter : sudo apt update && sudo apt install -y smartmontools" fi # ───────────────────────────────────────────────────────────────────── titre "Réseau" if ping -c1 -W3 archive.ubuntu.com >/dev/null 2>&1; then ok "Connexion à Internet fonctionnelle (mises à jour et codecs téléchargeables)" else attention "Pas d'accès à Internet : branchez le câble réseau avant d'installer" AVERTISSEMENTS+=("Pas de réseau — codecs et mises à jour ne s'installeront pas") fi # ───────────────────────────────────────────────────────────────────── titre "Conclusion" if [ ${#BLOQUANTS[@]} -gt 0 ]; then printf ' %s%sÀ RÉGLER AVANT D'"'"'INSTALLER%s\n' "$GRAS" "$ROUGE" "$RAZ" for b in "${BLOQUANTS[@]}"; do printf ' %s✗%s %s\n' "$ROUGE" "$RAZ" "$b"; done echo fi if [ ${#AVERTISSEMENTS[@]} -gt 0 ]; then printf ' %s%sÀ SAVOIR%s\n' "$GRAS" "$ORANGE" "$RAZ" for a in "${AVERTISSEMENTS[@]}"; do printf ' %s!%s %s\n' "$ORANGE" "$RAZ" "$a"; done echo fi if [ ${#BLOQUANTS[@]} -eq 0 ] && [ ${#AVERTISSEMENTS[@]} -eq 0 ]; then printf ' %s✓%s Rien ne s'"'"'oppose à l'"'"'installation.\n\n' "$VERT" "$RAZ" fi printf ' Dans le doute, montrez cet écran à un bénévole avant de continuer.\n' printf ' Guide complet : https://wiki.alpinux.org/guides/linux-mint-depuis-windows/\n\n'