0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

インスタンスストアにTEMPDBを配置してみた 2

Posted at

インスタンスストアを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)
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?