CentOS 8: espandere il file system root

In un ambiente virtuale capita ogni tanto di dover espandere il file system di un host. Con le versioni recenti di Windows Server l’operazione è quasi banale, con Linux molte guide che spesso compaiono per prime nei motori di ricerca suggeriscono sistemi molto macchinosi che passano dal boot della VM con l’ISO della distribuzione.

Di seguito viene descritto come ampliare una partizione di una VM CentOS 8 installata con i deafult.

La procedura è agnostica riguardo al sistema di virtualizzazione: ogni virtualizzatore ha il proprio metodo per ampliare un disco virtuale, il risultato dal punto di vista del host Linux è identico.

Si parte da una VM con un disco virtuale da 16 Gb su cui è installato Linux CentOS 8 minimal seguendo le impostazioni di default, quindi con LVM e file system xfs.

Lo scopo è ampliare il disco virtuale sottostate a 40 Gb ed estendere la partizione root per occupare tutto lo spazio libero del disco.

L’installazione minimal non comprende growpart, che deve essere installato con il comando

dnf -y install cloud-utils-growpart

Innanzi tutto un controllo della situazione atuale

[root@test01 ~]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    0   16G  0 disk
├─sda1        8:1    0  600M  0 part /boot/efi
├─sda2        8:2    0    1G  0 part /boot
└─sda3        8:3    0 14.4G  0 part
  ├─cl-root 253:0    0 12.8G  0 lvm  /
  └─cl-swap 253:1    0  1.6G  0 lvm  [SWAP]
sr0          11:0    1    7G  0 rom

Il disco è da 16 Gb e file system root da 12,8 Gb si trova in un volume LVM nella partizione /dev/sda3

[root@test01 ~]# pvs
  PV         VG Fmt  Attr PSize  PFree
  /dev/sda3  cl lvm2 a--  14.41g    0

A questo punto si estende il disco virtuale a 40 Gb utilizzando i tool del sistema di virtualizzazione e, come si vede, sda è passato a 40 Gb:

[root@test01 ~]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    0   40G  0 disk
├─sda1        8:1    0  600M  0 part /boot/efi
├─sda2        8:2    0    1G  0 part /boot
└─sda3        8:3    0 14.4G  0 part
  ├─cl-root 253:0    0 12.8G  0 lvm  /
  └─cl-swap 253:1    0  1.6G  0 lvm  [SWAP]
sr0          11:0    1    7G  0 rom

I volumi logici sono sulla partizione 3, che è quella da estendere con growpart:

[root@test01 ~]# growpart /dev/sda 3
CHANGED: partition=3 start=3328000 old: size=30224384 end=33552384 new: size=80558047,end=83886047

Si può verificare che /dev/sda3 passa da 14,4 a 38,4 Gb:

[root@test01 ~]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    0   40G  0 disk
├─sda1        8:1    0  600M  0 part /boot/efi
├─sda2        8:2    0    1G  0 part /boot
└─sda3        8:3    0 38.4G  0 part
  ├─cl-root 253:0    0 12.8G  0 lvm  /
  └─cl-swap 253:1    0  1.6G  0 lvm  [SWAP]
sr0          11:0    1    7G  0 rom

Ora è il turno del volume group, che viene esteso fino ad occupare tutto lo spazio disponibile:

[root@test01 ~]# pvresize /dev/sda3
  Physical volume "/dev/sda3" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized

Ed ecco la nuova dimensione del volume group, che passa da 14,41 a 38,41 Gb

[root@test01 ~]# pvs
  PV         VG Fmt  Attr PSize  PFree
  /dev/sda3  cl lvm2 a--  38.41g 24.00g

Ora il volume logico; il nome da mettere dopo /dev/mapper lo si può vedere con df oppure con lsblk come indicato sopra:

[root@test01 ~]# lvextend -l +100%FREE /dev/mapper/cl-root
  Size of logical volume cl/root changed from <12.81 GiB (3279 extents) to <36.81 GiB (9423 extents).
  Logical volume cl/root successfully resized.

L’ultimo sforzo è l’estensione della partizione, che è quello che interessa davvero:

[root@test01 ~]# xfs_growfs /
meta-data=/dev/mapper/cl-root    isize=512    agcount=4, agsize=839424 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=3357696, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 3357696 to 9649152

Ed ecco che la partizione root è stata ampliata

[root@test01 ~]# df -h
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/cl-root   37G  1.7G   36G   5% /
/dev/sda2            976M  187M  722M  21% /boot
/dev/sda1            599M  6.9M  592M   2% /boot/efi
tmpfs                378M     0  378M   0% /run/user/0

Questo metodo è sicuramente meno rapido di click destro + Extend partition e poi Next fino alla fine del wizard, ma è comunque relativamente semplice ed è possibile creare uno script shell con i comandi opportuni che risulta altrettanto veloce come l’omologo di Windows.

Di sicuro questo metodo non passa per un tedioso e inutile boot con la ISO in recovery mode.

Autore: Luigi Rosa

Consulente IT, sviluppatore, SysAdmin, cazzaro, e, ovviamente, geek.

Spazio per un commento

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.