Fix hyprland, monitor management and waybar after lua switch
This commit is contained in:
147
scripts/utilities/format.sh
Executable file
147
scripts/utilities/format.sh
Executable file
@@ -0,0 +1,147 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# usb-format.sh — formate proprement une clé USB / carte SD
|
||||
# Usage: usb-format.sh /dev/sdX [fat32|exfat|ext4] [LABEL]
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
DEVICE="${1:-}"
|
||||
FSTYPE="${2:-fat32}"
|
||||
LABEL="${3:-}"
|
||||
|
||||
if [[ -z "$DEVICE" ]]; then
|
||||
echo "Usage: $0 /dev/sdX [fat32|exfat|ext4] [LABEL]"
|
||||
echo
|
||||
echo "Périphériques disponibles :"
|
||||
lsblk -d -o NAME,SIZE,MODEL,TRAN
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Normaliser le chemin (accepte "sdb" ou "/dev/sdb")
|
||||
[[ "$DEVICE" != /dev/* ]] && DEVICE="/dev/$DEVICE"
|
||||
|
||||
# --- Garde-fous ---
|
||||
|
||||
if [[ ! -b "$DEVICE" ]]; then
|
||||
echo "Erreur : $DEVICE n'est pas un périphérique bloc valide."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$DEVICE" == "/dev/nvme0n1" || "$DEVICE" =~ ^/dev/nvme0n1p[0-9]+$ ]]; then
|
||||
echo "Erreur : $DEVICE correspond au disque interne (nvme0n1). Abandon."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ROOT_SRC=$(findmnt -n -o SOURCE / || true)
|
||||
if [[ -n "$ROOT_SRC" && "$ROOT_SRC" == "$DEVICE"* ]]; then
|
||||
echo "Erreur : $DEVICE semble contenir la partition racine. Abandon."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
TRAN=$(lsblk -d -no TRAN "$DEVICE" 2>/dev/null || echo "?")
|
||||
if [[ "$TRAN" != "usb" ]]; then
|
||||
echo "Attention : $DEVICE n'est pas détecté comme périphérique USB (TRAN=$TRAN)."
|
||||
fi
|
||||
|
||||
case "$FSTYPE" in
|
||||
fat32|exfat|ext4) ;;
|
||||
*)
|
||||
echo "Erreur : type de système de fichiers non supporté : $FSTYPE"
|
||||
echo "Choix possibles : fat32, exfat, ext4"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
if [[ -z "$LABEL" ]]; then
|
||||
read -rp "Nom de la partition (label) : " LABEL
|
||||
LABEL="${LABEL:-USB}"
|
||||
fi
|
||||
|
||||
if [[ "$FSTYPE" == "fat32" && ${#LABEL} -gt 11 ]]; then
|
||||
echo "Attention : FAT32 limite le label à 11 caractères, il sera tronqué."
|
||||
fi
|
||||
|
||||
# --- Nouvelle demande : type de table de partition ---
|
||||
echo
|
||||
echo "Choisissez le type de table de partition :"
|
||||
echo " [1] msdos (MBR) – recommandé pour la compatibilité avec les vieux appareils (imprimantes, consoles)"
|
||||
echo " [2] gpt – pour les disques >2 To ou l'UEFI moderne"
|
||||
read -rp "Votre choix (1 ou 2, défaut=1) : " PT_CHOICE
|
||||
PT_CHOICE="${PT_CHOICE:-1}"
|
||||
case "$PT_CHOICE" in
|
||||
1|msdos|mbr) PART_TABLE="msdos" ;;
|
||||
2|gpt) PART_TABLE="gpt" ;;
|
||||
*)
|
||||
echo "Choix invalide, utilisation de msdos par défaut."
|
||||
PART_TABLE="msdos"
|
||||
;;
|
||||
esac
|
||||
echo "-> Table de partition choisie : $PART_TABLE"
|
||||
|
||||
echo "==================================================="
|
||||
echo " Périphérique : $DEVICE"
|
||||
echo " Transport : $TRAN"
|
||||
echo " Système de fichiers: $FSTYPE"
|
||||
echo " Label : $LABEL"
|
||||
echo " Table de partition : $PART_TABLE"
|
||||
echo "==================================================="
|
||||
lsblk -f "$DEVICE"
|
||||
echo
|
||||
echo "TOUTES LES DONNÉES SUR $DEVICE VONT ÊTRE EFFACÉES."
|
||||
read -rp "Tape le nom du périphérique ($DEVICE) pour confirmer : " CONFIRM
|
||||
if [[ "$CONFIRM" != "$DEVICE" ]]; then
|
||||
echo "Confirmation invalide. Abandon."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# --- Nettoyage et préparation ---
|
||||
echo "--> Démontage des partitions existantes..."
|
||||
for part in "${DEVICE}"?*; do
|
||||
[[ -b "$part" ]] && sudo umount "$part" 2>/dev/null || true
|
||||
done
|
||||
|
||||
echo "--> Suppression des signatures existantes..."
|
||||
sudo wipefs -a "$DEVICE"
|
||||
|
||||
# --- CORRECTION : forcer le rechargement du périphérique avant parted ---
|
||||
echo "--> Relecture de la table par le noyau..."
|
||||
sudo partprobe "$DEVICE" 2>/dev/null || true
|
||||
sudo udevadm settle
|
||||
sleep 1
|
||||
|
||||
echo "--> Création d'une nouvelle table de partitions ($PART_TABLE)..."
|
||||
sudo parted -s "$DEVICE" mklabel "$PART_TABLE"
|
||||
|
||||
# --- Création de la partition ---
|
||||
echo "--> Création de la partition..."
|
||||
sudo parted -s "$DEVICE" mkpart primary 1MiB 100%
|
||||
sudo partprobe "$DEVICE"
|
||||
sudo udevadm settle
|
||||
sleep 1
|
||||
|
||||
# Déterminer le nom de la première partition
|
||||
PART="${DEVICE}1"
|
||||
[[ "$DEVICE" =~ nvme|mmcblk ]] && PART="${DEVICE}p1"
|
||||
|
||||
# Attendre que la partition soit créée
|
||||
sleep 1
|
||||
if [[ ! -b "$PART" ]]; then
|
||||
echo "Erreur : la partition $PART n'a pas été créée."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "--> Formatage en $FSTYPE..."
|
||||
case "$FSTYPE" in
|
||||
fat32)
|
||||
sudo mkfs.vfat -F32 -n "${LABEL^^}" "$PART"
|
||||
;;
|
||||
exfat)
|
||||
sudo mkfs.exfat -n "$LABEL" "$PART"
|
||||
;;
|
||||
ext4)
|
||||
sudo mkfs.ext4 -L "$LABEL" "$PART"
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "--> Terminé."
|
||||
lsblk -f "$DEVICE"
|
||||
Reference in New Issue
Block a user