This post has been republished via RSS; it originally appeared at: New blog articles in Microsoft Community Hub.
こんにちは。日本マイクロソフト SQL Server サポートチームです。
今回は、Azure の SQL VM(SQL Server on Windows Server) のディスク拡張について、よくお問い合わせいただく以下の内容についてご案内します。
【本ブログで紹介させていただく内容】
A. SQL 仮想マシンのディスクを拡張する方法
B. SQL 仮想マシンからディスク拡張ができない
C. ディスク拡張を拡張したが拡張できない
A. SQL 仮想マシンのディスクを拡張する方法
Azure Marketplace から SQL Server のライセンス込みの仮想マシンをデプロイすると、OS 上のディスクが記憶域プール(SQLVMStoragePoolX)で構成されます。
SQL仮想マシンのストレージを拡張したい場合は、この記憶域プールを拡張する必要があります。
図.記憶域プール
記憶域プールの拡張は以下のいずれかの方法で実施します。
① SQL 仮想マシンからの拡張
② 手動での記憶域プールのディスク拡張
① SQL 仮想マシンからの拡張
[前提条件]
・SQL Server IaaS Agent をフル管理モードで導入している。
SQL Server IaaS Agent 拡張機能とは (Windows) - SQL Server on Azure VMs | Microsoft Learn
・本ブログ記事執筆現在(2023/3/17)Premium ディスクがサポートされているインスタンスタイプを利用している。
※ Premium ディスクがサポートされていない場合は以下のようにメッセージが表示されます。
・本ブログ記事執筆現在(2023/3/17)、SQL 仮想マシンから拡張ができるのは、Premium ディスクのみになります。
※ Ultra ディスクの場合は以下のようにメッセージが表示されます。
図.SQL 仮想マシン ストレージ構成
上記の前提条件を満たしてない場合は、「② 手動での記憶域プールへディスク拡張」を参照し、拡張ください。
[拡張手順]
- Azure ポータルから「SQL 仮想マシン」を開きます。
- 拡張対象のサーバーを選択します。
- 設定の中の「ストレージ構成」を選択します。
図.SQL 仮想マシン
4. 拡張したいドライブの「構成」を選択します。
図.SQL 仮想マシン ストレージ構成
5. 拡張したいディスクのサイズを選択し、「適用」を選択します。
※ Premium ディスクで構築した場合は、プルダウンに Premium ディスクが表示されます。
図.SQL 仮想マシン ストレージ構成
6. 拡張されたことを確認します。
図.SQL 仮想マシン ストレージ構成
SQL Server VM のストレージを構成する - SQL Server on Azure VMs | Microsoft Learn
② 手動での記憶域プールのディスク拡張
手動での記憶域プールのディスク拡張は以下の流れで拡張します。
[拡張の流れ]
- Azure ポータルからディスクを追加します。
- OS にログインします。
- 記憶域プールにディスクを追加します。
- 仮想ディスクを拡張します。
- 仮想ディスクのボリュームを追加します。
手順の詳細については、下記 URL の「方法 1 : 記憶域プールに新規のディスクを追加し、仮想ディスクおよびボリュームを拡張する」の項目をご参照ください。
Azure Windows VM で記憶域スペースを拡張する | Japan Azure IaaS Core Support Blog (jpaztech.github.io)
B. SQL 仮想マシンからディスク拡張ができない
Azure Marketplace から SQL Server のライセンス込みの仮想マシンをデプロイ後に、SQL Server を再インストールし、その後 SQL 仮想マシンからディスクを拡張できなくなったというお問い合わせをいただくことがあります。
Azure ポータルの SQL 仮想マシンのディスク拡張に表示されるドライブは、 SQL Server の[データベースの既定の場所]のデータとログのファイル配置先の情報を読み取って表示しています。
図.SQL Server インスタンスのプロパティ
そのため、SQL Server を再インストールした際に、C ドライブなど記憶域プールで構成されていないドライブを設定した場合、Azure ポータルから以下のように拡張ができません。
図.SQL 仮想マシン ストレージ構成
[対処方法]
SQL Server の既定のファイルの配置先を、記憶域プールで構成されたドライブに変更します。
既定のファイルの配置先の変更方法については、下記 URL をご参照ください。
こちらを変更後も、Azureポータルの画面に反映されない場合は、 VM を再起動してください。
データ ファイルとログ ファイルの既定の場所の表示または変更 - SQL Server | Microsoft Learn
図.SQL Server インスタンスのプロパティ
C. ディスク拡張を拡張したが拡張できない
改めてにはなりますが、Azure Marketplace から SQL Server のライセンス込みの仮想マシンをデプロイすると、OS 上のディスクが記憶域プールで構成されます。
記憶域プールで構成されたドライブを拡張する際は、ディスクの追加が必要になります。
OS についている既存のディスクを追加した場合、以下のように表示され既存のディスクで拡張した領域で記憶域プールのドライブを拡張することができません。
図.既存のディスク拡張前のOSのディスクの状態(対象のドライブ:F ドライブ)
図.既存のディスク拡張後のOSのディスクの状態(対象のドライブ:F ドライブ)
[対処方法]
既存のディスクを拡張した場合は、記憶域プールの作り直しが必要となります。
一例にはなりますが、以下のような方法で作り直しをします。
① 新規にデータディスクを作成、追加
- Azure Portal にログインしてVM の[概要] ページを表示し、左ペインのメニューより[ディスク] を選択します。
- [+ 新しいディスクを作成し接続する] を選択します。
- [ディスク名]、[ストレージの種類]、[サイズ] 欄を入力し、データディスクを新規作成します。
※サイズは最終的に必要なディスクのサイズを指定します。
図.データディスクの作成
4. [保存] を選択します。
5. 管理者ユーザにてVM にログインし、PowerShell を起動します。
6. New-StoragePool コマンドを使用して記憶域プールを作成します。
※既存と同じストレージプールの名称は使用できないため[SQLVMStoragePool2]など任意の名前を設定します。
実行例1:
// すべてのディスクを使用して記憶域プールを作成する場合
New-StoragePool –FriendlyName [記憶域プール名] –StorageSubsystemFriendlyName “Windows Storage*” –PhysicalDisks (Get-PhysicalDisk –CanPool $True)
例)
New-StoragePool –FriendlyName SQLVMStoragePool2 –StorageSubsystemFriendlyName “Windows Storage*” –PhysicalDisks (Get-PhysicalDisk –CanPool $True)
スタンドアロン サーバーに記憶域スペースを展開する | Microsoft Learn
7. New-VirtualDisk コマンドを使用して仮想ディスクを作成します。
※既存と同じ仮想ディスク名は使用できないため[SQLVMVirtualDisk2]など任意の名前を設定します。
実行例:
New-VirtualDisk -FriendlyName [仮想ディスク名] -StoragePoolFriendlyName [記憶域プール名] -ProvisioningType Fixed -ResiliencySettingName Simple -UseMaximumSize -Interleave [ストライプサイズ(65536 または262144)]
例)
New-VirtualDisk -FriendlyName SQLVMVirtualDisk2 -StoragePoolFriendlyName SQLVMStoragePool2 -ProvisioningType Fixed -ResiliencySettingName Simple -UseMaximumSize -Interleave 65536
8. Get-VirtualDisk コマンドを使用して新規ボリューム作成およびドライブ文字を割り当てます。
※コマンドを実行した際にフォーマットを確認するウィンドウが表示された場合、OK ボタンを選択してください。
実行例:
Get-VirtualDisk –FriendlyName [仮想ディスク名] | Get-Disk | Initialize-Disk –Passthru | New-Partition -DriveLetter [ドライブ文字] –UseMaximumSize | Format-Volume -NewFileSystemLabel [ドライブ名] -Force
例)
Get-VirtualDisk –FriendlyName SQLVMVirtualDisk2 | Get-Disk | Initialize-Disk –Passthru | New-Partition -DriveLetter D –UseMaximumSize | Format-Volume -NewFileSystemLabel SQLVMDATA -Force
② 新規のディスクにファイルをコピーして、SQL Server サービスを起動
- データドライブおよび ログドライブ配下のファイルを全て同一ディレクトリ構造で、新規のディスクにコピーします。
コマンド)
robocopy [src] [dst] /E /COPYALL /TEE /LOG:[logfile path]
例)
コピー元:X:\dir
コピー先:D:\dir
ログ出力先:コマンドプロンプトのカレントディレクトリにrobocopy.logという名前でログを出力
robocopy X:\dir D:\dir /E /COPYALL /TEE /LOG:robocopy.log
2. データドライブおよび ログドライブ配下のmdf 、ldf ファイルに「NT Service\MSSQLSERVER」ユーザのフルコントロールのアクセス権限を付与します。
※robocopy コマンドを使用した場合は不要です。
3. VM 上のコマンドプロンプトで以下のコマンドを実行し、サービスを開始して、問題なくデータベースにアクセスできることを確認します。
実行例:
net start MSSQLServer /y
net start SQLServerAgent /y
!!重要!!
移行の手順でもともとのディスクを削除するため必ずすべてのデータが正しくコピーできていることを確認します。
③ 不要なデータディスクを削除
- 管理者ユーザにてVM にログインし、Server Manager を起動します。
- 左ペインより[File and Storage Services] を選択します。
- 表示されるメニューより[Storage Pools] を選択します。
- [STORAGE POOLS]欄にて誤って拡張したディスクを含む記憶域プールを選択し、[VIRTUAL DISKS] 欄に表示される仮想ディスクを右クリック、[Detach Virtual Disk] を選択し、表示される画面にて[Yes] を選択します。
!!重要!!
手順Aの4-5でドライブレターやドライブ文字を変更したディスクを含む記憶域プールに対して操作を実施します。
新規に追加した記憶域プールに対して操作を実施するとデータが削除されます。
5. [VIRTUAL DISKS] 欄にて仮想ディスクを右クリック、[Delete Virtual Disk] を選択し、表示される画面にて[Yes] を選択します。
6. [PHYSICAL DISKS] 欄にてにMsft Virtual Disk を右クリックし、[Remove Disk] を選択し、表示される画面にて[Yes] を選択します。
7. Azure Portal にログインしてVM の[概要] ページを表示し、左ペインのメニューより[ディスク] を選択します。
8. 拡張したデータディスクをデタッチします。
図.ディスクのデタッチ
9. [保存] を選択します。
10. Azure ポータルまたはVM にログインしてOS を再起動します。
11. SQL Server サービスが起動して、問題なくデータにアクセスできることを確認します。
12. リソースグループよりデタッチしたディスクのリソースを削除します。