インスタンスストアをOS起動時に自動マウント
実はこの方法がずっと分からなかったのですが、久しぶりにググってみたら、公式サイトに記事がありました。一連のベストプラクティスが掲載されていてありがたいですね。
起動時に自動マウントするスクリプトは2種類試してみました。
フォーマットは公式だとReFSになってますが、NTFSと比較してどうなのか、調査中です。
記憶域プールから仮想ボリュームを作る場合
公式に掲載されているソースで動かすと、「フォーマットしますか?」とダイアログが表示されてしまうため、若干変更を入れました。
automount1.ps1
if (!(Get-Volume -DriveLetter E)) {
$NVMe = Get-PhysicalDisk | ? { $_.CanPool -eq $True -and $_.FriendlyName -eq "NVMe Amazon EC2 NVMe"}
New-StoragePool –FriendlyName TempDBPool –StorageSubsystemFriendlyName "Windows Storage*" –PhysicalDisks $NVMe
New-VirtualDisk -StoragePoolFriendlyName TempDBPool -FriendlyName TempDBDisk -ResiliencySettingName simple -ProvisioningType Fixed -UseMaximumSize
Get-VirtualDisk –FriendlyName TempDBDisk | Get-Disk | Initialize-Disk –Passthru | New-Partition –UseMaximumSize | Format-Volume -FileSystem ReFS -AllocationUnitSize 65536 -NewFileSystemLabel TEMPDB-2 -Confirm:$false | Get-Partition | Add-PartitionAccessPath -AccessPath "E:"
#grant SQL Server Startup account full access to the new drive
$item = gi -literalpath "E:\"
$acl = $item.GetAccessControl()
$permission="NT SERVICE\MSSQLSERVER","FullControl","Allow"
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
$acl.SetAccessRule($rule)
$item.SetAccessControl($acl)
}
記憶域プールを使わず、そのままフォーマットして使う
今のところ記憶域プールを使う理由が見当たらないので、これでいいかなと思っています。
コメント行から下は、上のスクリプトと一緒です。
automount2.ps1
if (!(Get-Volume -DriveLetter E)) {
Get-Disk | Where-Object FriendlyName -eq "NVMe Amazon EC2 NVMe" | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -UseMaximumSize | Format-Volume -FileSystem ReFS -AllocationUnitSize 65536 -NewFileSystemLabel TEMPDB-2 -Confirm:$false | Get-Partition | Add-PartitionAccessPath -AccessPath "E:"
#grant SQL Server Startup account full access to the new drive
$item = gi -literalpath "E:\"
$acl = $item.GetAccessControl()
$permission="NT SERVICE\MSSQLSERVER","FullControl","Allow"
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
$acl.SetAccessRule($rule)
$item.SetAccessControl($acl)
}