三蔵開発メモ

Web開発やインフラ関連のメモを共有します

KVMでHDDを追加する時のメモ

CentOSやRHL上で動かすKVMのHDD容量を追加する時の手順。

イメージファイルを増量

まずKVMを動かしているホスト機で、増やしたいVMのイメージを追加する。

$ qemu-img resize vmtest.img +10G

※vmtestというイメージに10G追加したい場合

fdiskでパーティションを増量

VM内にログインし、fdiskコマンドでdisk容量が増えているか確認。

$ssh vmtest
$fdisk -l
Disk /dev/vda: 21.5 GB, 21474836480 bytes
16 heads, 63 sectors/track, 41610 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000e180d

Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *           3        1018      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/vda2            1018       20806     9972736   8e  Linux LVM
Partition 2 does not end on cylinder boundary.

この場合は元が10Gでさらに10G足したので無事増えているので、/dev/vdaのパーティションを区切ります。

$fdisk /dev/vda
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
    switch off the mode (command 'c') and change display units to
    sectors (command 'u').

パーティション一覧を確認します。

Command (m for help): p
Disk /dev/vda: 21.5 GB, 21474836480 bytes
16 heads, 63 sectors/track, 41610 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000e180d

Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *           3        1018      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/vda2            1018       20806     9972736   8e  Linux LVM
Partition 2 does not end on cylinder boundary.

パーティションが2つあるので、3つ目に新たに追加します。

Command (m for help): n
Command action
e   extended
p   primary partition (1-4)
p
Partition number (1-4): 3

次にどこのcylinderから始めるかと聞かれるので、この場合は2つ目の最後20806から+1した20807を入力します。

First cylinder (1-41610, default 1): 20807
Last cylinder, +cylinders or +size{K,M,G} (20807-41610, default 41610): 41610

ラストはデフォルトの最後まででOKです。
またpコマンドで無事追加されたのを確認します。

Command (m for help): p

Disk /dev/vda: 21.5 GB, 21474836480 bytes
16 heads, 63 sectors/track, 41610 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000e180d

Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *           3        1018      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/vda2            1018       20806     9972736   8e  Linux LVM
Partition 2 does not end on cylinder boundary.
/dev/vda3           20807       41610    10485216   83  Linux

3つ目の追加したパーティションもLVMにします。

Command (m for help): t
Partition number (1-4): 3
Hex code (type L to list codes): 8e
Changed system type of partition 3 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/vda: 21.5 GB, 21474836480 bytes
16 heads, 63 sectors/track, 41610 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000e180d

Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *           3        1018      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/vda2            1018       20806     9972736   8e  Linux LVM
Partition 2 does not end on cylinder boundary.
/dev/vda3           20807       41610    10485216   8e  Linux LVM

無事変わったのを確認したらセーブして再起動します。

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
$reboot -h now

追加パーティションを物理Vol化&論理Vol拡張

再度VMに入り、追加パーティションを物理ボリューム化します。

$ssh vmtest
$pvcreate /dev/vda3
Physical volume "/dev/vda3" successfully created

追加されたか確認

$pvdisplay
--- Physical volume ---
PV Name               /dev/vda2
VG Name               vg_vmtestimg1
PV Size               9.51 GiB / not usable 3.00 MiB
Allocatable           yes (but full)
PE Size               4.00 MiB
Total PE              2434
Free PE               0
Allocated PE          2434
PV UUID               XCTuf9-07iA-iwnO-CAh0-QT0u-Temb-xymCGY

"/dev/vda3" is a new physical volume of "10.00 GiB"
--- NEW Physical volume ---
PV Name               /dev/vda3
VG Name
PV Size               10.00 GiB
Allocatable           NO
PE Size               0
Total PE              0
Free PE               0
Allocated PE          0
PV UUID               EZN6pR-s8OX-SY1f-faQq-y7T2-VJAe-cnPxgB

VG名を取得

$vgdisplay
--- Volume group ---
VG Name               vg_vmtestimg1
System ID
Format                lvm2
Metadata Areas        1
Metadata Sequence No  3
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               9.51 GiB
PE Size               4.00 MiB
Total PE              2434
Alloc PE / Size       2434 / 9.51 GiB
Free  PE / Size       0 / 0
VG UUID               Wfi6Mw-tK8R-SZmH-xOBm-mmuq-1bmL-hFn40B

VGを拡張&確認

$vgextend vg_vmtestimg1 /dev/vda3
Volume group "vg_vmtestimg1" successfully extended
$vgdisplay
--- Volume group ---
VG Name               vg_vmtestimg1
System ID
Format                lvm2
Metadata Areas        2
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                2
Act PV                2
VG Size               19.50 GiB
PE Size               4.00 MiB
Total PE              4993
Alloc PE / Size       2434 / 9.51 GiB
Free  PE / Size       2559 / 10.00 GiB
VG UUID               Wfi6Mw-tK8R-SZmH-xOBm-mmuq-1bmL-hFn40B

論理ボリューム名を確認

$lvdisplay
--- Logical volume ---
LV Path                /dev/vg_vmtestimg1/lv_root
LV Name                lv_root
VG Name                vg_vmtestimg1
LV UUID                JtIgxT-mBPj-LO1H-Uc9u-13t3-1gwX-Y11UUR
LV Write Access        read/write
LV Creation host, time dev-pfortune-img1, 2015-09-08 07:16:27 +0900
LV Status              available
# open                 1
LV Size                8.51 GiB
Current LE             2178
Segments               1
Allocation             inherit
Read ahead sectors     auto
- currently set to     256
Block device           253:0

論理ボリュームを追加

$lvextend -l +100%FREE /dev/vg_vmtestimg1/lv_root
Size of logical volume vg_vmtestimg1/lv_root changed from 8.51 GiB (2178 extents) to 18.50 GiB (4737 extents).
Logical volume lv_root successfully resized

$resize2fs /dev/vg_vmtestimg1/lv_root
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/vg_vmtestimg1/lv_root is mounted on /; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 2
Performing an on-line resize of /dev/vg_vmtestimg1/lv_root to 4850688 (4k) blocks.
The filesystem on /dev/vg_vmtestimg1/lv_root is now 4850688 blocks long.

centos7の場合は resize2fsではなく、xfs_growfsで拡張を行う

$xfs_growfs /dev/vg_vmtestimg1/lv_root

容量をdfコマンドで確認

$df
Filesystem           1K-blocks    Used Available Use% Mounted on
/dev/mapper/vg_vmtestimg1-lv_root
                    18968780 1115892  16889024   7% /
tmpfs                   961100       0    961100   0% /dev/shm
/dev/vda1               487652   73701    388351  16% /boot

追加されていれば無事終了です。