« Feuille classe » : différence entre les versions

De Travail-ivan
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 13 : Ligne 13 :
# Fonction pour vérifier les outils nécessaires
# Fonction pour vérifier les outils nécessaires
check_prerequisites() {
check_prerequisites() {
     local prerequisites=("parted" "e2fsprogs")
     local prerequisites=("parted" "e2fsprogs" "fdisk")
     local missing_tools=()
     local missing_tools=()


Ligne 29 : Ligne 29 :
}
}


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


# Fonction pour vérifier le système de fichiers
# Fonction pour redimensionner avec fdisk
check_filesystem() {
resize_with_fdisk() {
     local partition=$1
     local disk="/dev/sda"
     echo "Vérification du système de fichiers sur $partition"
    local partition_number="2"
     e2fsck -f $partition
   
     if [ $? -gt 1 ]; then
    # Sauvegarder la table de partitions
         echo "Erreur lors de la vérification du système de fichiers"
    echo "Sauvegarde de la table de partitions..."
        exit 1
    sfdisk -d "$disk" > "/root/partition_table_backup_$(date +%Y%m%d_%H%M%S).sf"
     fi
   
    # 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 de redimensionnement
# Fonction principale
resize_partition() {
main() {
     local disk="/dev/sda"
     local disk="/dev/sda"
     local partition="/dev/sda2"
     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
     # Vérification des prérequis
     check_prerequisites
     check_prerequisites
 
   
     # Vérification de l'espace disponible
     # Calculer l'espace disponible
     check_available_space "$disk"
     calculate_space
 
    free_space=$?
     # Vérification du système de fichiers
      
     check_filesystem "$partition"
     echo "Vous avez environ ${free_space}GB d'espace libre à utiliser"
 
   
     # Sauvegarde de la table de partitions
     # Vérifier le système de fichiers
     echo "Sauvegarde de la table de partitions..."
     echo "Vérification du système de fichiers..."
     sfdisk -d "$disk" > "/root/partition_table_backup_$(date +%Y%m%d_%H%M%S).sf"
     e2fsck -f "$partition"
 
   
     # Redimensionnement de la partition
     # Redimensionner
     echo "Redimensionnement de la partition..."
     resize_with_fdisk
     parted "$disk" resizepart "$partition_number" 100%
      
 
     # Redimensionner le système de fichiers
     # Redimensionnement du système de fichiers
     echo "Redimensionnement du système de fichiers..."
     echo "Redimensionnement du système de fichiers..."
     resize2fs "$partition"
     resize2fs "$partition"
 
   
     # Vérification finale
     # Afficher le résultat
    echo "Nouvelle configuration :"
     df -h "$partition"
     df -h "$partition"
}
}
Ligne 97 : Ligne 120 :


if [[ "$response" =~ ^[oO]$ ]]; then
if [[ "$response" =~ ^[oO]$ ]]; then
     resize_partition
     main
else
else
     echo "Opération annulée"
     echo "Opération annulée"

Version du 28 novembre 2024 à 11:19

#!/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