[Rocky9] LVM擴大磁碟容量

URL Link //n.sfs.tw/16566

2025-12-03 02:30:54 By 張○○

起因是原本規畫的磁碟空間只有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等的資料。

# lsblk
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

Running transaction
  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

CHANGED: partition=2 start=2099200 old: size=81786880 end=83886079 new: size=123729887 end=125829086

雖然擴大了PV,但LVM還不知道用pvdisplay還是會顯示舊容量。

讓 LVM PV 認識到新的硬碟大小

# pvresize /dev/sda2

  Physical volume "/dev/sda2" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized

查看LVM中的PV大小

# pvdisplay /dev/sda2

  --- Physical volume ---
  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

NAME                              MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
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

PV         VG                         Fmt  Attr PSize   PFree
/dev/sda2  rl_2001-b030-...-81cb-a692 lvm2 a--  <59.00g 20.00g

PFree 就是VG的空間

使用 lvs 來查看 LV, VG的情況

# lvs

LV   VG                           Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
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

Size of logical volume rl_2001-b030-...-81cb-a692/root changed from <35.00 GiB (8959 extents) to <55.00 GiB (14079 extents).
Logical volume rl_2001-b030-...-81cb-a692/root successfully resized.

 

五、擴大檔案系統

最後告知檔案系統你的新容量,這樣 df 就會正常了。

# xfs_growfs /

meta-data=/dev/mapper/rl_2001--b030--...--81cb--a692-root isize=512    agcount=4, agsize=2293504 blks
         =                       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

Filesystem                                                          Size  Used Avail Use% Mounted on
...
/dev/mapper/rl_2001--b030--...--81cb--a692-root   55G   34G   22G  62% /
...

# lsblk

NAME                              MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
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、再從空間池中畫出邏輯空間。

容量只能擴大不能縮小,要縮小只能重建。