VirtualBoxのゲスト CentOS 7 のVDIディスクとLVMを拡張

何番煎じか分かりませんが、VirtualBoxのゲストOS CentOS7 のディスクが容量不足になり、ようやくお鉢が回ってきました。

環境：

```
VirtualBox Host : Windows 10 (x86_64)
VirtualBox : 5.1.6
VirtualBox Guest : CentOS 7 (x86_64)
※ディスクはVDI形式, 8GB, 可変サイズ
```

拡張作業前：こんな感じで、8GBのVDI中に `/boot` で500MB, LVMで残り使っててその中にswapとrootが入ってました。

```
# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root  6.7G  6.5G  209M  97% /
...
/dev/sda1                497M  301M  197M  61% /boot
```

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

まずディスクを拡張します。参考資料通り、`VBoxManage modifyhd (VDIファイル) --resize (MB単位)` で一発です。32GBまで拡張してみました。

```
c:\Program Files\Oracle\VirtualBox>VBoxManage modifyhd "C:\(...)\xxxx.vdi" --resize 32768
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
```

参考資料：

- [VirtualBoxのゲストOSディスク拡張 - Qiita](http://qiita.com/takara@github/items/77182fe9d83142be5c5e)
  - http://qiita.com/takara@github/items/77182fe9d83142be5c5e
- [CentOS 7(XFS)でLVMディスク拡張でハマったこと - Qiita](http://qiita.com/fetaro/items/d7dc74262633ba474bc8)
  - http://qiita.com/fetaro/items/d7dc74262633ba474bc8
- [VirtualBox の仮想ディスクのサイズを変更する - Qiita](http://qiita.com/niwashun/items/f71b0b805a6f97b514ec)
  - http://qiita.com/niwashun/items/f71b0b805a6f97b514ec
- [VirtualBoxにおける仮想マシンの仮想ディスク容量を拡張するための手順](http://www.virment.com/extend-virtualbox-disk/)
  - http://www.virment.com/extend-virtualbox-disk/


# LVMパーティションの拡張

作業用にCentOSのLiveDVD isoを準備します。
https://www.centos.org/download/ -> ミラーを選んで、近場から `CentOS-7-x86_64-LiveGNOME-1511.iso` をDLします。
DLしたら、ゲストVMの設定でストレージのIDEに光学ドライブとして設定し、`Live CD/DVD` にチェックを入れ、VMを起動します。

LiveDVDが立ち上がったら、Terminalを開いて `sudo su -` してrootになります。
`lsblk` コマンドでブロックデバイスの一覧を確認すると、`/dev/sda2` としてパーティションが認識され、VG名やLV名もそのまま認識できてました。

![20160916_extends_vid_xfs01.png](https://qiita-image-store.s3.amazonaws.com/0/18618/aa89b103-79a6-9171-a348-f48f74a04021.png)

`/sbin/parted (デバイス名)` で GNU Parted を起動します。`unit MiB` で表示/サイズ指定単位を1048576バイト = 1MB単位に揃えます。(参考 : https://www.gnu.org/software/parted/manual/html_node/unit.html )
`print free` で空き状況も含めたパーティション一覧を表示してみると、以下のように7.6GBのLVMの後ろに、32GBの終わりまで空き容量が追加されていました。

![20160916_extends_vid_xfs02.png](https://qiita-image-store.s3.amazonaws.com/0/18618/86dcaad1-d886-c684-d795-d1e54a60c561.png)

ではLVMのパーティションを拡張します。今回使用した GNU Parted 3.1 では、一旦 `rm` コマンドで削除した後、`mkipart` コマンドで作り直します。以下の例では、終端を `100%` として指定することで、ディスクの終わりまで全て使い切ります。LVMパーティションの場合は、さらに `set (partition) lvm on` でLVMフラグをONにします。

![20160916_extends_vid_xfs03.png](https://qiita-image-store.s3.amazonaws.com/0/18618/9684cc41-e0d9-5e94-3e62-5551f5986ccd.png)

一度VMを再起動し、`fdisk -l /dev/sda` でパーティションを確認すると、以下のようにLVMパーティションが期待通りに拡張されたことを確認できました。
![20160916_extends_vid_xfs04.png](https://qiita-image-store.s3.amazonaws.com/0/18618/68fc0b4a-fe12-337d-8b27-3d0398ac5e80.png)

## GNU Parted の resize コマンドについて

今回GNU Partedでのパーティションリサイズ方法を調べていたら、`resize` コマンドで変更できるよ、という記事が複数見つかりました。

しかし、GNU Parted 2.4 以降では resize コマンドは削除されたようです。実際、今回使ったバージョンは 3.1 でしたので、最初これを知らずに `resize` コマンドを実行したらヘルプが表示されてしまい、困惑しました。調査の結果、上記の通り `rm -> mkpart` による作り直しで対応できました。

resizeコマンドの使用例 : CentOS6/RHEL6 まではこれが使えたらしい：

- [6.1.4. Resizing a Partition](https://www.centos.org/docs/5/html/5.2/Deployment_Guide/s2-disk-storage-parted-resize-part.html)
  - https://www.centos.org/docs/5/html/5.2/Deployment_Guide/s2-disk-storage-parted-resize-part.html
- [13.4. パーティションのサイズ変更](https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/s2-disk-storage-parted-resize-part.html)
  - https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/s2-disk-storage-parted-resize-part.html
- [Partedでパーティションサイズを変更する - ITmedia エンタープライズ](http://www.itmedia.co.jp/help/tips/linux/l0696.html)
  - http://www.itmedia.co.jp/help/tips/linux/l0696.html

GNU Parted 2.4 以降でresizeコマンドが使えなくなった：

- [linux - Parted has no 'resize' command available - Super User](http://superuser.com/questions/494911/parted-has-no-resize-command-available)
  - http://superuser.com/questions/494911/parted-has-no-resize-command-available
- [Parted User’s Manual: Command explanations](https://www.gnu.org/software/parted/manual/html_node/Command-explanations.html#Command-explanations)
  - https://www.gnu.org/software/parted/manual/html_node/Command-explanations.html#Command-explanations

# PV, LV, ファイルシステム(XFS)の拡張

LVMのパーティションが拡張できましたので、続いてPhysical Volume(PV)を拡張します。今回はPVが一個しか無いので何も考えずに `pvresize /dev/sda2` で一気に拡張してます。

![20160916_extends_vid_xfs05.png](https://qiita-image-store.s3.amazonaws.com/0/18618/507c9718-6fcb-ae88-1f33-73d5f67f130c.png)

続いてその中の `/dev/centos/root` Logical Volume(LV) を拡張します。これもまぁ、他にswapしか無いし、LVなんで、何も考えず `lvextend -l +100%FREE /dev/centos/root` で一気に拡張してます。

![20160916_extends_vid_xfs06.png](https://qiita-image-store.s3.amazonaws.com/0/18618/7b6504cc-67d1-7d79-e45b-1f9ba351365f.png)

ここまでくれば、後はファイルシステムの拡張です。XFSの場合、**マウント中に**  `xfs_growfs` で拡張します。ということで、以下のように一度適当な空ディレクトリ(今回は `/mnt` )にマウントしてから、拡張してます。

![20160916_extends_vid_xfs07.png](https://qiita-image-store.s3.amazonaws.com/0/18618/aaef7f78-c39b-5c5c-f647-b48d3e7b7624.png)

あとは念のため、`xfs_repair` コマンドでファイルシステムにエラーが無いかチェックしておきます。こっちはマウントしてたら使えないので、アンマウントしてます。

```
# umount /mnt
# xfs_repair -n /dev/centos/root
```

`-n` オプションでdry-runになりますが、特にエラーメッセージは出てませんでした。

これで完了です。VMをシャットダウンし、LiveDVDのisoを外して起動します。本来のディスクで起動した後、`lsblk`や`df`コマンドを確認すると、以下のように無事ディスクサイズの拡張に成功してました。

```
$ lsblk /dev/sda
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   32G  0 disk
├─sda1            8:1    0  500M  0 part /boot
└─sda2            8:2    0 31.5G  0 part
  ├─centos-root 253:0    0 30.7G  0 lvm  /
  └─centos-swap 253:1    0  820M  0 lvm  [SWAP]

$ df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   31G  6.4G   25G  21% /
```

参考資料：

- [partedコマンドでディスクを切る時の備忘録的な - Qiita](http://qiita.com/409_nu/items/69c5564794ff6fdc0fd6)
  - http://qiita.com/409_nu/items/69c5564794ff6fdc0fd6
- [group - How do i extend a partition with a LVM and the contained physical volume and logical volume? - Unix & Linux Stack Exchange](http://unix.stackexchange.com/questions/98339/how-do-i-extend-a-partition-with-a-lvm-and-the-contained-physical-volume-and-log)
  - http://unix.stackexchange.com/questions/98339/how-do-i-extend-a-partition-with-a-lvm-and-the-contained-physical-volume-and-log
- [CentOS6のパーティション容量をpartedで拡張する - Qiita](http://qiita.com/biatunky/items/85461d00be3b4bae7ea8)
  - http://qiita.com/biatunky/items/85461d00be3b4bae7ea8
- [parted で非インタラクティブにパーティションを切る - Qiita](http://qiita.com/ngyuki/items/93da394fd0847ed5155e)
  - http://qiita.com/ngyuki/items/93da394fd0847ed5155e
- [Parted User's Manual - 7. LVM and RAID](https://www.gnu.org/software/parted/manual/html_chapter/parted_7.html#SEC65)
  - https://www.gnu.org/software/parted/manual/html_chapter/parted_7.html#SEC65
- [12.2.2. XFS](https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/fsck-xfs.html)
  - https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/fsck-xfs.html