Zmiana rozmiaru partycji linuxowej z xfs

Założeniami tego niezbyt odkrywczego wpisu jest posiadanie – dystrybucji Linuxa „opartej” o Red Hat (RHEL, CentOS etc…), tablicy partycji GPT, oraz dysku podzielonego na logiczne partycje z wykorzystaniem LVM. Czyli tak naprawdę – domyślne ustawienia instalacji najnowszych wersji RHEL i CentOS. Jeśli nie ingerujemy zbytnio w partycjonowanie dysku podczas instalacji – okazuje się, że sporą część dysku instalator automatycznie przeznacza na /home – jak więc bezpiecznie zmniejszyć rozmiar /home, a odzyskany obszar przypisać chociażby do głównego punktu montowania / ?

Zacznijmy od zebrania podstawowych informacji. W tym celu sprawdzamy informacje o dysku i jego partycjach:

[root@speceit]# cat /etc/fstab
/dev/mapper/rhel-root  /       xfs     defaults        0 0
/dev/mapper/rhel-home  /home   xfs     defaults        0 0
/dev/mapper/rhel-swap  swap    swap    defaults        0 0
[root@speceit]# fdisk -l
Disk /dev/sda: 136.4 GB, 136365211648 bytes, 266338304 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: gpt
Disk identifier: E78439AE-F140-4C93-9BA9-042C0400BBCD
         Start          End    Size  Type            Name
1         2048       411647    200M  EFI System      EFI System Partition
2       411648      2508799      1G  Microsoft basic
3      2508800    266336255  125.8G  Linux LVM
[root@speceit]# pvdisplay
   --- Physical volume ---
   PV Name               /dev/sda3
   VG Name               rhel
   PV Size               125.80 GiB / not usable 2.00 MiB
   Allocatable           yes
   PE Size               4.00 MiB
   Total PE              32205
   Free PE               15853
   Allocated PE          16352
   PV UUID               83zMC0-Ek45-RT5p-ydk0-R2d9-NI0c-NySzk5
[root@speceit]# vgdisplay
   --- Volume group ---
   VG Name               rhel
   System ID
   Format                lvm2
   Metadata Areas        1
   Metadata Sequence No  4
   VG Access             read/write
   VG Status             resizable
   MAX LV                0
   Cur LV                3
   Open LV               3
   Max PV                0
   Cur PV                1
   Act PV                1
   VG Size               125.80 GiB
   PE Size               4.00 MiB
   Total PE              32205
   Alloc PE / Size       32204 / <125.80 GiB
   Free  PE / Size       1 / 4.00 MiB
   VG UUID               PsGI90-ndHm-UAL4-GPmo-KUQc-Sv0w-xglzOk
[root@speceit]# lvdisplay
--- Logical volume ---
LV Path                /dev/rhel/swap
LV Name                swap
VG Name                rhel
LV UUID                Lg6etd-k4dv-5pcN-KRJt-FfS0-LkYW-d5z0Co
LV Write Access        read/write
LV Creation host, time speceit, 2019-10-08 15:24:46 +0200
LV Status              available
# open                 2
LV Size                <3.88 GiB
Current LE             992
Segments               1
Allocation             inherit
Read ahead sectors     auto
- currently set to 8192
Block device           253:1
--- Logical volume ---
LV Path                /dev/rhel/home
LV Name                home
VG Name                rhel
LV UUID                Q6ABeA-onXV-p0ly-h3F2-8Dsq-pOGW-ErdIpG
LV Write Access        read/write
LV Creation host, time speceit, 2019-10-08 15:24:46 +0200
LV Status              available
open                   1
LV Size                71.92 GiB
Current LE             18412
Segments               1
Allocation             inherit
Read ahead sectors     auto
- currently set to 8192
Block device           253:2
--- Logical volume ---
LV Path                /dev/rhel/root
LV Name                root
VG Name                rhel
LV UUID                FjlX88-OJsm-axHU-Aukn-LTc4-EGxP-TB17lx
LV Write Access        read/write
LV Creation host, time speceit, 2019-10-08 15:24:47 +0200
LV Status              available
open                   1
LV Size                50.00 GiB
Current LE             12800
Segments               1
Allocation             inherit
Read ahead sectors     auto
- currently set to 8192
Block device           253:0 

Jak widać – cały obszar partycji dysku /dev/sda3 jest zajęty przez LVM, a ten z kolei jest podzielony między /swap /home i /. Zabierzmy się więc do dzieła i wykonania zadania – zmniejszenia /home do 10GB i przeznaczenia zwolnionego miejsca na rozszerzenie /. Zaczniemy od doinstalowania przydatnego narzędzia, które pomoże nam wykonać backup /home (wszak wiadomo, że bez backupu nic nie wolno robić 😉 ).

[root@speceit]# yum install xfsdump -y

Teraz wykonujemy backup partycji /home:

[root@speceit]# xfsdump -f /tmp/home.dump /home

Po wykonanym backupie musimy odmontować /home

[root@speceit]# umount /home

Teraz zmniejszymy LVM /home do rozmiaru 10GB:

[root@speceit]# lvreduce -L 10G /dev/rhel/home

Kolejny krok niektórzy mogą uznać za zbędny, ale… lepiej dmuchać na zimne 😉 tak więc sformatujemy od nowa /home i przywrócimy dane:

[root@speceit]# mkfs.xfs -f /dev/rhel/home
[root@speceit]# mount /dev/rhel/home /home
[root@speceit]# xfsrestore -f /tmp/home.dump /home

Sprawdźmy co nam wyszło:

[root@speceit]# df -h
Filesystem             Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root   50G   11G   40G  22% /
/dev/sda2             1014M  179M  836M  18% /boot
/dev/sda1              200M  9.7M  191M   5% /boot/efi
/dev/mapper/rhel-home   10G  781M  9.3G   8% /home

Jak widać /home ma już zakładany rozmiar, sprawdźmy czy faktycznie mamy zwolniony obszar:

[root@speceit]# vgdisplay
   --- Volume group ---
   VG Name               rhel
   System ID
   Format                lvm2
   Metadata Areas        1
   Metadata Sequence No  5
   VG Access             read/write
   VG Status             resizable
   MAX LV                0
   Cur LV                3
   Open LV               3
   Max PV                0
   Cur PV                1
   Act PV                1
   VG Size               125.80 GiB
   PE Size               4.00 MiB
   Total PE              32205
   Alloc PE / Size       16352 / <63.88 GiB
   Free  PE / Size       15853 / <61.93 GiB
   VG UUID               PsGI90-ndHm-UAL4-GPmo-KUQc-Sv0w-xglzOk

Jak widać mamy nieco dostępnego miejsca, przypiszmy więc 60GB do LVM / :

 [root@speceit]# lvresize -L +60G /dev/rhel/root

To jednak nie koniec. Należy jeszcze rozszerzyć system plików:

[root@speceit]# xfs_growfs /dev/rhel/root

I na koniec sprawdzamy co tam wyszło 🙂

[root@speceit]# df -h
Filesystem             Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root  110G   11G  100G  10% /
/dev/mapper/rhel-home   10G  781M  9.3G   8% /home

Jak widać – jest ok. Warto jeszcze sprawdzić, czy /home ma taką samą zawartość jak przed całą operacją 😉

Piotr Berent

Piotr Berent od 2002 w pocie czoła pracujący w środowisku IT, obecnie freelancer - Inżynier Systemowy. Entuzjasta wirtualizacji, automatyzacji i rozwiązań opartych o narzędzia open-source.

2 komentarze

  1. sss pisze:

    Jest tylko jeden problem – tak się można zabawiać na domowym komputerze, w środowisku produkcyjnym bym się nie odważył.

    • Piotr Berent pisze:

      Właśnie opisywałem to tuż po wykonaniu tego na środowisku produkcyjnym. Oczywiście backup całej maszyny też był zrobiony chwilę przed tą operacją. Mimo wszystko oceniłbym ją jako bardzo bezpieczną 🙂

Dodaj komentarz