SQL 仮想マシンのディスク拡張
Published Mar 16 2023 11:03 PM 5,685 Views
Microsoft

こんにちは。日本マイクロソフト SQL Server サポートチームです。

 

今回は、Azure SQL VM(SQL Server on Windows Server) のディスク拡張について、よくお問い合わせいただく以下の内容についてご案内します。

 

【本ブログで紹介させていただく内容】

  1. SQL 仮想マシンのディスクを拡張する方法
  2. SQL 仮想マシンからディスク拡張ができない
  3. ディスク拡張を拡張したが拡張できない

 

 

A. SQL 仮想マシンのディスクを拡張する方法

 

Azure Marketplace から SQL Server のライセンス込みの仮想マシンをデプロイすると、OS 上のディスクが記憶域プール(SQLVMStoragePoolX)で構成されます。

SQL仮想マシンのストレージを拡張したい場合は、この記憶域プールを拡張する必要があります。

 

図.記憶域プール

Katsuya_Ito_0-1703461396853.png

 

 

記憶域プールの拡張は以下のいずれかの方法で実施します。

SQL 仮想マシンからの拡張

手動での記憶域プールのディスク拡張

 

SQL 仮想マシンからの拡張

 

[前提条件]

SQL Server IaaS Agent をフル管理モードで導入している。

  SQL Server IaaS Agent 拡張機能とは (Windows) - SQL Server on Azure VMs | Microsoft Learn

・本ブログ記事執筆現在(2023/3/17)Premium ディスクがサポートされているインスタンスタイプを利用している。

Premium ディスクがサポートされていない場合は以下のようにメッセージが表示されます。

Katsuya_Ito_1-1703461396854.png

 

・本ブログ記事執筆現在(2023/3/17)、SQL 仮想マシンから拡張ができるのは、Premium ディスクのみになります。

Ultra ディスクの場合は以下のようにメッセージが表示されます。

 

図.SQL 仮想マシン ストレージ構成

Katsuya_Ito_2-1703461396854.png

 

 

上記の前提条件を満たしてない場合は、「手動での記憶域プールへディスク拡張」を参照し、拡張ください。

 

[拡張手順]

  1. Azure ポータルから「SQL 仮想マシン」を開きます。
  2. 拡張対象のサーバーを選択します。
  3. 設定の中の「ストレージ構成」を選択します。

 

図.SQL 仮想マシン

Katsuya_Ito_3-1703461396855.png

 

 4. 拡張したいドライブの「構成」を選択します。

 

図.SQL 仮想マシン ストレージ構成

Katsuya_Ito_4-1703461396855.png

 

 5. 拡張したいディスクのサイズを選択し、「適用」を選択します。

 ※ Premium ディスクで構築した場合は、プルダウンに Premium ディスクが表示されます。

 

図.SQL 仮想マシン ストレージ構成

Katsuya_Ito_5-1703461396856.png

 

 6. 拡張されたことを確認します。

 

図.SQL 仮想マシン ストレージ構成

Katsuya_Ito_6-1703461396857.png

 

 

SQL Server VM のストレージを構成する - SQL Server on Azure VMs | Microsoft Learn

 

手動での記憶域プールのディスク拡張

 

手動での記憶域プールのディスク拡張は以下の流れで拡張します。

 

[拡張の流れ]

  1. Azure ポータルからディスクを追加します。
  2. OS にログインします。
  3. 記憶域プールにディスクを追加します。
  4. 仮想ディスクを拡張します。
  5. 仮想ディスクのボリュームを追加します。

 

手順の詳細については、下記 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 インスタンスのプロパティ

Katsuya_Ito_7-1703461396858.png

 

 

そのため、SQL Server を再インストールした際に、C ドライブなど記憶域プールで構成されていないドライブを設定した場合、Azure ポータルから以下のように拡張ができません。

 

図.SQL 仮想マシン ストレージ構成

Katsuya_Ito_8-1703461396859.png

 

 

[対処方法]

SQL Server の既定のファイルの配置先を、記憶域プールで構成されたドライブに変更します。

既定のファイルの配置先の変更方法については、下記 URL をご参照ください。

 

こちらを変更後も、Azureポータルの画面に反映されない場合は、 VM を再起動してください。

 

データ ファイルとログ ファイルの既定の場所の表示または変更 - SQL Server | Microsoft Learn

 

図.SQL Server インスタンスのプロパティ

Katsuya_Ito_9-1703461396860.png

 

C. ディスク拡張を拡張したが拡張できない

 

改めてにはなりますが、Azure Marketplace から SQL Server のライセンス込みの仮想マシンをデプロイすると、OS 上のディスクが記憶域プールで構成されます。

記憶域プールで構成されたドライブを拡張する際は、ディスクの追加が必要になります。

OS についている既存のディスクを追加した場合、以下のように表示され既存のディスクで拡張した領域で記憶域プールのドライブを拡張することができません。

 

図.既存のディスク拡張前のOSのディスクの状態(対象のドライブ:F ドライブ)

Katsuya_Ito_10-1703461396861.png

 

 

図.既存のディスク拡張後のOSのディスクの状態(対象のドライブ:F ドライブ)

Katsuya_Ito_11-1703461396861.png

 

 

[対処方法]

既存のディスクを拡張した場合は、記憶域プールの作り直しが必要となります。

一例にはなりますが、以下のような方法で作り直しをします。

 

事前準備

事前準備として、現在の設定の確認と拡張したディスク上にあるドライブレターを一時的に変更するためSQL Server を止める必要があります。

 

  1. 管理者ユーザにてVM にログインし、拡張したディスクのドライブ文字・ドライブレターを確認

同じドライブ文字を指定するため、拡張したディスクのドライブ文字を確認し、キャプチャやテキストメモに残しておきます。

本手順は F ドライブに SQL Server のデータファイルなどを配置している構成を想定した手順としています。

 

  1. PowerShell を起動し、Get-Virtualdisk コマンドを利用して、仮想ディスクのストライプサイズを確認

ディスクを再作成する際に同じストライプサイズを設定する必要があるため、現在のストライプサイズを確認し、キャプチャやテキストメモに残しておきます。

 

実行例:

Get-Virtualdisk | ft friendlyName, interleave

 

friendlyName      interleave

------------      ----------

SQLVMVirtualDisk1      65536

SQLVMVirtualDisk2      65536

 

ご参考)ディスク ストライピング

https://learn.microsoft.com/ja-jp/azure/virtual-machines/premium-storage-performance#disk-striping

######## 抜粋 ########

ストライプ サイズ

ディスク ストライピングの重要な構成の 1 つに、ストライプ サイズがあります。

ストライプ サイズ (ブロック サイズ) は、アプリケーションがストライプ ボリュームで対応できるデータの最小チャンクです。

構成するストライプ サイズは、アプリケーションの種類と要求パターンによって異なります。

間違ったストライプ サイズを選択すると、IO の不均衡が生じ、アプリケーションのパフォーマンスが低下する可能性があります。

####################

 

  1. 以下のコマンドを実行してSQL Server のサービスを停止

 

実行例:

net stop SQLServerAgent /y

net stop MSSQLServer /y

※既定のインスタンス以外を使用している場合には、サービス名が異なるため適切なサービスを確認の上停止します。 

 

!!重要!!

以降の操作で既存ディスクのドライブレター、ドライブ名を変更します。

SQL Server 以外に当該ドライブにアクセスするアプリケーションが存在する場合は、それらのアプリケーションも事前に停止します。

 

4.[Administrative Tools]->[Computer Management]->[Disk Management]から、今回修正するドライブを選択して右クリックし、[Change Drive Letter and Paths …]から任意のドライブレターに変更する

例)既存のドライブレターがFの場合、ドライブレターをXなどに変更します。

 

5.[Administrative Tools]->[Computer Management]->[Disk Management]から、今回修正するドライブを選択して右クリックし、[Properties]から[General]タブのドライブ文字を任意の名前に変更する

例)既存のドライブ文字がSQLVMDATAの場合、ドライブレターをSQLVMDATA2などに変更します。

 

新規にデータディスクを作成、追加

 

  1. Azure Portal にログインしてVM  の[概要] ページを表示し、左ペインのメニューより[ディスク] を選択します。
  2.  [+ 新しいディスクを作成し接続する] を選択します。
  3. [ディスク名]、[ストレージの種類]、[サイズ] 欄を入力し、データディスクを新規作成します。

  ※サイズは最終的に必要なディスクのサイズを指定します。

 

図.データディスクの作成

Katsuya_Ito_12-1703461396863.png

 

 

 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 ボタンを選択します。

    ※ドライブレターは最終的に使用したい値(本手順の構成では F )を指定します。

 

実行例:

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 F UseMaximumSize | Format-Volume -NewFileSystemLabel SQLVMDATA -Force

 

 

② 新規のディスクにファイルをコピーして、SQL Server サービスを起動

 

  1. ドライブレターを変更した仮想ディスクのデータ(データフォルダおよび ログフォルダ配下のファイルなど)を全て同一ディレクトリ構造で、新規の仮想ディスクにコピーします。

コピー方法は任意ですが、一例として robocopy を使用した例を記載します。

※実際のパスなどは適宜読み替えて実施します。

 

コマンド例)

robocopy [src] [dst] /E /COPYALL  /TEE /LOG:[logfile path]

 

例)

コピー元:X:\dir

コピー先:F:\dir

ログ出力先:コマンドプロンプトのカレントディレクトリにrobocopy.logという名前でログを出力

 

robocopy X:\dir F:\dir /E /COPYALL  /TEE /LOG:robocopy.log

robocopy | Microsoft Learn

 

 2. データフォルダおよび ログフォルダ配下のmdf 、ldf ファイルに「NT Service\MSSQLSERVER」ユーザのフルコントロールのアクセス権限を付与します。

    ※robocopy コマンドを使用した場合は不要です。

  ※既定のインスタンス以外を使用している場合や SQL Server サービスの起動アカウントを変更している場合には、「NT Service\MSSQLSERVER」部分を実際の SQL Server サービス起動アカウントに読み替えて作業します。

 

 3. VM 上のコマンドプロンプトで以下のコマンドを実行し、サービスを開始して、問題なくデータベースにアクセスできることを確認します。

 

実行例:

net start MSSQLServer /y

net start SQLServerAgent /y

※既定のインスタンス以外を使用している場合には、サービス名が異なるため適切なサービスを確認の上起動します。  

 

!!重要!!

以降の手順でもともとのディスクを削除するため必ずすべてのデータが正しくコピーできていることを確認します。

 

③ 不要なデータディスクを削除

 

  1. 管理者ユーザにてVM にログインし、Server Manager を起動します。
  2. 左ペインより[File and Storage Services] を選択します。
  3. 表示されるメニューより[Storage Pools] を選択します。
  4. [STORAGE POOLS]欄にて誤って拡張したディスクを含む記憶域プールを選択し、[VIRTUAL DISKS] 欄に表示される仮想ディスクを右クリック、[Detach Virtual Disk] を選択し、表示される画面にて[Yes] を選択します。

 !!重要!!

 ドライブレターやドライブ文字を変更したディスクを含む記憶域プールに対して操作を実施します。

 新規に追加した記憶域プールに対して操作を実施するとデータが削除されます。

 

 5. [VIRTUAL DISKS] 欄にて仮想ディスクを右クリック、[Delete Virtual Disk] を選択し、表示される画面にて[Yes] を選択します。 

 6. [PHYSICAL DISKS] 欄にてにMsft Virtual Disk を右クリックし、[Remove Disk] を選択し、表示される画面にて[Yes] を選択します。

 7. Azure Portal にログインしてVM  の[概要] ページを表示し、左ペインのメニューより[ディスク] を選択します。

 8. 拡張したデータディスクをデタッチします。

 

図.ディスクのデタッチ

Katsuya_Ito_13-1703461396864.png

 

 

 9. [保存] を選択します。

 10. Azure ポータルまたはVM にログインしてOS を再起動します。

 11. SQL Server サービスが起動して、問題なくデータにアクセスできることを確認します。

 12. リソースグループよりデタッチしたディスクのリソースを削除します。

Co-Authors
Version history
Last update:
‎Dec 24 2023 03:53 PM
Updated by: