VMゲストOS として CentOS/RHEL を運用していて、特定のパーティションのみ急遽拡張したいという場面がある。ログが爆発して100%になったとか、パッケージを入れ替えるワーク領域すらなくて少し拡げたいとか。
物理パーティションを直接仕切り直したい場合は、GParted Live CD イメージなどから boot する方法があるが、昨今はデフォルトインストールで LVM で構成されていることが多いので一筋縄ではいかない。
AWS/RedHat のドキュメントや各種個人ブログ等で紹介された手順を、個人的に整理しておく。
例) / (root) パーティション /dev/mapper/cl-root が94%となっていてパンクしそう。これを増やしたい。
[root@vmXXX ~]# df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 3.8G 0 3.8G 0% /dev
tmpfs 3.8G 376K 3.8G 1% /dev/shm
tmpfs 3.8G 393M 3.5G 11% /run
tmpfs 3.8G 0 3.8G 0% /sys/fs/cgroup
/dev/mapper/cl-root 17G 16G 1G 94% / ← ここ
/dev/sda2 976M 235M 675M 26% /boot
/dev/sda1 599M 7.3M 592M 2% /boot/efi
/dev/mapper/home-home 100G 24G 77G 24% /home
tmpfs 777M 0 777M 0% /run/user/0
拡張すべきパーティションを特定する。
[root@vmXXX ~]# pvscan
PV /dev/sdb1 VG home lvm2 [<100.00 GiB / 0 free]
PV /dev/sda3 VG cl lvm2 [18.41 GiB / 0 free] ←
Total: 2 [<118.41 GiB] / in use: 2 [<118.41 GiB] / in no VG: 0 [0 ]
cl という名前のボリュームグループ(VG)は /dev/sda3 の PV を含んでいるとわかったので、さらに詳しく見ておく。
[root@vmXXX ~]# lsblk /dev/sda3
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda3 8:3 0 18.4G 0 part
├─cl-root 253:0 0 16.4G 0 lvm / ←
└─cl-swap 253:1 0 2G 0 lvm [SWAP]
以上から LV cl-root を含む /dev/sda3 を拡張することにする。
vSphere Client や AWS Console の操作で /dev/sda に相当する仮想ディスクを 20GB→30GBに増量する。
[root@vmXXX ~]# lsscsi
[1:0:0:0] cd/dvd NECVMWar VMware IDE CDR10 1.00 /dev/sr0
[2:0:0:0] disk VMware Virtual disk 1.0 /dev/sda
[2:0:1:0] disk VMware Virtual disk 1.0 /dev/sdb
/dev/sda に該当する SCSI IDを確認 → 2:0:0:0
下記の手順で kernel に容量を再認識させる。
[root@vmXXX ~]# echo 1 > /sys/class/scsi_disk/2\:0\:0\:0/device/rescan
[root@vmXXX ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 30G 0 disk ← sda全体のサイズが 30GB になった
├─sda1 8:1 0 600M 0 part /boot/efi
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 18.4G 0 part
├─cl-root 253:0 0 16.4G 0 lvm / ←ここはまだ増えていない
└─cl-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 100G 0 disk
└─sdb1 8:17 0 100G 0 part
└─home-home 253:2 0 100G 0 lvm /home
sr0 11:0 1 1024M 0 rom
EPEL に含まれているため、未登録の場合はレポジトリを追加
yum install epel-release
dnf/yum で cloud-utils-growpart というパッケージを導入する。
yum install cloud-utils-growpart
/dev/sda3 なので、/dev/sda 内の 3番目のパーティションを拡張
[root@vmXXX ~]# growpart /dev/sda 3
CHANGED: partition=3 start=3328000 old: size=38612992 end=41940992 new: size=59586527 end=62914527
容量確認
[root@vmXXX ~]# lsblk /dev/sda3
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda3 8:3 0 28.4G 0 part ← 18GB --> 28GBに拡張された
├─cl-root 253:0 0 16.4G 0 lvm /
└─cl-swap 253:1 0 2G 0 lvm [SWAP]
パーティションサイズに合わせて PV を拡張する。
[root@vmXXX ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 cl lvm2 a-- 18.41g 0
/dev/sdb1 home lvm2 a-- <100.00g 0
[root@vmXXX ~]# pvresize /dev/sda3
Physical volume "/dev/sda3" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resized
[root@vmXXX ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 cl lvm2 a-- 28.41g 10.00g # Freeが10.00GBになった
/dev/sdb1 home lvm2 a-- <100.00g 0
拡張された PV に合わせて LV を拡張する。
-r : ファイルシステム (この場合は xfs) も同時に拡張
-l+100%FREE : LVに空き容量すべてを割り当てる
[root@vmXXX ~]# lvresize -r -l+100%FREE /dev/cl/root
Size of logical volume cl/root changed from 16.41 GiB (4201 extents) to 26.41 GiB (6761 extents).
Logical volume cl/root successfully resized.
meta-data=/dev/mapper/cl-root isize=512 agcount=4, agsize=1075456 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=0 inobtcount=0
data = bsize=4096 blocks=4301824, 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 4301824 to 6923264
作業後
[root@vmXXX ~]# df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 3.8G 0 3.8G 0% /dev
tmpfs 3.8G 376K 3.8G 1% /dev/shm
tmpfs 3.8G 393M 3.5G 11% /run
tmpfs 3.8G 0 3.8G 0% /sys/fs/cgroup
/dev/mapper/cl-root 27G 15G 12G 56% / ←空き容量が 2GB→12GBに増えた
/dev/sda2 976M 235M 675M 26% /boot
/dev/sda1 599M 7.3M 592M 2% /boot/efi
/dev/mapper/home-home 100G 24G 77G 24% /home
tmpfs 777M 0 777M 0% /run/user/0