仮想マシン(KVM)のrootパーティションのディスク拡張をやってみた

# はじめに
KVM上で動かしている仮想マシン(Webサーバ)のrootパーティションの残り容量が少なくなったので拡張してみました。VMWAREの場合は仮想マシン全体の拡張をVMWare独自のものに変えるだけで他の操作は同じ。

# 環境
* ホスト
  - CentOS7
* 仮想マシン
  - CentOS6

# やること
- 仮想マシン全体の拡張
- 仮想マシンの新規パーティション(/dev/vda3)作成
- LVM拡張
  - 物理ボリューム(pv)登録
  - ボリュームグループ(vg)の拡張
  - 論理ボリューム(lv)の拡張
  - ファイルシステムの拡張

# 対象
仮想マシンのrootパーティション

```shell

root@webserver:~
# df -hT
Filesystem           Type   Size  Used Avail Use% Mounted on
/dev/mapper/vg_nagios-lv_root
                     ext4    18G   12G  4.3G  74% /
tmpfs                tmpfs  1.9G     0  1.9G   0% /dev/shm
/dev/vda1            ext4   477M  111M  341M  25% /boot

root@webserver:~
# ll /dev/vd*
brw-rw----. 1 root disk 252, 0 Nov  9 14:31 /dev/vda
brw-rw----. 1 root disk 252, 1 Nov  9 14:31 /dev/vda1
brw-rw----. 1 root disk 252, 2 Nov  9 14:31 /dev/vda2
```
### 補足
[qcow2だとサイズ拡張はできても縮小ははできないみたい](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/virtualization_deployment_and_administration_guide/sect-using_qemu_img-re_sizing_the_disk_image)

```
サイズを拡大および縮小できるのは raw 形式のイメージのみになります。
qcow2 バージョン 2 または qcow2 バージョン 3 イメージは拡張することはできますが、
縮小することはできません。
```

### fdiskについて
#### 表示
uはセクタ方式で数える。旧来のCHS方式ではないのでパーティションを表示する前にuを指定します。

```shell

root@webserver:~
# 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): u
Changing display/entry units to sectors

Command (m for help): p

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

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048     1026047      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/vda2         1026048    41943039    20458496   8e  Linux LVM
Partition 2 does not end on cylinder boundary.

```
# 仮想マシンのrootパーティションのディスク拡張をやってみた
## 仮想マシン全体を拡張

対象の仮想マシンを止めてから、拡大

```shell

[root@host3 ~]# qemu-img resize /var/lib/libvirt/images/web.qcow2 +50G
Image resized.

[root@host3 ~]# virsh start web
ドメイン web が起動されました

```

fdiskで+50GBの拡大確認！！

```shell

# fdisk /dev/vda
・
・
Command (m for help): u
Changing display/entry units to sectors

Command (m for help): p

Disk /dev/vda: 75.2 GB, 75161927680 bytes
```

## 新規パーティション(/dev/vda3)作成
全体を拡張したので、拡張した箇所をパーティションとして新規に作成する

startはvda2のend+1
endは最後まで

```shell

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 3
First sector (63-146800639, default 63): 41943040
Last sector, +sectors or +size{K,M,G} (41943040-146800639, default 146800639):
Using default value 146800639

Command (m for help): p

Disk /dev/vda: 75.2 GB, 75161927680 bytes
16 heads, 63 sectors/track, 145635 cylinders, total 146800640 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000723f9

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048     1026047      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/vda2         1026048    41943039    20458496   8e  Linux LVM
Partition 2 does not end on cylinder boundary.
/dev/vda3        41943040   146800639    52428800   83  Linux

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: 75.2 GB, 75161927680 bytes
16 heads, 63 sectors/track, 145635 cylinders, total 146800640 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000723f9

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048     1026047      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/vda2         1026048    41943039    20458496   8e  Linux LVM
Partition 2 does not end on cylinder boundary.
/dev/vda3        41943040   146800639    52428800   8e  Linux LVM

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

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

```

OS再起動後、/dev/vda3認識される

```shell

root@webserver:~
# ll /dev/vd*
brw-rw----. 1 root disk 252, 0 Nov  9 15:34 /dev/vda
brw-rw----. 1 root disk 252, 1 Nov  9 15:34 /dev/vda1
brw-rw----. 1 root disk 252, 2 Nov  9 15:34 /dev/vda2
brw-rw----. 1 root disk 252, 3 Nov  9 15:34 /dev/vda3
```

## LVM拡張
### 物理ボリューム(pv)登録
作成した/dev/vda3をpvとして登録

```shell

root@webserver:~
# pvcreate /dev/vda3
  Physical volume "/dev/vda3" successfully created
root@webserver:~
# pvdisplay
  --- Physical volume ---
  PV Name               /dev/vda2
  VG Name               vg_nagios
  PV Size               19.51 GiB / not usable 3.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              4994
  Free PE               0
  Allocated PE          4994
  PV UUID               mZC6NW-EAUH-geeH-NwJm-uMMY-tGAS-m5leuE

  "/dev/vda3" is a new physical volume of "50.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/vda3
  VG Name
  PV Size               50.00 GiB
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               T8UCNS-3yJI-ADDt-FQn2-7mLU-sw3M-gDEt1f

```
### ボリュームグループ(vg)の拡張
ボリュームグループ(vg)はpvをvgに追加することで拡張できる

```shell

root@webserver:~
# vgdisplay
  --- Volume group ---
  VG Name               vg_nagios
  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               19.51 GiB
  PE Size               4.00 MiB
  Total PE              4994
  Alloc PE / Size       4994 / 19.51 GiB
  Free  PE / Size       0 / 0
  VG UUID               4Az4wf-fVlM-50Ik-5uT0-iqFp-h2GP-e3Mo5S

root@webserver:~
# vgex  vg_nagios
vgexport  vgextend
root@webserver:~
# vgextend  vg_nagios /dev/vda3
  Volume group "vg_nagios" successfully extended

```

`Free  PE / Size       12799 / 50.00 GiB` 拡張OK

```
root@webserver:~
# vgdisplay
  --- Volume group ---
  VG Name               vg_nagios
  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               69.50 GiB
  PE Size               4.00 MiB
  Total PE              17793
  Alloc PE / Size       4994 / 19.51 GiB
  Free  PE / Size       12799 / 50.00 GiB
  VG UUID               4Az4wf-fVlM-50Ik-5uT0-iqFp-h2GP-e3Mo5S

```

### 論理ボリューム(lv)の拡張
論理ボリューム(lv)のサイズをボリュームグループ(vg)の最大サイズまで拡張する

```shell

root@webserver:~
# lvextend -l +100%FREE /dev/vg_nagios/lv_root
  Size of logical volume vg_nagios/lv_root changed from 17.51 GiB (4482 extents) to 67.50 GiB (17281 extents).
  Logical volume lv_root successfully resized.

```

### ファイルシステムの拡張
lvmを拡張した箇所はまだファイルシステムとして認識されていないので、ファイルシステムを拡張して使えるようにする

```shell

root@webserver:~
# resize2fs /dev/vg_nagios/lv_root
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/vg_nagios/lv_root is mounted on /; on-line resizing required
old desc_blocks = 2, new_desc_blocks = 5
Performing an on-line resize of /dev/vg_nagios/lv_root to 17695744 (4k) blocks.
The filesystem on /dev/vg_nagios/lv_root is now 17695744 blocks long.

root@webserver:~
# df -hT
Filesystem           Type   Size  Used Avail Use% Mounted on
/dev/mapper/vg_nagios-lv_root
                     ext4    67G   12G   51G  20% /
tmpfs                tmpfs  1.9G     0  1.9G   0% /dev/shm
/dev/vda1            ext4   477M  111M  341M  25% /boot
```

`/dev/mapper/vg_nagios-lv_root  ext4    18G   12G  4.3G  74% /`

# おわり
拡張完了！！LVMって便利ですね😃！！