Joseph Tux
En XFS, ne pas s’étendre inutilement !

Agrandir un volume logique formaté en XFS

mardi 17 novembre 2015 par Joseph Tux

Le système de fichier XFS offre de nombreux avantages : performance, stabilité très éprouvée liée à son ancienneté.
Une partition formatée en XFS peut être agrandie « à chaud », c’est à dire pendant son utilisation.
Cet avantage indéniable réduit son seul inconvénient notable : l’impossibilité de réduire une telle partition.

Présentation

Pour étendre un volume logique (LVM2) en XFS, rien de plus simple.
Le volume doit être monté, et donc en cours d’utilisation.

Deux commandes suffisent :

  1. Élargir la partition LVM :
    lvextend -L <dimension> <lvm>
  2. Élargir le système de fichier :
    xfs_growfs <répertoire de montage>

En pratique, on utilise aussi des commandes d’information, qui sont également utilisées dans le script.

Utilisation :
sans option, le volume par défaut sera affecté.
avec une option (n’importe quoi après la commande), les 3 paramètres seront entrées interactivement (avec read), en préservant les données par défaut en cas de choix « vide ».
Bien entendu, il faut avoir les droits root pour lancer le script.

Ce script utilise mes bibliothèques pour bash AFFICHE_TOUT qui fournit les commandes MAJUSCULES (echo et exit améliorées) et ANNULE_DEBUG.
Vous les trouverez ici :
http://joseph-tux.legrillon.info/Bi...
( adresse provisoire pour http://joseph-tux/Bibliotheque-de-f...)

Il intègre plusieurs vérifications, et demande confirmation avant de lancer les commandes.

Les 3 paramètres nécessaires sont :
- Le groupe de volume, afin de connaître l’espace utilisable.
- Le volume logique concerné
- Le point de montage actuel
auquels il faut bien sûr ajouter la mesure de l’agrandissement.

Il est perfectible de plusieurs façons :
- On peut utiliser getopts pour gérer cette option et une option de syntaxe de la commande
- On peut aussi envisager des options pour modifier les pramètres en ligne de commande au lieu de l’option interactive
- On peut aussi faire appel à un simple fichier de configuration (3 lignes pour affecter 3 variables)
- On peut, bien sur réduire l’interactivité au choix des 3 paramètres.

Il lui manque aussi une fonction importante, qui peut-être demandée à un autre script :
L’élargissement du groupe de volume, qui peut être nécessaire.

PS j’ai évidemment supprimé toutes les lignes de déboggage pour ne pas alourdir le listing.

Le script

#!/bin/bash --
###agrandir un volume logique lvm formaté en xfs
# v2 = toute option permet de choisir d'autres paramètres
# les paramètres par défaut restent utilisables
source /usr/local/lib/AFFICHE_TOUT

if [ "$(whoami)" != 'root' ]; then
   EXIT "ATTENTION, à lancer sous root"
   #exit 1
fi

#########################
# Variables à ajuster: (choix par défaut)
#########################
vg='/dev/mapper/VG_1'   # Le groupe de volume
lvm="${vg}-lv_home"     # Le volume logique à agrandir
montage='/home'        # Le point de montage actuel (pour xfs_growfs)
#########################

# Choisir un autre volume:
if [[ "$1" ]]  ; then
   option_c="$1" && TITRE "Choisir un autre volume logique XFS"

   read -p "Groupe de volume ($vg):" NVG
   read -p "Volume logique ($lvm):" NLV
   read -p "Point de montage actuel ($montage):" NPM

   #Valeurs par défaut préservées:
   vg="${NVG:=$vg}"
   lvm="${NLV:=$lvm}"
   montage="${NPM:=$montage}"
   # supprimer dernier / , sauf pour la racine:
   if ! [[ "$montage" == "/" ]] ; then
       montage="${montage%/}"  # Pour le trouver avec df
   fi
else
TITRE "Agrandir le volume $lvm, monté sur $montage, système xfs"
fi

df -h | egrep "${montage}$" >/dev/null || EXIT "Le répertoire de montage «$montage» n'existe pas"

# Vérifier concordance entre groupe de volumes, volume logique et point de montage:
if ! [[ -L "$lvm" ]] ;then
   ALERTE "$lvm n'est pas un répertoire connu"
   mount | egrep "$lvm"
   exit 11
fi

MESSAGE "Examen de $vg"
df -h | egrep --color=auto "$vg"
sysfile=$(df -T | egrep "$lvm" | perl -lane 'print "$F[1]"')

MESSAGE "Système de fichier de $lvm:"
if ! [[ "$sysfile" =~ "xfs" ]] ; then
   ALERTE "Système: $sysfile - ne pas agrandir à chaud un autre système que xfs"
   EXIT "Ce script n'est pas adapté à $sysfile"
fi

sysfileMNT=$(df -T | grep "${montage}$" | perl -lane 'print "$F[1]"')

MESSAGE "Système de fichier de $montage"
if ! [[ "$sysfileMNT" =~ "xfs" ]] ; then
   ALERTE "Système: $sysfileMNT - ne pas agrandir à chaud un autre système que xfs"
   EXIT "Ce script n'est pas adapté à $sysfileMNT"
fi

# Place disponible sur le groupe de volume:
vgdisplay "$vg" | egrep "VG Name|Total|Alloc|Free" || EXIT "$vg n'est pas conforme"
echo
MESSAGE "Agrandir le volume logique $lvm"
MESSAGE "(à chaud:  formaté en ${sysfile})"

read -p "Agrandir maintenant? (O/N)" reponse

if ! [[ "$reponse" == O || "$reponse" == o ]] ;then
   echo "Terminé"
   exit 10
fi

sysfileMNT=$(df -T | grep "${montage}$" | perl -lane 'print "$F[1]"')

MESSAGE "Système de fichier de $montage"
if ! [[ "$sysfileMNT" =~ "xfs" ]] ; then
   ALERTE "Système: $sysfileMNT - ne pas agrandir à chaud un autre système que xfs"
   EXIT "Ce script n'est pas adapté à $sysfileMNT"
fi

# Place disponible sur le VG
vgdisplay "$vg" | egrep "VG Name|Total|Alloc|Free" || EXIT "$vg n'est pas conforme"
echo
MESSAGE "Agrandir le volume logique $lvm"
MESSAGE "(à chaud:  formaté en ${sysfile})"

read -p "Agrandir maintenant? (O/N)" reponse

if ! [[ "$reponse" == O || "$reponse" == o ]] ;then
   echo "Terminé"
   exit 10
fi

MESSAGE "Espace disponible dans le groupe $vg:"
vgs -o vg_free --noheadings "$vg"

TITRE "lvextend -L"
read -p "Quelle dimension? (+ pour ajouter, nombre entier, K/M/G/T à la fin)" dim
MESSAGE "lvextend -L${dim} ${lvm}"
read -p "Lancer ? (O/o)" lancer
if [[ "$lancer" == O || "lancer" == o ]] ; then
   MESSAGE "lvextend -L ${dim} ${lvm}"
   lvextend -L"${dim}" "${lvm}" || echo "Échec"
   echo
   lvdisplay $vg | egrep 'LV Path|LV Size|Logical volume'
   MESSAGE "xfs_growfs ${montage}"
   xfs_growfs "${montage}"
else
   EXIT "Tu n'a pas dit oui: aucune action n'est faite"
fi

Accueil | Contact | Plan du site | | Statistiques du site | Visiteurs : 311 / 59165

Suivre la vie du site fr  Suivre la vie du site GNU, LINUX, BSD, LL  Suivre la vie du site AIDES GNU/LINUX  Suivre la vie du site Administration disques   ?

Site réalisé avec SPIP 3.1.6 + AHUNTSIC

Creative Commons License