ESXi では VM のディスク(VMDKファイル)拡張は簡単にできます。
その VMKD 拡張後にゲスト側ではどうしたらよいか聞かれることが多いので
Linux ゲストを例として、ディスク拡張をやってみます。
VMの仮想ディスク拡張の考え方。
仮想ディスクのサイズ拡張は、VMだけでなくゲスト側でも作業が必要です。
下のレイヤから順に拡張作業することになります。
ちなみに、今回はの環境は・・・
- ESXi は、6.0 U1 。VMバージョンは 11。(vmx-11)
- VM では「準仮想化」の SCSI コントローラを使用している。
- ゲスト OS は、Oracle Linux 6.7。 (ただし仮想マシンのタイプは RHEL6)
- 拡張する VMDK は、VM の「ハードディスク 2」。ゲスト OS では /dev/sdb と認識されている。
- ゲスト OS では、ディスクは単一パーティション(/dev/sdb1)だけ。
- ゲスト OS では、/dev/sdb1 に ext4 ファイルシステムを作成している。
- /dev/sdb では、ゲスト OS での LVM は使用していない。
最初の状態を確認しておきます。
OS は、Oracle Linux 6.7 です。RHEL 6.x や CentOS 6.x でも同様な手順が使えるはずです。
[root@ol67-vm01 ~]# cat /etc/oracle-release
Oracle Linux Server release 6.7
パーティションを見てみます。
今回、拡張する VMDK は /dev/sdb で、パーティションは /dev/sdb1 です。
[root@ol67-vm01 ~]# cat /proc/partitions | grep sdb
8 16 10485760 sdb
8 17 10485744 sdb1
今回は sfdisk コマンドでパーティション拡張してみます。
sfdisk でも、初期状態を見ておきます。
※-uM は MB 表示、-uS はセクタ表示です。
[root@ol67-vm01 ~]# sfdisk -l -uM /dev/sdb
ディスク /dev/sdb: シリンダ数 10240、ヘッド数 64、32 セクタ/トラック
Units = 1048576 バイトをメガバイト、1024 バイトのブロック、0 から数えます
デバイス ブート 始点 終点 MiB #ブロック Id システム
/dev/sdb1 0+ 10239 10240- 10485744 83 Linux
/dev/sdb2 0 - 0 0 0 空
/dev/sdb3 0 - 0 0 0 空
/dev/sdb4 0 - 0 0 0 空
[root@ol67-vm01 ~]# sfdisk -l -uS /dev/sdb
ディスク /dev/sdb: シリンダ数 10240、ヘッド数 64、32 セクタ/トラック
ユニット = 512 バイトのセクタ、0 から数えます
デバイス ブート 始点 終点 #セクタ Id システム
/dev/sdb1 32 20971519 20971488 83 Linux
/dev/sdb2 0 - 0 0 空
/dev/sdb3 0 - 0 0 空
/dev/sdb4 0 - 0 0 空
ファイルシステムは ext4 にしています。だいたい 10 GB です。
[root@ol67-vm01 ~]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg_ol67min-lv_root
ext4 14G 1.7G 12G 14% /
tmpfs tmpfs 873M 0 873M 0% /dev/shm
/dev/sda1 ext4 477M 72M 376M 16% /boot
/dev/sdb1 ext4 9.8G 23M 9.2G 1% /u01
ファイルシステム上のファイルが読み取れることを確認しておきます。
[root@ol67-vm01 ~]# cat /u01/test.txt
abcd
efg
1. 仮想ディスク(VMDK)の拡張。
vSphere Web Client で作業します。
拡張したい VMDK を接続している VM の「設定の編集」の、
「仮想ハードウェア」→「ハードディスク 2」のサイズを増やします。
※逆に、サイズを縮小することはできません。
現状では、10GB です。
サイズを 20GB に増やしました。
VM のサマリ画面でも、容量が 20GB になったことがわかります。
2. パーティションの拡張。
これは、Linux ゲスト に直接ログインして作業します。
まず、ファイルシステムをアンマウントしておきます。
今回、/dev/sdb1 は、/u01 にマウントしています。
※ディレクトリやファイルをつかんでいるアプリケーションなどは停止しておく必要があります。
[root@ol67-vm01 ~]# umount /u01
この時点では、まだ VMDK のサイズ拡張が認識されていないはずです。
[root@ol67-vm01 ~]# cat /proc/partitions | grep sdb
8 16 10485760 sdb
8 17 10485744 sdb1
パーティションテーブルを、いったん再読み込みします。
[root@ol67-vm01 ~]# sfdisk -R /dev/sdb
VMDK の拡張が認識されます。
[root@ol67-vm01 ~]# cat /proc/partitions | grep sdb
8 16 20971520 sdb
8 17 10485744 sdb1
/dev/sdb1 パーティションを拡張します。
今回は、開始セクタ(sfdisk -l -uS 表示の「開始」)が 32 なので、
[root@ol67-vm01 ~]# sfdisk -l -uS /dev/sdb
ディスク /dev/sdb: シリンダ数 20480、ヘッド数 64、32 セクタ/トラック
ユニット = 512 バイトのセクタ、0 から数えます
デバイス ブート 始点 終点 #セクタ Id システム
/dev/sdb1 32 20971519 20971488 83 Linux
/dev/sdb2 0 - 0 0 空
/dev/sdb3 0 - 0 0 空
/dev/sdb4 0 - 0 0 空
32 セクタから末尾まで拡張してみます。
[root@ol67-vm01 ~]# echo '32,,' | sfdisk -uS /dev/sdb
現在、誰もこのディスクを使っていないかを調べます...
OK
ディスク /dev/sdb: シリンダ数 20480、ヘッド数 64、32 セクタ/トラック
古い場面:
ユニット = 512 バイトのセクタ、0 から数えます
デバイス ブート 始点 終点 #セクタ Id システム
/dev/sdb1 32 20971519 20971488 83 Linux
/dev/sdb2 0 - 0 0 空
/dev/sdb3 0 - 0 0 空
/dev/sdb4 0 - 0 0 空
新たな場面:
ユニット = 512 バイトのセクタ、0 から数えます
デバイス ブート 始点 終点 #セクタ Id システム
/dev/sdb1 32 41943039 41943008 83 Linux
/dev/sdb2 0 - 0 0 空
/dev/sdb3 0 - 0 0 空
/dev/sdb4 0 - 0 0 空
警告: ブート可能な基本パーティションがありません
LILO にとっては問題ありませんが、DOS MBR はこのディスクをブートできなく
なってしまいます。
新たなパーティションの書き込みに成功
パーティションテーブルを再読み込み中...
もし、DOS パーティションを作成または変更したならば -- たとえば /dev/foo7 、
dd(1) をつかって最初の 512 バイトをゼロにして下さい:
dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(詳細は fdisk(8)を見てください。)
この時点だと、まだ /dev/sdb1 に作成された ext4 のファイルシステムは拡張されていません。
[root@ol67-vm01 ~]# mount /u01
[root@ol67-vm01 ~]# df -hT /u01
Filesystem Type Size Used Avail Use% Mounted on
/dev/sdb1 ext4 9.8G 23M 9.2G 1% /u01
3. ファイルシステムの拡張。
引き続き、Linux ゲスト にて作業します。
いちおう、ファイルシステムをアンマウントしておきます。
[root@ol67-vm01 ~]# umount /u01
そして、ファイルシステムチェック(e2fsck)を実施した後に、
ファイルシステムを拡張(resize2fs )します。
[root@ol67-vm01 ~]# e2fsck -f /dev/sdb1
e2fsck 1.43-WIP (20-Jun-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sdb1: 12/655360 files (0.0% non-contiguous), 79664/2621436 blocks
[root@ol67-vm01 ~]# resize2fs /dev/sdb1
resize2fs 1.43-WIP (20-Jun-2013)
Resizing the filesystem on /dev/sdb1 to 5242876 (4k) blocks.
The filesystem on /dev/sdb1 is now 5242876 blocks long.
これで、ファイルシステムも 20GB に拡張されました。
[root@ol67-vm01 ~]# mount /u01
[root@ol67-vm01 ~]# df -hT /u01
Filesystem Type Size Used Avail Use% Mounted on
/dev/sdb1 ext4 20G 28M 19G 1% /u01
もともと配置していたファイルが読み取れています。
[root@ol67-vm01 ~]# cat /u01/test.txt
abcd
efg
Linux のディストリビューションや、LVM 利用の有無、ファイルシステムの種類によって
使用するツールやコマンドラインは変わりますが、このような流れで VM のディスク拡張が可能です。
また、実際にディスク拡張をする場合は、
事前に拡張対象ファイルシステムにあるデータのバックアップを取得しておくとよいと思います。
以上、VM のディスク拡張についてでした。