AzureのLinux VMにデータディスクを追加する方法|azコマンドでManaged Diskをアタッチしてparted・mkfs・fstabで永続化する実践手順

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Azure > AzureのLinux VMにデータディスクを追加する方法|azコマンドでManaged Diskをアタッチしてparted・mkfs・fstabで永続化する実践手順
「Azureに本番DBサーバーを立てたけど、データ領域とOSディスクを分けておかないとまずい」と感じているエンジニアは多いです。
オンプレミスではiSCSIや物理ドライブを増設しますが、AzureではManaged Diskをazコマンドで作成・アタッチするのが定石の流れです。

この記事では、AzureのLinux VMにデータディスクを追加し、parted・mkfs・fstabで永続マウントするまでの実践手順を解説します。Ubuntu 24.04 LTS / RHEL 9で動作確認済みです。
ディスクのオンラインサイズ変更方法とデタッチ・削除の手順も合わせて掲載します。

この記事のポイント

・ Managed Diskはaz disk createとaz vm disk attachの2コマンドでVMに追加できる
・ Linux側はlsblk→parted→mkfs→fstabの順に設定しUUIDでマウントを永続化する
・ テンポラリディスク(/dev/sdb)は再起動で内容が消えるため永続ストレージとして使わない
・ ディスクサイズはaz disk updateとgrowpartでオンライン拡張できる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

AzureのManaged DiskとOSディスク・データディスクの違い

AzureでLinux VMを起動すると、OSがインストールされた「OSディスク」が自動的にアタッチされます。データベースのデータ領域やアプリケーションのログ保存先には、OSディスクとは独立したデータディスクを追加するのがベストプラクティスです。

AzureのLinux VMで確認できるディスクの種類を整理します。

OSディスク(/dev/sda):OSのブート領域。VM削除時にデフォルトで一緒に削除される
テンポラリディスク(/dev/sdb):ホストのローカルSSDで高速だが、VM再起動・再デプロイで内容が消える。/mnt/resourceにマウントされる。永続ストレージとして使ってはいけない
データディスク(/dev/sdc以降):Managed Diskとして独立管理。VM削除後も保持でき、別VMにアタッチし直せる

Managed DiskにはSSD系の「Premium SSD」「Standard SSD」とHDD系の「Standard HDD」があります。本番DBにはPremium SSD v2、開発・検証環境ではStandard SSD LRSが一般的な選択です。

作業環境と前提条件

本記事の手順は以下の環境で動作確認しています。

・VM: Standard D2s_v3(Ubuntu 24.04 LTS)
・リソースグループ: myRG / リージョン: japaneast
・Azure CLI 2.61以降がインストール済み
・az loginまたはサービスプリンシパルでログイン済み

まず現在ログイン中のサブスクリプションを確認します。

$ az account show --query "{name:name, id:id}" -o table Name Id ---------------------- ------------------------------------ My Azure Subscription xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

azコマンドでManaged Diskを作成してVMにアタッチする

1. Managed Diskを作成する

データディスクはVMとは独立したリソースとして作成します。Standard SSD・100GiB・LRS(ローカル冗長)で作成する例です。

$ az disk create --resource-group myRG --name myDataDisk --size-gb 100 --sku StandardSSD_LRS --location japaneast

主なオプションを説明します。

--size-gb:ディスクサイズ(GiB)。4~65,536 GiBの範囲で指定できる
--sku:Premium_LRS / StandardSSD_LRS / Standard_LRS / UltraSSD_LRS から選択
--zone:可用性ゾーンに配置する場合は 1/2/3 を指定(省略するとゾーンなし)

作成完了後、ディスクのサイズとSKUを確認します。

$ az disk show --resource-group myRG --name myDataDisk --query "{sizeGb:diskSizeGb, sku:sku.name, state:diskState}" -o table SizeGb Sku State -------- ---------------- ----------- 100 StandardSSD_LRS Unattached

State が「Unattached」であれば、VMへのアタッチ前の正常な状態です。

2. 実行中のVMにアタッチする

az vm disk attach コマンドでVMにアタッチします。VMを停止しなくてもオンラインでアタッチできます。

$ az vm disk attach --resource-group myRG --vm-name myVM --name myDataDisk

アタッチ後に storageProfile.dataDisks を確認します。

$ az vm show --resource-group myRG --name myVM --query "storageProfile.dataDisks[].{name:name, lun:lun, sizeGb:diskSizeGb}" -o table Name Lun SizeGb ------------ ----- -------- myDataDisk 0 100

LUN(Logical Unit Number)はアタッチ順に割り振られます。LUN 0が/dev/sdcに対応するのが一般的ですが、Linux側でlsblkによる確認が確実です。

現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、Azureの学習をもっと体系的に進めたいなら、Azure実践ハンズオン講座をご覧ください。現役エンジニアが教える実務直結カリキュラムで、VM構築からインフラ管理まで一気に習得できます。

Linux側でディスクを認識・パーティション・フォーマットする

1. デバイス名を確認する

SSHでVMに接続し、lsblkでアタッチされたディスクを確認します。

$ lsblk -o NAME,SIZE,TYPE,MOUNTPOINT NAME SIZE TYPE MOUNTPOINT sda 30G disk ├─sda1 29G part / ├─sda14 4M part └─sda15 106M part /boot/efi sdb 16G disk └─sdb1 16G part /mnt/resource sdc 100G disk

sdcが100GiBでマウントポイントが空の状態で表示されれば、Managed Diskが正しく認識されています。パーティションやフォーマットがまだないため、続けてpartedで設定します。

2. partedでGPTパーティションを作成する

2TB以上のディスクはGPT(GUIDパーティションテーブル)が必要です。Azure上のManaged Diskは最大65,536 GiBまであるため、最初からGPTで作成しておくのが安全です。

$ sudo parted /dev/sdc --script mklabel gpt $ sudo parted /dev/sdc --script mkpart primary ext4 0% 100% $ sudo parted /dev/sdc --script print Model: Msft Virtual Disk (scsi) Disk /dev/sdc: 107GB Sector size (logical/physical): 512B/4096B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 107GB 107GB primary

--script フラグを付けることで、インタラクティブなプロンプトを出さずに実行できます。スクリプトやcronでの自動化にも使えます。

3. mkfsでext4にフォーマットする

パーティション /dev/sdc1 をext4でフォーマットします。

$ sudo mkfs.ext4 -L datadisk /dev/sdc1 mke2fs 1.47.0 (5-Feb-2023) Creating filesystem with 26213888 4k blocks and 6553600 inodes Filesystem UUID: a1b2c3d4-e5f6-7890-abcd-ef1234567890 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200 Allocating group tables: done Writing inode tables: done Creating journal (131072 blocks): done Writing superblocks and filesystem accounting information: done

-L datadisk でラベルを付けておくと、LABEL=datadisk 形式でのマウントも可能です。

fstabに登録して永続マウントする

1. UUIDを確認する

blkidコマンドでUUIDを確認します。デバイス名(/dev/sdc1)は再起動や再デプロイでずれることがあるため、UUIDをfstabに記載するのが正しいやり方です。

$ sudo blkid /dev/sdc1 /dev/sdc1: LABEL="datadisk" UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="ext4"

2. fstabに追記してマウントを永続化する

マウントポイントを作成し、/etc/fstabにエントリを追記します。

$ sudo mkdir -p /data $ echo "UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 /data ext4 defaults,nofail 0 2" | sudo tee -a /etc/fstab

nofail オプションは重要です。このディスクが見つからない場合でもOS起動を続行する設定で、テンポラリ障害でVMが起動不能になるのを防ぎます。fstabのオプションと永続マウントの仕組みはmount コマンドの使い方も合わせて確認してください。

fstabへの追記後、sudo mount -a でテストマウントします。

$ sudo mount -a $ df -h /data Filesystem Size Used Avail Use% Mounted on /dev/sdc1 98G 24K 93G 1% /data

エラーなく /data がマウントされれば設定完了です。再起動後も同じ状態になります。

ディスクのサイズをオンラインで拡張する

データ量が増えてディスクが足りなくなった場合、Managed Diskはオンライン(VM停止なし)でサイズを拡張できます。

1. Azure側でManaged Diskを拡張する

100GiBを200GiBに拡張する例です。

$ az disk update --resource-group myRG --name myDataDisk --size-gb 200

Azureのストレージレイヤーでサイズはすぐに変わりますが、Linux側のパーティションとファイルシステムは元のサイズのままです。

2. Linux側でパーティションとファイルシステムを拡張する

lsblkで新しいサイズが認識されているか確認してから、growpartとresize2fsで拡張します。

# Azureが新しいサイズを通知するまで数秒待つ $ lsblk /dev/sdc NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdc 8:32 0 200G 0 disk └─sdc1 8:33 0 100G 0 part /data # パーティションを拡張(アンマウント不要) $ sudo growpart /dev/sdc 1 CHANGED: partition=1 start=2048 old: size=209713152 end=209715199 new: size=419428319 end=419430366 # ファイルシステムをオンラインで拡張 $ sudo resize2fs /dev/sdc1 resize2fs 1.47.0 (5-Feb-2023) Filesystem at /dev/sdc1 is mounted at /data; on-line resizing required The filesystem on /dev/sdc1 is now 52428539 (4k) blocks long. # 拡張後を確認 $ df -h /data Filesystem Size Used Avail Use% Mounted on /dev/sdc1 197G 24K 187G 1% /data

ext4はresize2fsによるオンライン拡張に対応しています。マウントしたまま実行できるため、サービスを止める必要がありません。

データディスクをデタッチ・削除する

不要になったデータディスクはVMからデタッチしてから削除します。デタッチ前にLinux側でアンマウントとfstabの削除を行います。

# Linux側でアンマウントしてfstabの該当行を削除する $ sudo umount /data $ sudo vim /etc/fstab # UUID行を削除 # AzureからVMをデタッチする $ az vm disk detach --resource-group myRG --vm-name myVM --name myDataDisk # Managed Diskリソースを削除する $ az disk delete --resource-group myRG --name myDataDisk --yes

デタッチのみではManaged DiskリソースはAzure上に残り課金も継続します。不要なら必ず az disk delete で削除してください。

トラブルシュート

デバイスが /dev/sdc に現れない場合

アタッチ直後にlsblkで認識されない場合は、udevのイベントがまだ処理中のことがあります。

# カーネルにSCSIリスキャンを要求する $ sudo bash -c "echo "- - -" > /sys/class/scsi_host/host0/scan" $ lsblk

それでも表示されない場合は az vm show で storageProfile.dataDisks を確認し、LUNが正しく割り当てられているか検証します。

fstabの設定ミスでブートできなくなった場合

fstabに誤ったUUIDを記載した状態で再起動すると、Azureポータルの「シリアルコンソール」(VM → サポートとトラブルシューティング → シリアルコンソール)でアクセスして修正できます。

nofailオプションを付けていれば、ディスクが見つからなくてもOSは起動します。新規追加ディスクのfstabエントリには必ずnofailを付ける習慣にしてください。

まとめ

AzureのLinux VMにデータディスクを追加する手順をまとめます。
やりたいこと コマンド
Managed Diskを作成する az disk create --resource-group RG --name DISK --size-gb 100 --sku StandardSSD_LRS
VMにデータディスクをアタッチする az vm disk attach --resource-group RG --vm-name VM --name DISK
デバイス名を確認する lsblk -o NAME,SIZE,TYPE,MOUNTPOINT
GPTパーティションを作成する sudo parted /dev/sdc --script mklabel gpt
パーティションをext4でフォーマットする sudo mkfs.ext4 -L datadisk /dev/sdc1
UUIDを確認する sudo blkid /dev/sdc1
fstabに登録して永続マウントする sudo mount -a && df -h /data
Azure側でディスクサイズを拡張する az disk update --resource-group RG --name DISK --size-gb 200
パーティションをオンラインで拡張する sudo growpart /dev/sdc 1
ファイルシステムをオンラインで拡張する sudo resize2fs /dev/sdc1
データディスクをデタッチして削除する az vm disk detach ... && az disk delete ...
データベースやログ領域をOSディスクから分離することで、スナップショットやバックアップの粒度が上がり、ディスク拡張やVM切り替えが格段にやりやすくなります。Managed Diskはazコマンドだけで完結するため、TerraformやAnsibleなどのIaCツールとの相性も抜群です。

Azureの学習をもっと体系的に進めたいなら、Azure実践ハンズオン講座をご覧ください。現役エンジニアが教える実務直結カリキュラムで、VM構築からインフラ管理まで一気に習得できます。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。