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ディスク同様実施できるかと思います(力つきた)

以上

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

2015年3月に、仮想マシンのOSディスク容量が127GBから緩和されています。詳細は以下のURLを参照していただくとして、最大1TBまで増加させることができます。

ただしポータル等から仮想マシンを作成すると、依然OSディスク容量は127GB(Windowsの場合)のままです。オンプレで作成したVHDをアップロードして使用する場合なら問題ありませんが、Azureで予め準備されているイメージを利用している場合、どうすればよいのでしょうか?

同時期にリリースされた Azure PowerShell v0.8.15(3月にリリースされた版)の履歴を見てみると、

github.com

なにやら、ResizedSizeInGB パラメータが追加されていますので、これで変更できるようです。

Add 'ResizedSizeInGB' pramater for the following cmdlets
Update-AzureDisk
Set-AzureOSDisk
Set-AzureDataDisk (DiskName parameter is also added along with ResizedSizeInGB)
続きを読む

仮想マシン(v1)に接続されているDisk一覧を表示する

仮想マシン (V1 = Azure Service Management = ASM) に接続されているディスク一覧を表示する必要があったので、さくっとスクリプトを書いてみました。

  • OSディスクは1つなので、そこからMediaLinkを取り出してUriを表示
  • データディスクは複数なので、ループしてMediaLinkを取り出してUriを表示

MediaLinkには色々と情報がつまっているので、必要ならそこから表示すればOKです。

$vms = Get-AzureVM

foreach($vm in $vms) {
    $name = $vm.Name
    Write-Host "$($name),os,$($vm.VM.OSVirtualHardDisk.MediaLink.AbsoluteUri)"
    foreach($disk in $vm.VM.DataVirtualHardDisks) {
        Write-Host "$($name),data,$($disk.MediaLink.AbsoluteUri)"
    }
}

実行結果は以下のような感じです。

hogevm,os,https://somestroage.blob.core.windows.net/vhds/hogevm-hogevm-2015-03-04.vhd
hogevm2,os,https://portalvhdskh5fdfasmnw2.blob.core.windows.net/vhds/hogevm2-hogevm2-2015-03-27.vhd
hogevm2,disk,https://portalvhdskh5fdfasmnw2.blob.core.windows.net/vhds/hogevm2-data-2015-03-27.vhd
fugavm,os,https://portalvhdskh5fdfasmnw2.blob.core.windows.net/vhds/fugavm-fugavm-2014-09-05.vhd
bakavm,os,https://portalvhdskh5fdfasmnw2.blob.core.windows.net/vhds/bakavm-bakavm-2014-09-05.vhd

以上