Azureの小ネタ (改)

~Azureネタを中心に、色々とその他の技術的なことなどを~

仮想マシンのディスクを拡張する Linux編

前回は、Windows 仮想マシンのディスクを拡張したので、今回はLinux 仮想マシンでも同様に拡張してみたいと思います。

各ディストリビューションによって挙動が違うことが予想されることから、UbuntuとCentOSでそれぞれ試してみたいと思います。

Ubuntu 14.04 LTS

最新ではありませんが、Long Term Support ということで 14.04 で試してみます。さくっとUbuntu Server 14.04 LTS で仮想マシンを作成し、追加のディスクをアタッチしておきます。以下の通り、Linux仮想マシンのルートパーティションは、Windowsと違い30GBと小容量です。

以下は df の結果(余分なもの除く)

azureuser@disktestubu:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        29G  946M   27G   4% /
/dev/sdc1        30G   44M   28G   1% /data

この時点で、パーティションの状況は以下の通り。

azureuser@disktestubu:~$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0  29.3G  0 disk
└─sda1   8:1    0  29.3G  0 part /
sdc      8:32   0    30G  0 disk
└─sdc1   8:33   0    30G  0 part /data

次に仮想マシンを停止した後、Update-AzureDiskで、OS/Dataディスクを30G → 256GB と増やし、再度起動します。 なんとOSディスクは勝手に拡張されてますが、Dataディスクのほうはそのままです。クラウド上の仮想マシンですから、ルートパーティションを外部から操作することは出来ませんし、アンマウントすることも出来ませんから、勝手に拡張されるのは悪いことではないかもしれません。

azureuser@disktestubu:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       252G 1003M  241G   1% /
/dev/sdc1        30G   44M   28G   1% /data

/dev/sdc も256GBに拡張されていることが分かりますが、パーティションは自動拡張されません。

azureuser@disktestubu:~$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0   256G  0 disk
└─sda1   8:1    0   256G  0 part /
sdc      8:32   0   256G  0 disk
└─sdc1   8:33   0    30G  0 part /data

次にパーティションを拡張します。拡張方法は、fdisk/parted などコマンドで行います。アンマウントできるなら、アンマウントしたほうがよいでしょう。ここではインストールされているparted 2.3 を使いマウントしたまま実施してみました。パーティションの拡張後は、resize2fsでファイルシステムのサイズを変更して完了です。

詳細は割愛しますが、parted (resizepart) -> reboot -> resize2fs でいけました。サイズを大きくしすぎるとresize2fsで時間がかかりますのでご注意を。あと、事後にe2fsck とかもしたほうがよいでしょう。

以下が拡張後のdfの結果です。パーティション拡張時、既存のデータについてどうなるか不明なので念のためバックアップはお勧めします。ファイル1つ置いておいたら、無事でしたけども。

azureuser@disktestubu:/$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       252G 1003M  241G   1% /
/dev/sdc1       252G   60M  242G   1% /data

CentOS 6.6

次にシャチカビリティ高めのCentOS 6.6で試してみます。Ubuntuの場合と同じく、仮想マシンを作成し、Dataディスクをアタッチしておきます。

[azureuser@disktestcent ~]$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        29G  2.4G   25G   9% /
/dev/sdc1        30G   44M   28G   1% /data

lsblkするとsdaには2つパーティションがあります。

[azureuser@disktestcent ~]$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0     11:0    1  4.3M  0 rom
sda      8:0    0   30G  0 disk
├─sda1   8:1    0   29G  0 part /
└─sda2   8:2    0 1000M  0 part

よく見るとスワップ用のパーティションぽいですが、AzureのCentOS仮想マシンには、デフォルトでスワップは設定されていませんので、盲腸のようなパーティション見たいです(不思議)

[azureuser@disktestcent ~]$ sudo parted /dev/sda print
Model: Msft Virtual Disk (scsi)
Disk /dev/sda: 32.2GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system     Flags
 1      1049kB  31.2GB  31.2GB  primary  ext4            boot
 2      31.2GB  32.2GB  1049MB  primary  linux-swap(v1)

ここは事前にさくっと消しておいて、仮想マシンを停止させます。同様にUpdate-AzureDisk で拡張します。

さてCentOSはUbutuのように勝手にルートパーティション(/dev/sda1)は拡張されません。またアンマウントできないため、必然的にマウントしたまま作業することになりますがいくつか問題がありました。

  • CentOS 6.6 の parted 2.1 には、resizepartコマンドがない
  • resizeコマンドはあるが、マウントしたままだとエラーが起きる
  • fdisk でやってみたら、二度と起動しなくなった(やりかたが間違ってた可能性もあり)

というわけで、resizepart コマンドがサポートされているparted が必要です。しょうがないので、parted 3.2をソースからビルドして対応しました。Development toolやいくつかの*-devel パッケージを定義インストールして対処してください。

Parted - GNU Project - Free Software Foundation

ちなみにUbuntuのpartedは2.3なのにreizepart コマンドがありますが、ソースからビルドした2.4にはresizepart コマンドが無くて難儀しました。バックポートしたんでしょうか。また、CentOS 7系はparted 3.1 が入っているらしいので多分そのままで問題ありません。

手順は同様に、parted (resizepart) -> reboot -> resize2fs でOKでした。

[azureuser@disktestcent ~]$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       252G  2.8G  237G   2% /

データディスクについてはOSディスク同様実施できるかと思います(力つきた)

以上