KVMディスク拡張

KVMのディスクイメージを拡張します。今回はLVMを使用したマシンでディスク拡張を行います。10GB に +10GB して 20GB に拡張します。

## 1. 事前の確認

仮想マシンのディスクはこんな感じ。

```
# df -h
ファイルシス            サイズ  使用  残り 使用% マウント位置
/dev/mapper/centos-root   8.5G  6.5G  2.1G   76% /
devtmpfs                  485M     0  485M    0% /dev
tmpfs                     496M     0  496M    0% /dev/shm
tmpfs                     496M  7.1M  489M    2% /run
tmpfs                     496M     0  496M    0% /sys/fs/cgroup
/dev/vdb                  2.6T  1.6T 1016G   62% /storage
/dev/vda1                 497M  217M  280M   44% /boot
tmpfs                     100M     0  100M    0% /run/user/1000
```

## 2. ディスクイメージの拡張

まずは、仮想ホスト上のディスクイメージファイルを拡張する。
イメージのバックアップを取る。

```
# cp -a /var/lib/libvirt/images/water1.img{,.bak}
```

現状イメージの確認

```
# qemu-img info water01.img
image: water01.img
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 10G
```

10GBのイメージに10GBを追加

```
# qemu-img resize water01.img +10G
Image resized.
```

## 3. ディスクイメージの拡張

ここでマシンを起動し、以降仮想マシン上で操作する。
fdiskでディスクを編集

```
# fdisk /dev/vda

コマンド (m でヘルプ): p  #確認（セクタ単位であることも同時に確認）

ディスク /dev/vda: 128.8 GB, 128849018880 バイト
ヘッド 16, セクタ 63, シリンダ 249660, 合計 251658240 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x000d2e86

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/vda1   *        2048     1026047      512000   83  Linux
パーティション 1 は、シリンダ境界で終わっていません。
/dev/vda2         1026048    62914559    30944256   8e  Linux LVM
パーティション 2 は、シリンダ境界で終わっていません。

コマンド (m でヘルプ): d  #/dev/vda2を一旦削除する
パーティション番号 (1-4): 2

コマンド (m でヘルプ): p  #/dev/vda2が削除されたことを確認　

ディスク /dev/vda: 128.8 GB, 128849018880 バイト
ヘッド 16, セクタ 63, シリンダ 249660, 合計 251658240 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x000d2e86

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/vda1   *        2048     1026047      512000   83  Linux
パーティション 1 は、シリンダ境界で終わっていません。

コマンド (m でヘルプ): n  #拡張されたサイズで再び/dev/vda2を作成していく
コマンドアクション
   e   拡張
   p   基本パーティション (1-4)
p
パーティション番号 (1-4): 2
最初 セクタ (63-251658239, 初期値 63): 1026048
Last セクタ, +セクタ数 or +size{K,M,G} (1026048-251658239, 初期値 251658239):
初期値 251658239 を使います

コマンド (m でヘルプ): p  #作成されたことを確認

ディスク /dev/vda: 128.8 GB, 128849018880 バイト
ヘッド 16, セクタ 63, シリンダ 249660, 合計 251658240 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x000d2e86

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/vda1   *        2048     1026047      512000   83  Linux
パーティション 1 は、シリンダ境界で終わっていません。
/dev/vda2         1026048   251658239   125316096   83  Linux

コマンド (m でヘルプ): t  #フォーマットを「Linux LVM」に変更
パーティション番号 (1-4): 2
16進数コード (L コマンドでコードリスト表示): 8e
領域のシステムタイプを 2 から 8e (Linux LVM) に変更しました

コマンド (m でヘルプ): p  #フォーマットが「Linux LVM」になったことを確認。

ディスク /dev/vda: 128.8 GB, 128849018880 バイト
ヘッド 16, セクタ 63, シリンダ 249660, 合計 251658240 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O size (minimum/optimal): 512 bytes / 512 bytes
ディスク識別子: 0x000d2e86

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/vda1   *        2048     1026047      512000   83  Linux
パーティション 1 は、シリンダ境界で終わっていません。
/dev/vda2         1026048   251658239   125316096   8e  Linux LVM

コマンド (m でヘルプ): w  #ディスクの変更を保存
パーティションテーブルは変更されました！

ioctl() を呼び出してパーティションテーブルを再読込みします。

警告: パーティションテーブルの再読込みがエラー 16 で失敗しました: デバイスもしくはリソースがビジー状態です。
カーネルはまだ古いテーブルを使っています。新しいテーブルは
次回リブート時か、partprobe(8)またはkpartx(8)を実行した後に
使えるようになるでしょう
ディスクを同期しています。
```

マシンを再起動し、PVを拡張

```
# pvresize /dev/vda2
  Physical volume "/dev/vda2" changed
  1 physical volume(s) resized / 0 physical volume(s) not resized
```

PVが拡張されたことを確認

```
# pvscan
  PV /dev/vda2   VG centos          lvm2 [<19.51 GiB / 10.00 GiB free]
  Total: 1 [<19.51 GiB] / in use: 1 [<19.51 GiB] / in no VG: 0 [0   ]
```

拡張されたPV分、LVを拡張

```
# lvresize -L +10G /dev/centos/root
  Size of logical volume centos/root changed from <8.51 GiB (2178 extents) to <18.51 GiB (4738 extents).
  Logical volume centos/root successfully resized.
```

拡張されたLV分、ファイルシステムを拡張

```
# xfs_growfs /dev/centos/root
meta-data=/dev/mapper/centos-root isize=256    agcount=4, agsize=557568 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=2230272, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal               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 2230272 to 4851712
```

確認。拡張されたことが確認できる。

```
# df -h
ファイルシス            サイズ  使用  残り 使用% マウント位置
/dev/mapper/centos-root    19G  6.5G   13G   35% /
devtmpfs                  485M     0  485M    0% /dev
tmpfs                     496M     0  496M    0% /dev/shm
tmpfs                     496M  7.1M  489M    2% /run
tmpfs                     496M     0  496M    0% /sys/fs/cgroup
/dev/vdb                  2.6T  1.6T 1016G   62% /storage
/dev/vda1                 497M  217M  280M   44% /boot
tmpfs                     100M     0  100M    0% /run/user/1000
```