LVM (AIX)
| Fiche express | |
|---|---|
| Domaine | Stockage (LVM) — vue d'ensemble et procédures complètes |
| Commandes clés | mkvg · mklv · crfs · chfs · extendlv · fsck
|
| Contexte | AIX — équivalent Linux : LVM (`pvcreate`/`vgcreate`/`lvcreate`) |
| Voir aussi | Mkvg · Lsvg · Chvg · Lslv · Chlv · Extendlv · Crfs · Chfs · Fsck · Lspv · Cfgmgr · Importvg · Reducevg |
LVM (Logical Volume Manager) sur AIX organise le stockage disque en plusieurs couches empilées : disque physique → partitions physiques → volume group → volume logique → filesystem. Chaque commande LVM a sa propre page dédiée (voir la fiche express ci-contre) ; cette page rassemble les procédures complètes qui enchaînent ces commandes pour des opérations courantes (créer un filesystem, agrandir un volume, réparer un FS corrompu, copier des données vers un nouveau VG…).
Les briques de base : Physical Partitions (PP)
Une Physical Partition (PP) est l'unité d'allocation élémentaire d'un disque physique (Physical Volume, PV) dans LVM AIX :
- Chaque PV est divisé en un nombre entier de PP, de taille fixe au sein d'un même volume group.
- Tailles de PP possibles : 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 ou 1024 Mo (4 Mo par défaut).
- Une Logical Partition (LP) correspond à une ou plusieurs PP au sein d'un volume logique : sans miroir 1 LP = 1 PP, miroir simple 1 LP = 2 PP, miroir double 1 LP = 3 PP.
- Le nombre maximum de PP par VG dépend du type de VG — voir Lsvg/Mkvg pour le tableau complet (normal/big/scalable VG).
Hiérarchie complète : PV (disque) → PP (subdivision du PV) → VG (regroupement de PV) → LV (espace logique construit à partir de PP) → LP (unité logique du LV).
lspv # informations sur les PV, dont leur nombre de PP
lsvg -l nomvg # LV d'un VG avec leur allocation en PP
lsvg -p nomvg # PV d'un VG avec leur allocation en PP
lslv -m nomlv # mapping des LP vers les PP
Le choix de la taille des PP est un compromis : plus petite, elle permet une allocation plus fine mais limite la taille totale du VG ; plus grande, elle permet des VG plus grands mais avec une granularité plus grossière.
Zones de métadonnées
- VGDA (Volume Group Descriptor Area) — structure du VG, PV/LV membres, mapping des partitions, répliquée sur chaque PV.
- VGSA (Volume Group Status Area) — état de synchronisation des copies miroir.
- LVCB (Logical Volume Control Block) — écrit dans les 512 premiers octets de chaque volume logique : date de création, nombre de copies miroir, points de montage possibles.
Détail complet du VGDA/VGSA et des types de VG (normal/big/scalable) : voir Lsvg.
Réparer un volume group qui ne se monte pas
Si un VG ne s'active plus correctement après un changement de configuration disque (ex. après un remplacement de LUN) :
redefinevg -d nomdudisque nomduvg # redéfinit le VG à partir du disque indiqué
varyonvg nomduvg # réactive le VG
synclvodm nomduvg # resynchronise l'ODM avec l'état réel du VG
Voir Synclvodm pour le détail de cette dernière commande.
Créer un volume group
mkvg -y datavg hdisk2 # crée le VG datavg sur hdisk2
lsvg # vérifie que datavg apparaît dans la liste
mkvg -f -y appsvg01 hdisk1 # -f force la création (ex. si le disque a déjà un PVID résiduel)
Détail complet des options de `mkvg` (taille de PP, type big/scalable…) : voir Mkvg.
Réimporter un volume group qui contient plusieurs disques
importvg hdiskX # importe le VG à partir d'un des disques membres
lsvg -p nomduvg # vérifie que tous les PV attendus sont bien membres
lqueryvg -p hdiskX -P # interroge directement le VGDA de chaque disque si besoin
Voir Importvg et Lqueryvg pour le détail de ces commandes.
Workflow complet : créer un filesystem de taille donnée dans un nouveau VG
lspv # repérer un disque libre (colonne VG vide/None)
# si le disque provient d'une baie SAN, vérifier son état multipath (hors périmètre LVM,
# voir la future branche Stockage) avant de poursuivre
mkvg -s 128 -f -y datavg hdisk1 # crée le VG, PP de 128 Mo, -f force si PVID résiduel
lsvg data
mklv -y datalv -t jfs2 datavg 1 # crée le LV (1 LP)
crfs -v jfs2 -d datalv -m /data -A yes -p rw -a agblksize=4096 # crée le FS dessus
chfs -a size=40G /data # ajuste la taille finale
lsfs /data
La taille de PP (`-s`) doit tenir compte de la taille du disque : une valeur trop petite (1 Mo) limite le nombre de PP adressables ; l'option `-B` de `mkvg` (Big VG) lève cette limite si besoin — voir Mkvg/Lsvg pour le tableau des limites par type de VG.
Ajouter une nouvelle partition LVM (disque neuf)
Procédure complète depuis l'ajout physique du disque jusqu'au montage du filesystem :
cfgmgr # rescanne le matériel pour détecter le nouveau disque
lsdev -Cc disk # identifie le nouveau disque (ex. hdisk2)
lspv # confirme qu'il n'appartient à aucun VG
mkvg -y monvg hdisk2 # crée le VG sur ce disque
lspv hdisk2 # vérifie la taille désormais associée au VG
mklv -t jfs2log monvg 1 # crée le journal JFS2 dédié (1 PP)
lsvg -l monvg # note son nom (généralement loglv00)
mklv -t jfs2 -y monlv monvg 30G # crée le LV de production (30 Go)
mkfs -o log=/dev/loglv00 -V jfs2 /dev/monlv # pose le filesystem sur le LV
mkdir /mountpoint # crée le point de montage
mount -o log=/dev/loglv00 /dev/monlv /mountpoint
# ne pas oublier d'ajouter l'entrée dans /etc/filesystems si le montage doit être permanent
Vérifier le superbloc et les données d'un filesystem
dumpfs /point/de/montage | pg
Agrandir un volume logique existant
Procédure rapide
extendvg monvg hdiskX # ajoute le disque hdiskX au VG
chlv -x 1024 monlv # augmente si besoin le nombre max. de LP autorisées pour ce LV
extendlv monlv 20 hdiskX # étend le LV de 20 LP sur ce disque
lslv -m monlv # vérifie la nouvelle allocation
lsfs -q /point/de/montage # relève la nouvelle taille du LV ("lv size")
chfs -a size=<valeur_lv_size> /point/de/montage # agrandit le FS à cette taille
Démarche de vérification avant d'agrandir
lsvg -l `lsvg` # liste les LV de tous les VG du système
lsvg -p `lsvg` # liste les PV de tous les VG du système
lsvg nomduvg # vérifie l'espace libre (FREE PPs) avant d'agrandir
chfs -a size=+500M /point/de/montage # le "+" ajoute à l'existant (sans lui, la taille est absolue — voir [[Chfs]])
Gestion des erreurs classiques
0516-787 extendlv: Maximum allocation for logical volume <LV_Name> is 512— le nombre max. de LP du LV est atteint : augmenter la limite avecchlv -x <nouveau_max> <lv>avant de retenter l'extension (voir Chlv).Not enough descriptor area space left in this volume group to re-size the physical volumes— le VGDA est plein : passer le VG à un facteur supérieur avecchvg -t <facteur> nomvg, puis en Big VG puis Scalable VG si le facteur max est déjà atteint (⚠️ opération à préparer, voir la procédure de conversion détaillée dans Lsvg).
Agrandir un volume group hébergé sur une baie SAN
Si le VG manque d'espace et que le LUN sous-jacent doit d'abord être agrandi côté baie (procédure côté stockage hors périmètre de cette page — voir la future branche Stockage), la partie AIX de l'opération une fois le LUN agrandi est :
cfgmgr # rescanne pour que le système voie la nouvelle taille du disque
chvg -g monvg # répercute la nouvelle taille de PV sur le VG
lsvg monvg # vérifie que FREE PPs a bien augmenté
chfs -a size=+2G /point/de/montage
Migrer un volume logique vers un autre disque physique
migratepv -l monlv pv_source pv_destination
Créer un nouveau volume logique avec journal dédié
mkvg -y oravg -s 128 hdiskX # crée le VG, PP de 128 Mo
mklv -y oraloglv -t jfs2log -a e -r n oravg 1 hdiskX # journal dédié (-a e: edge, -r n: non relocalisable)
mklv -y oralv -t jfs2 -a e oravg 500 hdiskX # LV de données (500 LP, politique edge)
crfs -v jfs2 -a logname=oraloglv -d oralv -m /data # FS avec journal explicite
mount /data
chown -R nomutilisateur.nomgroupe /data
Réparer un filesystem corrompu
fsck /point/de/montage # vérifie la cohérence (ne pas lancer sur un FS monté)
umount /point/de/montage
Si le démount échoue (processus occupant le FS) :
fuser -cux /point/de/montage # liste les processus qui utilisent le FS
fuser -kcux /point/de/montage # les termine (équivalent kill -9 ; les process respawnés par inittab reviendront)
umount /point/de/montage
Puis correction effective des erreurs :
fsck -y /point/de/montage
Copier un filesystem vers un nouveau volume group
`cplv` copie au niveau des partitions logiques (PP/LP), pas fichier par fichier — nettement plus rapide que `cp`/`tar` quand le FS contient beaucoup de fichiers :
# créer au préalable le VG cible (et son journal si besoin)
umount /point/de/montage # démonter le FS à copier
cplv -v nouveauvg ancienlv # copie vers le nouveau VG (crée un LV type fslv01)
chfs -a dev=/dev/fslv01 -a log=/dev/nouveaujournal /point/de/montage # bascule le FS sur la copie
# (ou -a log=INLINE si le journal est inline)
fsck -p /dev/fslv01 # vérifie l'intégrité de la copie
mount /point/de/montage
Copier un filesystem à l'intérieur du même volume group
Procédure complète pour dupliquer un FS en place (utile avant une opération risquée, ou pour le mettre en miroir) :
# 1. créer un FS temporaire pour recevoir la copie
extendvg monvg hdiskX hdiskY # ajoute de l'espace au VG si besoin
mkdir /tmp_mount # point de montage temporaire
chown proprietaire.groupe /tmp_mount # droits alignés sur le FS d'origine
mklv -t jfs2 -y templv monvg 1596 hdiskX hdiskY # LV temporaire (nb LP selon la taille visée)
crfs -v jfs2 -d templv -m /tmp_mount # FS temporaire
# 2. copier les données (FS d'origine monté en lecture seule pendant la copie)
umount /point/de/montage
mount -r /point/de/montage
cp -prh /point/de/montage/* /tmp_mount/ # petit nombre de fichiers
# ou, pour un gros volume de fichiers :
# cd /point/de/montage && tar cvf - . | (cd /tmp_mount && tar xvf -)
ls -lR /point/de/montage | wc -l # vérifie que les deux arbres sont identiques
ls -lR /tmp_mount | wc -l
# 3. renommer LV et FS (bascule finale)
umount /point/de/montage
umount /tmp_mount
chlv -n ancienlv_old ancienlv # renomme l'ancien LV
chfs -m /point/de/montage_old /point/de/montage # renomme l'ancien point de montage
chlv -n ancienlv templv # le LV temporaire prend le nom de production
chfs -m /point/de/montage /tmp_mount # le FS temporaire prend le point de montage de production
fsck /point/de/montage # vérification avant remontage
mount /point/de/montage
chown proprietaire.groupe /point/de/montage # réapplique les droits si besoin
# 4. optionnel : mettre le nouveau LV en miroir puis nettoyer l'ancien
rmfs /point/de/montage_old # supprime l'ancien FS (libère l'espace)
rmdir /tmp_mount /point/de/montage_old
mklvcopy ancienlv 2 hdiskX hdiskY # crée 2 copies miroir du LV
syncvg -l ancienlv # synchronise les copies
Changer le journal (log logical volume) d'un filesystem
Utile quand un FS très sollicité en écriture partage son disque avec son journal (goulot d'étranglement I/O) :
umount /point/de/montage
mklv -t jfs2log -y nouveaujournal monvg 1 autredisque # nouveau journal sur un autre disque
logform /dev/nouveaujournal # formate le journal
chfs -a log=/dev/nouveaujournal /point/de/montage # bascule /etc/filesystems sur ce journal
getlvcb -AT ancienlv # vérifie que le LVCB est à jour
mount /point/de/montage
Exemple pratique : session complète de gestion LVM
Sur une machine avec `rootvg` réparti sur plusieurs disques physiques :
lsdev -Cc disk # liste les disques physiques
bootinfo -s hdisk2 # taille d'un disque précis
lspv # tous les PV reconnus par LVM, avec leur VG
lspv hdiskX # état d'un PV précis + VG associé
lspv -l hdiskX # LV présents sur ce PV
mkvg -y datavg -s 32 hdiskX # crée un VG, PP de 32 Mo
mkvg -t 4 -s 8 datavg # -t : facteur (voir [[Lsvg]] pour le détail)
chvg -t 4 monvg # conversion en multiple de 1016 PP par PV (1 <= facteur <= 16)
extendvg -f monvg hdiskX # ajout d'un disque à un VG (-f force)
migratepv hdisk1 hdisk2 # déplace le contenu d'un PV vers un autre
lsvg # tous les VG du système
lsvg -o # VG actuellement actifs seulement
lsvg -p rootvg # disques physiques utilisés par le VG + espace utilisé par disque
lsvg -l monvg # LV d'un VG précis
lsvg -o | lsvg -i -l # LV de tous les VG actifs
Suppression complète d'un VG en retirant tous ses PV un par un :
VGDEL=monvg_a_supprimer
for i in $(lsvg -p $VGDEL | tail -n +3 | awk '{print $1}'); do
reducevg $i
done
Créer, agrandir et supprimer un volume logique :
mklv -y'lv_appli' -t'jfs2' -L'/exec/products/appli' rootvg # créer un LV
rmlv -f 'lv_appli' # supprimer un LV
# agrandir un LV existant : vérifier d'abord son VG et l'espace libre
chfs -a size=4G /nom/du/fs # ⚠️ ceci FIXE la taille à 4G (pas un ajout) ; size=+4G ajouterait 4G
Mise en miroir d'un VG entier :
mirrorvg -m monvg hdiskX
mirrorvg rootvg
# 0516-1126 mirrorvg: rootvg successfully mirrored, user should perform bosboot of
# system to initialize boot records. Then, user must modify bootlist to include
# both disques (ex. bootlist -m normal hdisk0 hdisk2) — voir [[Bootlist]]
Exemple de sortie `lsvg` typique (pour se repérer sur les champs importants — PP SIZE, MAX LVs, FREE PPs, MAX PVs — avant une opération d'agrandissement) :
VOLUME GROUP: rootvg VG IDENTIFIER: 0040bbda00004c0000000127d895c5ea VG STATE: active PP SIZE: 16 megabyte(s) VG PERMISSION: read/write TOTAL PPs: 268 (4288 megabytes) MAX LVs: 256 FREE PPs: 80 (1280 megabytes) LVs: 13 USED PPs: 188 (3008 megabytes) OPEN LVs: 12 QUORUM: 2 TOTAL PVs: 1 VG DESCRIPTORS: 2 STALE PVs: 0 STALE PPs: 0 ACTIVE PVs: 1 AUTO ON: yes MAX PPs per PV: 1016 MAX PVs: 32 LTG size: 128 kilobyte(s) AUTO SYNC: no HOT SPARE: no BB POLICY: relocatable
Ici, 80 PP libres × 16 Mo = 1280 Mo disponibles pour agrandir un LV existant sans ajouter de disque.
Identifier un disque de façon fiable
La seule information fiable pour identifier un disque est son PVID (écrit sur le disque lui-même) — ne pas se fier aux noms `hdiskX`, qui peuvent changer d'un reboot à l'autre :
lspv # fait le lien entre PVID et nom hdiskX actuel
Rappel des commandes de gestion de VG couvertes sur ce wiki : Lsvg · Mkvg · Chvg · Reducevg · `extendvg`. Le miroir se configure au niveau des LV (même si `smit` le propose au niveau VG) — il automatise ensuite le miroir de chaque PP.
Voir aussi
- Mkvg — création détaillée d'un VG (options, tableau des limites par type de VG)
- Lsvg — informations sur un VG, conversion normal→big→scalable
- Chvg — modification des caractéristiques d'un VG existant
- Lslv / Chlv — informations et modification d'un volume logique
- Extendlv / Reducevg — extension/retrait au niveau LV et VG
- Crfs / Chfs / Rmfs / Lsfs — cycle de vie d'un filesystem
- Fsck — vérification et réparation d'un filesystem
- Cfgmgr / Importvg / Lqueryvg / Synclvodm — détection disque et diagnostic bas niveau
- LVM — implémentation LVM sous Linux (PV/VG/LV,
lvcreate,vgcreate…)