« Feuille classe » : différence entre les versions

De Travail-ivan
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 2 : Ligne 2 :
#!/bin/bash
#!/bin/bash


# Script pour étendre la partition système sda2
# Script de redimensionnement automatique de partition
# À exécuter en tant que root
# À utiliser avec précaution - Faire une sauvegarde avant utilisation
 
# Couleurs pour les messages
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
 
# Fonction pour afficher les messages
print_message() {
    echo -e "${2}${1}${NC}"
}


# Vérification des privilèges root
# Vérification des privilèges root
if [ "$(id -u)" != "0" ]; then
if [ "$EUID" -ne 0 ]; then
     print_message "Ce script doit être exécuté en tant que root" "$RED"
     echo "Ce script doit être exécuté en tant que root"
     exit 1
     exit 1
fi
fi


# Installation forcée des paquets nécessaires
# Fonction pour vérifier les outils nécessaires
print_message "\nInstallation des paquets nécessaires..." "$YELLOW"
check_prerequisites() {
    local prerequisites=("parted" "e2fsprogs")
    local missing_tools=()


# Mise à jour des dépôts et installation des paquets
    for tool in "${prerequisites[@]}"; do
apt-get update
        if ! command -v $tool &> /dev/null; then
print_message "Installation de fdisk..." "$YELLOW"
            missing_tools+=($tool)
apt-get install -y fdisk
        fi
print_message "Installation de util-linux..." "$YELLOW"
    done
apt-get install -y util-linux
print_message "Installation de e2fsprogs..." "$YELLOW"
apt-get install -y e2fsprogs
print_message "Installation de parted..." "$YELLOW"
apt-get install -y parted


# Vérification de l'installation des commandes essentielles
    if [ ${#missing_tools[@]} -ne 0 ]; then
COMMANDS=("fdisk" "swapon" "swapoff" "partprobe" "resize2fs" "mkswap")
        echo "Installation des outils manquants : ${missing_tools[*]}"
MISSING_COMMANDS=()
         apt-get update
 
        apt-get install -y "${missing_tools[@]}"
for cmd in "${COMMANDS[@]}"; do
    if ! which "$cmd" > /dev/null 2>&1; then
         MISSING_COMMANDS+=("$cmd")
     fi
     fi
done
}


if [ ${#MISSING_COMMANDS[@]} -ne 0 ]; then
# Fonction pour vérifier l'espace disponible
     print_message "Les commandes suivantes sont toujours manquantes : ${MISSING_COMMANDS[*]}" "$RED"
check_available_space() {
    print_message "Tentative d'installation via le chemin complet..." "$YELLOW"
    local disk=$1
     # Créer des liens symboliques si nécessaire
     local free_space=$(parted "$disk" unit GB print free | grep "Free Space" | tail -n1 | awk '{print $3}' | sed 's/GB//')
     if [ ! -f "/sbin/fdisk" ] && [ -f "/usr/sbin/fdisk" ]; then
      
         ln -s /usr/sbin/fdisk /sbin/fdisk
     if [[ -z "$free_space" || "$free_space" == "0.00" ]]; then
         echo "Pas d'espace libre disponible sur $disk"
        exit 1
     fi
     fi
     if [ ! -f "/sbin/swapon" ] && [ -f "/usr/sbin/swapon" ]; then
      
        ln -s /usr/sbin/swapon /sbin/swapon
     echo "Espace libre disponible : ${free_space}GB"
    fi
     return 0
     if [ ! -f "/sbin/swapoff" ] && [ -f "/usr/sbin/swapoff" ]; then
}
        ln -s /usr/sbin/swapoff /sbin/swapoff
    fi
    if [ ! -f "/sbin/partprobe" ] && [ -f "/usr/sbin/partprobe" ]; then
        ln -s /usr/sbin/partprobe /sbin/partprobe
     fi
fi


# Vérification finale des commandes
# Fonction pour vérifier le système de fichiers
FINAL_CHECK=0
check_filesystem() {
for cmd in "${COMMANDS[@]}"; do
    local partition=$1
     if ! which "$cmd" > /dev/null 2>&1; then
    echo "Vérification du système de fichiers sur $partition"
         print_message "La commande $cmd n'est toujours pas disponible." "$RED"
    e2fsck -f $partition
         FINAL_CHECK=1
     if [ $? -gt 1 ]; then
         echo "Erreur lors de la vérification du système de fichiers"
         exit 1
     fi
     fi
done
}


if [ $FINAL_CHECK -eq 1 ]; then
# Fonction principale de redimensionnement
     print_message "Certaines commandes sont toujours manquantes. Installation impossible." "$RED"
resize_partition() {
     print_message "Essayez d'installer manuellement : apt-get install -y fdisk util-linux e2fsprogs parted" "$YELLOW"
     local disk="/dev/sda"
    exit 1
    local partition="/dev/sda2"
fi
     local partition_number="2"


# Affichage de l'état actuel
    # Vérification du disque et de la partition
print_message "\nÉtat actuel du système:" "$GREEN"
    if [ ! -b "$disk" ] || [ ! -b "$partition" ]; then
df -h /
        echo "Disque ou partition non trouvé"
fdisk -l /dev/sda
        exit 1
 
    fi
# Demande de confirmation
print_message "\nATTENTION: Assurez-vous d'avoir:" "$RED"
echo "1. Augmenté la taille du disque dans VMware"
echo "2. Créé un snapshot de la VM"
echo "3. Sauvegardé vos données importantes"
read -p "Voulez-vous continuer? (o/N) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Oo]$ ]]; then
    print_message "Opération annulée" "$YELLOW"
    exit 1
fi


# Désactivation du swap
    # Vérification des prérequis
print_message "\nDésactivation temporaire du swap..." "$YELLOW"
    check_prerequisites
swapoff -a


# Rescan du disque
    # Vérification de l'espace disponible
print_message "Rescan du disque..." "$YELLOW"
    check_available_space "$disk"
echo 1 > /sys/class/block/sda/device/rescan


# Modification des partitions
    # Vérification du système de fichiers
print_message "Modification des partitions..." "$YELLOW"
    check_filesystem "$partition"
(
echo d    # Supprimer une partition
echo 3    # Supprimer sda3 (swap)
echo d    # Supprimer une autre partition
echo 2    # Supprimer sda2
echo n    # Nouvelle partition
echo      # Numéro par défaut (2)
echo      # Premier secteur par défaut
echo -1G  # Laisser 1G à la fin pour le swap
echo      # Type par défaut (Linux filesystem)
echo n    # Nouvelle partition pour le swap
echo      # Numéro par défaut (3)
echo      # Premier secteur par défaut
echo      # Dernier secteur par défaut
echo t    # Changer le type
echo 3    # Partition 3
echo 82  # Type swap
echo w    # Écrire les changements
) | fdisk /dev/sda


# Mise à jour de la table de partitions
    # Sauvegarde de la table de partitions
print_message "Mise à jour de la table de partitions..." "$YELLOW"
    echo "Sauvegarde de la table de partitions..."
partprobe /dev/sda
    sfdisk -d "$disk" > "/root/partition_table_backup_$(date +%Y%m%d_%H%M%S).sf"


# Pause pour laisser le système détecter les changements
    # Redimensionnement de la partition
sleep 5
    echo "Redimensionnement de la partition..."
    parted "$disk" resizepart "$partition_number" 100%


# Extension du système de fichiers
    # Redimensionnement du système de fichiers
print_message "Extension du système de fichiers..." "$YELLOW"
    echo "Redimensionnement du système de fichiers..."
resize2fs /dev/sda2
    resize2fs "$partition"


# Reformatage du swap
    # Vérification finale
print_message "Reformatage du swap..." "$YELLOW"
    df -h "$partition"
mkswap /dev/sda3
}


# Réactivation du swap
# Message d'avertissement
print_message "Réactivation du swap..." "$YELLOW"
echo "ATTENTION: Ce script va redimensionner la partition système."
swapon -a
echo "Assurez-vous d'avoir fait une sauvegarde avant de continuer."
read -p "Voulez-vous continuer ? (o/N) " response


# Vérification finale
if [[ "$response" =~ ^[oO]$ ]]; then
print_message "\nNouvelle configuration:" "$GREEN"
    resize_partition
df -h /
else
print_message "\nTableau des partitions:" "$GREEN"
    echo "Opération annulée"
fdisk -l /dev/sda
    exit 0
print_message "\nÉtat du swap:" "$GREEN"
fi
swapon --show
 
print_message "\nOpération terminée!" "$GREEN"
</syntaxhighlight>
</syntaxhighlight>

Version du 28 novembre 2024 à 11:13

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