Feuille classe
De Travail-ivan
#!/bin/bash
# Script de redimensionnement automatique de partition
# À utiliser avec précaution - Faire une sauvegarde avant utilisation
# Vérification des privilèges root
if [ "$EUID" -ne 0 ]; then
echo "Ce script doit être exécuté en tant que root"
exit 1
fi
# Fonction pour vérifier les outils nécessaires
check_prerequisites() {
local prerequisites=("parted" "e2fsprogs" "fdisk")
local missing_tools=()
for tool in "${prerequisites[@]}"; do
if ! command -v $tool &> /dev/null; then
missing_tools+=($tool)
fi
done
if [ ${#missing_tools[@]} -ne 0 ]; then
echo "Installation des outils manquants : ${missing_tools[*]}"
apt-get update
apt-get install -y "${missing_tools[@]}"
fi
}
# Fonction pour calculer l'espace total et utilisé
calculate_space() {
local disk="/dev/sda"
# Obtenir la taille totale du disque en secteurs
local total_sectors=$(fdisk -l "$disk" | grep "Disk $disk" | awk '{print $7}')
# Obtenir la dernière position utilisée en secteurs
local last_used_sector=$(fdisk -l "$disk" | grep "^$disk" | sort -k3 -n | tail -n1 | awk '{print $3}')
# Calculer l'espace libre en secteurs
local free_sectors=$((total_sectors - last_used_sector))
# Convertir en GB (approximatif)
local free_space_gb=$((free_sectors / 2097152))
echo "Espace libre détecté : environ ${free_space_gb}GB"
if [ $free_space_gb -lt 1 ]; then
echo "Pas assez d'espace libre disponible"
exit 1
fi
return $free_space_gb
}
# Fonction pour redimensionner avec fdisk
resize_with_fdisk() {
local disk="/dev/sda"
local partition_number="2"
# Sauvegarder la table de partitions
echo "Sauvegarde de la table de partitions..."
sfdisk -d "$disk" > "/root/partition_table_backup_$(date +%Y%m%d_%H%M%S).sf"
# Utiliser fdisk pour supprimer et recréer la partition
echo "Redimensionnement de la partition..."
# Créer une commande fdisk
(
echo "d" # Supprimer
echo "2" # Partition 2
echo "n" # Nouvelle partition
echo "p" # Partition primaire
echo "2" # Numéro 2
echo # Premier secteur (défaut)
echo # Dernier secteur (défaut - utilise tout l'espace disponible avant la partition swap)
echo "N" # Ne pas supprimer la signature
echo "w" # Écrire les changements
) | fdisk "$disk"
# Forcer le noyau à relire la table de partitions
partprobe "$disk"
}
# Fonction principale
main() {
local disk="/dev/sda"
local partition="/dev/sda2"
# Vérification des prérequis
check_prerequisites
# Calculer l'espace disponible
calculate_space
free_space=$?
echo "Vous avez environ ${free_space}GB d'espace libre à utiliser"
# Vérifier le système de fichiers
echo "Vérification du système de fichiers..."
e2fsck -f "$partition"
# Redimensionner
resize_with_fdisk
# Redimensionner le système de fichiers
echo "Redimensionnement du système de fichiers..."
resize2fs "$partition"
# Afficher le résultat
echo "Nouvelle configuration :"
df -h "$partition"
}
# Message d'avertissement
echo "ATTENTION: Ce script va redimensionner la partition système."
echo "Assurez-vous d'avoir fait une sauvegarde avant de continuer."
read -p "Voulez-vous continuer ? (o/N) " response
if [[ "$response" =~ ^[oO]$ ]]; then
main
else
echo "Opération annulée"
exit 0
fi