« 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 | # Fonction pour calculer l'espace total et utilisé | ||
calculate_space() { | |||
local disk=$ | local disk="/dev/sda" | ||
local | |||
# 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 [ | if [ $free_space_gb -lt 1 ]; then | ||
echo "Pas d'espace libre disponible | echo "Pas assez d'espace libre disponible" | ||
exit 1 | exit 1 | ||
fi | fi | ||
return $free_space_gb | |||
} | } | ||
# Fonction pour | # Fonction pour redimensionner avec fdisk | ||
resize_with_fdisk() { | |||
local | local disk="/dev/sda" | ||
echo " | local partition_number="2" | ||
# Sauvegarder la table de partitions | |||
echo " | 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 | # Fonction principale | ||
main() { | |||
local disk="/dev/sda" | local disk="/dev/sda" | ||
local partition="/dev/sda2" | local partition="/dev/sda2" | ||
# Vérification des prérequis | # Vérification des prérequis | ||
check_prerequisites | 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 " | 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..." | echo "Redimensionnement du système de fichiers..." | ||
resize2fs "$partition" | resize2fs "$partition" | ||
# | # 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 | ||
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