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")
    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 vérifier l'espace disponible
check_available_space() {
    local disk=$1
    local free_space=$(parted "$disk" unit GB print free | grep "Free Space" | tail -n1 | awk '{print $3}' | sed 's/GB//')
    
    if [[ -z "$free_space" || "$free_space" == "0.00" ]]; then
        echo "Pas d'espace libre disponible sur $disk"
        exit 1
    fi
    
    echo "Espace libre disponible : ${free_space}GB"
    return 0
}

# Fonction pour vérifier le système de fichiers
check_filesystem() {
    local partition=$1
    echo "Vérification du système de fichiers sur $partition"
    e2fsck -f $partition
    if [ $? -gt 1 ]; then
        echo "Erreur lors de la vérification du système de fichiers"
        exit 1
    fi
}

# Fonction principale de redimensionnement
resize_partition() {
    local disk="/dev/sda"
    local partition="/dev/sda2"
    local partition_number="2"

    # Vérification du disque et de la partition
    if [ ! -b "$disk" ] || [ ! -b "$partition" ]; then
        echo "Disque ou partition non trouvé"
        exit 1
    fi

    # Vérification des prérequis
    check_prerequisites

    # Vérification de l'espace disponible
    check_available_space "$disk"

    # Vérification du système de fichiers
    check_filesystem "$partition"

    # Sauvegarde de 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"

    # Redimensionnement de la partition
    echo "Redimensionnement de la partition..."
    parted "$disk" resizepart "$partition_number" 100%

    # Redimensionnement du système de fichiers
    echo "Redimensionnement du système de fichiers..."
    resize2fs "$partition"

    # Vérification finale
    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
    resize_partition
else
    echo "Opération annulée"
    exit 0
fi