LVM + ext4 でできている VM のディスク拡張をオンライン(電源を切らずに)のままでやってみました。
たまにやる作業ですが、いつも手順があやふやになるのでメモを残しておきます。
† パーティションの拡張
まずは lsblk
と fdisk
を使って対象となるディスク(今回は /dev/sda
)を確認。
ディスクは 120GB
で、パーティションが lvm
であることが分かります。
[root@host /]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 120G 0 disk
├sda1 8:1 0 1G 0 part /boot
└sda2 8:2 0 119G 0 part
├centos-root 253:0 0 111.1G 0 lvm /
└centos-swap 253:1 0 7.9G 0 lvm [SWAP]
sr0 11:0 1 1024M 0 rom
[root@host /]# fdisk -l /dev/sda
Disk /dev/sda: 128.8 GB, 128849018880 bytes, 251658240 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x000a5cf4
デバイス ブート 始点 終点 ブロック Id システム
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 251658239 124779520 8e Linux LVM
Disk /dev/mapper/centos-root: 119.3 GB, 119311171584 bytes, 233029632 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
次にディスクのサイズを拡張 120GB → 250GB します。
今回は VMWare なので、管理画面からディスクのサイズを拡張するだけです。
そのままではディスクサイズが拡張されたことを OS が認識できないため、OS にデバイス(sda
)を再スキャンさせます。
再スキャン後、fdisk でディスクが拡張されていることを確認します。
[root@host /]# echo 1 > /sys/class/block/sda/device/rescan
[root@host /]# fdisk -l /dev/sda
Disk /dev/sda: 268.4 GB, 268435456000 bytes, 524288000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x000a5cf4
デバイス ブート 始点 終点 ブロック Id システム
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 251658239 124779520 8e Linux LVM
ディスクが拡張されていることを確認できたらgrowpart
を使ってパーティションを拡張します。
growpart については以前、btrfs のパーティションの拡張にも使いましたが、今回もこれで /dev/sda2
を拡張しています。
[root@host /]# growpart /dev/sda 2
CHANGED: partition=2 start=2099200 old: size=249559040 end=251658240 new: size=522188767 end=524287967
[root@host /]# fdisk -l /dev/sda
Disk /dev/sda: 268.4 GB, 268435456000 bytes, 524288000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0x000a5cf4
デバイス ブート 始点 終点 ブロック Id システム
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 524287966 261094383+ 8e Linux LVM
† LVM による Physical volume (PV), Logical volume (LV) の拡張
今回は LVM なので、pvresize
で PV を拡張して、その後 lvextend
で LV を拡張するという流れになります。
まずは、PV の拡張から実施していきます。
ちなみに PV を拡張すると、VG の Free PE が増えているのが分かります。
[root@host /]# pvdisplay /dev/sda2
--- Physical volume ---
PV Name /dev/sda2
VG Name centos
PV Size <119.00 GiB / not usable 3.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 30463
Free PE 1
Allocated PE 30462
PV UUID 4SsX9l-ndF3-uQCB-FP1J-AlZ5-qNgl-3VZMCV
[root@host /]# pvresize /dev/sda2
Physical volume "/dev/sda2" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resized
[root@host /]# pvdisplay /dev/sda2
--- Physical volume ---
PV Name /dev/sda2
VG Name centos
PV Size <249.00 GiB / not usable 1.98 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 63743
Free PE 33281
Allocated PE 30462
PV UUID 4SsX9l-ndF3-uQCB-FP1J-AlZ5-qNgl-3VZMCV
[root@host /]# vgdisplay centos
--- Volume group ---
VG Name centos
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size <249.00 GiB
PE Size 4.00 MiB
Total PE 63743
Alloc PE / Size 30462 / 118.99 GiB
Free PE / Size 33281 / 130.00 GiB
VG UUID 15g2No-rxm0-AX6z-K7Q4-elyI-Kng7-hTO2lu
続いて、LV の拡張を行います。
[root@host /]# lvdisplay /dev/mapper/centos-root
--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
LV UUID tuI9Fw-bTn4-wQwf-de9K-gT1V-xovm-lu3MDR
LV Write Access read/write
LV Creation host, time host.example.jp, 2019-01-18 21:30:07 +0900
LV Status available
# open 1
LV Size <111.12 GiB
Current LE 28446
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
[root@host /]# lvextend -l +100%FREE /dev/mapper/centos-root
Size of logical volume centos/root changed from <111.12 GiB (28446 extents) to 241.12 GiB (61727 extents).
Logical volume centos/root successfully resized.
[root@host /]# lvdisplay /dev/mapper/centos-root
--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
LV UUID tuI9Fw-bTn4-wQwf-de9K-gT1V-xovm-lu3MDR
LV Write Access read/write
LV Creation host, time host.example.jp, 2019-01-18 21:30:07 +0900
LV Status available
# open 1
LV Size 241.12 GiB
Current LE 61727
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
† ファイルシステム (FS) の拡張
最後に FS にパーティションが広がったことを認識させます。
今回の FS は ext4
なので、resize2fs
を使います。
[root@host /]# resize2fs /dev/mapper/centos-root
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mapper/centos-root is mounted on /; on-line resizing required
old_desc_blocks = 14, new_desc_blocks = 31
The filesystem on /dev/mapper/centos-root is now 63208448 blocks long.
ちょっと煩雑ですが、落ち着いてやれば特に問題なくできるはずです。