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