« Feuille classe » : différence entre les versions

De Travail-ivan
Aucun résumé des modifications
Aucun résumé des modifications
 
Ligne 1 : Ligne 1 :
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
#!/bin/bash
#!/bin/bash
# Script de redimensionnement automatique de partition
# À utiliser avec précaution - Faire une sauvegarde avant utilisation


# Vérification des privilèges root
# Vérification des privilèges root
Ligne 11 : Ligne 8 :
fi
fi


# Fonction pour vérifier les outils nécessaires
# Installation des outils nécessaires
check_prerequisites() {
apt-get update
    local prerequisites=("parted" "e2fsprogs" "fdisk")
apt-get install -y parted fdisk
    local missing_tools=()


    for tool in "${prerequisites[@]}"; do
# Afficher l'état actuel
        if ! command -v $tool &> /dev/null; then
echo "État actuel du disque :"
            missing_tools+=($tool)
fdisk -l /dev/sda
        fi
echo "-------------------"
    done
df -h /dev/sda2
echo "-------------------"


    if [ ${#missing_tools[@]} -ne 0 ]; then
# Calculer la taille maximale disponible (juste avant la partition swap)
        echo "Installation des outils manquants : ${missing_tools[*]}"
SWAP_START=$(fdisk -l /dev/sda | grep "sda3" | awk '{print $2}')
        apt-get update
echo "Début de la partition SWAP : $SWAP_START"
        apt-get install -y "${missing_tools[@]}"
    fi
}


# Fonction pour calculer l'espace total et utilisé
# Redimensionner avec fdisk
calculate_space() {
(
    local disk="/dev/sda"
echo "d" # Supprimer partition
   
echo "2" # Partition numéro 2
    # Obtenir la taille totale du disque en secteurs
echo "n" # Nouvelle partition
    local total_sectors=$(fdisk -l "$disk" | grep "Disk $disk" | awk '{print $7}')
echo "p" # Type primaire
   
echo "2" # Partition numéro 2
    # Obtenir la dernière position utilisée en secteurs
echo     # Premier secteur (par défaut)
    local last_used_sector=$(fdisk -l "$disk" | grep "^$disk" | sort -k3 -n | tail -n1 | awk '{print $3}')
echo "$((SWAP_START - 1))# Dernier secteur (juste avant le swap)
   
echo "N" # Ne pas supprimer la signature
     # Calculer l'espace libre en secteurs
echo "w" # Écrire les changements
    local free_sectors=$((total_sectors - last_used_sector))
) | fdisk /dev/sda
   
    # 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
# Recharger la table des partitions
resize_with_fdisk() {
partprobe /dev/sda
    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
# Redimensionner le système de fichiers
main() {
resize2fs /dev/sda2
    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
# Afficher le résultat
echo "ATTENTION: Ce script va redimensionner la partition système."
echo "Nouvel état du disque :"
echo "Assurez-vous d'avoir fait une sauvegarde avant de continuer."
df -h /dev/sda2
read -p "Voulez-vous continuer ? (o/N) " response
 
if [[ "$response" =~ ^[oO]$ ]]; then
    main
else
    echo "Opération annulée"
    exit 0
fi
</syntaxhighlight>
</syntaxhighlight>

Dernière version du 28 novembre 2024 à 11:28

#!/bin/bash

# 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

# Installation des outils nécessaires
apt-get update
apt-get install -y parted fdisk

# Afficher l'état actuel
echo "État actuel du disque :"
fdisk -l /dev/sda
echo "-------------------"
df -h /dev/sda2
echo "-------------------"

# Calculer la taille maximale disponible (juste avant la partition swap)
SWAP_START=$(fdisk -l /dev/sda | grep "sda3" | awk '{print $2}')
echo "Début de la partition SWAP : $SWAP_START"

# Redimensionner avec fdisk
(
echo "d"  # Supprimer partition
echo "2"  # Partition numéro 2
echo "n"  # Nouvelle partition
echo "p"  # Type primaire
echo "2"  # Partition numéro 2
echo     # Premier secteur (par défaut)
echo "$((SWAP_START - 1))"  # Dernier secteur (juste avant le swap)
echo "N"  # Ne pas supprimer la signature
echo "w"  # Écrire les changements
) | fdisk /dev/sda

# Recharger la table des partitions
partprobe /dev/sda

# Redimensionner le système de fichiers
resize2fs /dev/sda2

# Afficher le résultat
echo "Nouvel état du disque :"
df -h /dev/sda2