起因是原本規畫的磁碟空間只有40G,當初的理由是檔案設定到nas、資料庫也切出了,應該夠。
日換星移日月如梭,後來裝了一些程式後空間變得很緊,拖到昨天才決定再加20G。這也是第一次進行rocky9的擴容。
系統
Rocky Linux release 9.6 (Blue Onyx)
LVM 是什麼?
LVM(Logical Volume Manager) 是 Rocky Linux 9 常用的磁碟管理方式,能讓你像「積木」一樣彈性地管理磁碟空間,比傳統的分割區(/dev/sda1、/dev/sda2…)更強大。
LVM由三個部分組成:
PV(Physical Volume) 實體磁碟或分割(例如 /dev/sda3)
VG(Volume Group)PV 組成的大空間池
LV(Logical Volume)從 VG 切出來的邏輯分割(會掛載成 /、/home 等)
像大部分的磁碟管理一樣,就是把實體磁碟(pv)整合後變成一個大空間池(vg),再從vg裡面依需要進行切割(lv)。
所以擴大容量時,要把pv、vg、lv都更新空間。
這裡要注意的是檔案系統,例如ext4是住在lv裡面的,所以空間增大時也要把檔案系統變大。
擴大容量完整流程
一、擴大 VM的空間配置
在 VM 平台先加大虛擬磁碟,關掉vm後增加空間 40G->60G
完成後重新開機或進入系統確認。
<這部分麻煩別人做的,沒截圖>
二、查看目前磁碟狀況
lsblk 是用來列出所有區塊裝置(block devices)的指令,可以查看pv/raid/lvm等的資料。
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 60G 0 disk <= 擴大後的實際空間, 原為40G
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 39G 0 part <= 要擴大這個
├─rl_2001--b030...--a692-root 253:0 0 35G 0 lvm /
└─rl_2001--b030...--a692-swap 253:1 0 4G 0 lvm [SWAP]
sr0 11:0 1 1024M 0 rom
三、使用 growpart 擴大pv
growpart 是 Linux 系統中用來擴展磁碟分區(partition)大小的命令工具,能在不刪除資料的情況下擴大現有分區的大小。
安裝
# dnf install /usr/bin/growpart
Preparing : 1/1
Installing : cloud-utils-growpart-0.33-1.el9.x86_64 1/1
Running scriptlet: cloud-utils-growpart-0.33-1.el9.x86_64 1/1
Verifying : cloud-utils-growpart-0.33-1.el9.x86_64 1/1
Installed:
cloud-utils-growpart-0.33-1.el9.x86_64
擴大pv
要擴大sda2的物理空間,後面的2代表 sda2
# growpart /dev/sda 2
雖然擴大了PV,但LVM還不知道用pvdisplay還是會顯示舊容量。
讓 LVM PV 認識到新的硬碟大小
# pvresize /dev/sda2
1 physical volume(s) resized or updated / 0 physical volume(s) not resized
查看LVM中的PV大小
# pvdisplay /dev/sda2
PV Name /dev/sda2
VG Name rl_2001-b030-830d-0c00-3810-200e-81cb-a692
PV Size <59.00 GiB / not usable 1.98 MiB
Allocatable yes (but full)
PE Size 4.00 MiB <== 每一個分區大小
Total PE 15103 <== 共切了這麼多分區
Free PE 0
Allocated PE 15103 <== 已全部配置了
PV UUID 16PAgb-mIqv-tjqa-wQEI-z8eD-hzAy-4yeCIq
新的容量已被正確識別
再次查看磁碟狀況
# lsblk
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 59G 0 part <= 已擴大成功
├─rl_2001--b030--...--a692-root 253:0 0 35G 0 lvm /
└─rl_2001--b030--...--a692-swap 253:1 0 4G 0 lvm [SWAP]
sr0 11:0 1 1024M 0 rom
PV有增加但你得讓 LV的意識到,所以進行下面的步驟…
四、擴大 LV
上面已經擴大了PV,我們知道VG 是由PV組成,但是LVM的大池 VG 因為PV擴大後,有未用到的PV空間(PFree)。
下指令 pvs 查看目前PV的狀態:
# pvs
/dev/sda2 rl_2001-b030-...-81cb-a692 lvm2 a-- <59.00g 20.00g
PFree 就是VG的空間
使用 lvs 來查看 LV, VG的情況
# lvs
root rl_2001-b030-...-81cb-a692 -wi-ao---- <35.00g
swap rl_2001-b030-...-81cb-a692 -wi-ao---- 4.00g
我目前的邏輯空間畫兩個目錄 :根 root 和swap
這次要加大的是 root,使用lvextend 來擴大root 這個LV。
# lvextend -l +100%FREE /dev/rl_2001-b030-...-81cb-a692/root
Logical volume rl_2001-b030-...-81cb-a692/root successfully resized.
五、擴大檔案系統
最後告知檔案系統你的新容量,這樣 df 就會正常了。
# xfs_growfs /
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=1 inobtcount=1 nrext64=0
data = bsize=4096 blocks=9174016, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=16384, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 9174016 to 14416896
# df -h
...
/dev/mapper/rl_2001--b030--...--81cb--a692-root 55G 34G 22G 62% /
...
# lsblk
sda 8:0 0 60G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 59G 0 part
├─rl_2001--b030--...--a692-root 253:0 0 55G 0 lvm /
└─rl_2001--b030--...--a692-swap 253:1 0 4G 0 lvm [SWAP]
sr0 11:0 1 1024M 0 rom
結論
lvm 是空間池的概念,把多個實體pv組成空間池vg、再從空間池中畫出邏輯空間。
容量只能擴大不能縮小,要縮小只能重建。
