Blog Post

SQL Server Support Blog
2 MIN READ

SQL 仮想マシンのディスク拡張

Katsuya_Ito's avatar
Katsuya_Ito
Icon for Microsoft rankMicrosoft
Mar 17, 2023

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

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

 

【本ブログで紹介する内容】

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

(B) SQL 仮想マシンからディスク拡張ができない場合の対処

(C) Managed Disk のサイズを増やしたが OS 上でディスク拡張できない場合の対処

 

 

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

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

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

 

図.記憶域プール

 

 

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

・方法①:  SQL 仮想マシンからの拡張

・方法②: 手動での記憶域プールのディスク拡張

 

 

・方法①: SQL 仮想マシンからの拡張

[前提条件]

・SQL Server がインストールされている Azure VM を SQL IaaS Agent 拡張機能に登録している。

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

・Premium ディスクがサポートされているインスタンスタイプを利用している。

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

 

・SQL 仮想マシンから拡張ができるのは、Premium ディスクのみになります。

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

 

 

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

 

[対処方法]

1. Azure Portal にて「SQL 仮想マシン」を開きます。

2. 拡張対象のサーバーを選択します。

3. 「設定」内の「Storage」を選択します。

 

4. 「MANAGEMENT」タブをクリックの上、拡張したいドライブの「構成」ボタンをクリックします。

 

5. 「ディスク」プルダウンで拡張したいサイズを選択し、「適用」をクリックします。

 ここで選択したサイズが既存のディスクサイズに追加される形で拡張されます。

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

 

6. ディスクが拡張されたことを確認します。

 

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

 

 

・方法②: 手動での記憶域プールのディスク拡張

以下の流れで拡張します。

[対処方法]

1. Azure ポータルからディスクを追加します。

2. OS にログインします。

3. 記憶域プールにディスクを追加します。

4. 仮想ディスクを拡張します。

5. 仮想ディスクのボリュームを追加します。

 

1~5 の手順の詳細は、下記ブログ内の「方法 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 Portal では以下のように表示され、拡張ができません。

 

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

 

 

[対処方法]

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

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

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

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

 

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

 

 

(C) Managed Disk のサイズを増やしたが OS 上でディスク拡張できない場合の対処

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

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

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

 

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

 

 

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

 

 

[対処方法]

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

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

 

・事前準備

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

 

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

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

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

 

2. 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 の不均衡が生じ、アプリケーションのパフォーマンスが低下する可能性があります。

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

 

3. 以下のコマンドを実行して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. [ディスク名]、[ストレージの種類]、[サイズ] 欄を入力し、データディスクを新規作成します。

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

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

 

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

5. 管理者ユーザにてVM にログインし、PowerShell を起動します。

6. New-StoragePool コマンドを使用して記憶域プールを作成します。

 ※既存と同じストレージプールの名称は使用できないため[SQLVMStoragePool2]など任意の名前を設定します。

 

// コマンド例 (すべてのディスクを使用して記憶域プールを作成する場合

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]

 

// サンプルコマンド

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

※上記は下記のように実行する場合の記載例です。

 コピー元:X:\dir

 コピー先:F:\dir

 ログ出力先:コマンドプロンプトのカレントディレクトリに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. 拡張したデータディスクをデタッチします。

図.ディスクのデタッチ

 

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

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

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

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

 

 

※本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。

Updated Sep 16, 2024
Version 8.0
No CommentsBe the first to comment