mercredi 11 décembre 2019

Augmenter et réduire les volumes logiques (LVM) avec le système de fichiers XFS - CENTOS 7

Pour commencer, sachez que le système de fichiers XFS n'est pas prévu pour être diminué de taille.
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Storage_Administration_Guide/ch-xfs

De ce fait, il sera nécessaire de faire un dump du système de fichier de la partition à diminuer avec xfsdump.

Mon système actuel:
$ df -h
Sys. de fichiers        Taille Utilisé Dispo Uti% Monté sur
devtmpfs                  7,7G       0  7,7G   0% /dev
tmpfs                     7,7G       0  7,7G   0% /dev/shm
tmpfs                     7,7G     19M  7,7G   1% /run
tmpfs                     7,7G       0  7,7G   0% /sys/fs/cgroup
/dev/mapper/centos-root    50G     31G   20G  61% /
/dev/nvme0n1p2           1014M    219M  796M  22% /boot
/dev/nvme0n1p1            200M     12M  189M   6% /boot/efi
/dev/mapper/centos-home   873G     11G  862G   2% /home
tmpfs                     1,6G     32K  1,6G   1% /run/user/1000
On va réduire la partition /home et on va augmenter la partition /

Scan des LVM:
# lvscan 
  ACTIVE            '/dev/centos/swap' [7,75 GiB] inherit
  ACTIVE            '/dev/centos/home' [<872,56 GiB] inherit
  ACTIVE            '/dev/centos/root' [50,00 GiB] inherit    

Réduire le volume logique /home

On commence par la partition /home qui dispose de 816Go.
On va réduire cette partion à 500Go.

Vérifier le système de fichiers:
# mount | grep home
/dev/mapper/centos-home on /home type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
Le type du système de fichier est XFS. Etant donné que ce système de fichiers n'est pas prévu pour etre diminué en taille, il va falloir adopter la stratégie suivante:
  1. Sauvegarde des données de la partition à réduire
  2. Suppression du volume logique
  3. Recréation du volume logique
  4. Formation de la partition en XFS
  5. Restauration des données
Sauvegarde des données de la partition à réduire:
(Assurer vous d'avoir assez d'espace disque sur la partition cible.)
# xfsdump -l 0 -f /root/home.image /dev/centos/home 
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.7 (dump format 3.0) - type ^C for status and control

 ============================= dump label dialog ==============================

please enter label for this dump session (timeout in 300 sec)
 -> 20191211
session label entered: "20191211"

 --------------------------------- end dialog ---------------------------------

xfsdump: WARNING: most recent level 0 dump was interrupted, but not resuming that dump since resume (-R) option not specified
xfsdump: level 0 dump of alien1.local:/home
xfsdump: dump date: Wed Dec 11 15:22:56 2019
xfsdump: session id: 1cbba971-874e-4259-8f64-af9a784abaf0
xfsdump: session label: "20191211"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 11285116672 bytes

 ============================= media label dialog =============================

please enter label for media in drive 0 (timeout in 300 sec)
 -> home.old
media label entered: "home.old"

 --------------------------------- end dialog ---------------------------------

xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 11282653552 bytes
xfsdump: dump size (non-dir files) : 11278948096 bytes
xfsdump: dump complete: 60 seconds elapsed
xfsdump: Dump Summary:
xfsdump:   stream 0 /root/home.image OK (success)
xfsdump: Dump Status: SUCCESS
L'idéal est de se connecter avec l'utilisateur root sans passer par un utilisateur pour éviter que la partition home soit utilisée, ce qui pourrait empécher un umount.

umount de la partition home
# umount /dev/centos/home
Suppression du volume logique home
# lvremove /dev/centos/home 
Do you really want to remove active logical volume centos/home? [y/n]: y
  Logical volume "home" successfully removed
Création du volume logique home avec une taille de 500Go.
# lvcreate -L 500G -n home centos
WARNING: xfs signature detected on /dev/centos/home at offset 0. Wipe it? [y/n]: y
  Wiping xfs signature on /dev/centos/home.
  Logical volume "home" created.
Formatage de la partition en XFS.
# mkfs.xfs /dev/centos/home 
meta-data=/dev/centos/home       isize=512    agcount=4, agsize=32768000 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=131072000, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=64000, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

Monter le volume logique vers /home
# mount /dev/centos/home /home/
Le contenu de la partition /home est vide
# ll /home
total 0
Restaurer les datas précédemment sauvegardés
# xfsrestore -f /root/home.image /home
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.7 (dump format 3.0) - type ^C for status and control
xfsrestore: searching media for dump
xfsrestore: examining media file 0
xfsrestore: dump description: 
xfsrestore: hostname: alien1.local
xfsrestore: mount point: /home
xfsrestore: volume: /dev/mapper/centos-home
xfsrestore: session time: Wed Dec 11 15:22:56 2019
xfsrestore: level: 0
xfsrestore: session label: "20191211"
xfsrestore: media label: "home.old"
xfsrestore: file system id: 42b1e204-4621-4062-83b5-6426aba0dfc3
xfsrestore: session id: 1cbba971-874e-4259-8f64-af9a784abaf0
xfsrestore: media id: 235c086a-c08e-4cdc-b377-d671ab81cf7f
xfsrestore: using online session inventory
xfsrestore: searching media for directory dump
xfsrestore: reading directories
xfsrestore: 207 directories and 5099 entries processed
xfsrestore: directory post-processing
xfsrestore: restoring non-directory files
xfsrestore: restore complete: 15 seconds elapsed
xfsrestore: Restore Summary:
xfsrestore:   stream 0 /root/home.image OK (success)
xfsrestore: Restore Status: SUCCESS

Augmenter le volume logique /

Voila, il ne reste plus qu'à étendre le volume logique avec l'espace disque libre.
# lvextend -l +100%FREE /dev/centos/root
  Size of logical volume centos/root changed from 50,00 GiB (12800 extents) to 422,56 GiB (108176 extents).
  Logical volume centos/root successfully resized.

Etendre le système de fichiers XFS pour occuper le volume logique complet.
# xfs_growfs /dev/centos/root 
meta-data=/dev/mapper/centos-root isize=512    agcount=4, agsize=3276800 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=13107200, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=6400, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 13107200 to 110772224
Vérification:
# df -hP /root/
Sys. de fichiers        Taille Utilisé Dispo Uti% Monté sur
/dev/mapper/centos-root   423G     42G  381G  10% /