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ą 😉
Jest tylko jeden problem – tak się można zabawiać na domowym komputerze, w środowisku produkcyjnym bym się nie odważył.
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ą 🙂