LVM (AIX)

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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 avec chlv -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 avec chvg -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…)