Amazon FSx for Windows File Server の Volume Shadow Copy 管理機能を試してみた

2021.05.04

しばたです。

現在のAmazon FSx for Windows File Server(以後FSx for Windows)はVolume Shadow Copy Service(VSS)に対応しておりShadow Copyを利用することが可能です。

(上記は機能提供時の弊社ブログです)

本記事ではこのVSS管理の各機能をもう少し深掘りして理解するために実際に試してみました。

やってみた

それでは早速試していきます。
環境としては以前公開した記事と同じ環境を使っています。

本記事ではFSx for Windows環境の構築手順については割愛します。
なんらかのFSx for Windowsのファイルシステムが存在し、リモート管理用Windows Serverが準備できているところがスタート地点です。

0. リモート管理コンソールへの接続

現時点でFSx for WindowsのVSS設定はマネジメントコンソールからは行えず、PowerShell Remotingを使ってCLIから行う必要があります。
こちらは前に重複排除を試した時と同様に所定のパラメーターを設定しEnter-PSSessionを実行することでFSx for Windowsのリモートコンソールにログインできます。

# PowerShell RemotingでFSxに接続
$cred = Get-Credential '<FSx管理者ユーザー名>'
$params = @{
    ComputerName = '<FSx for WindowsのPowerShellエンドポイント>'
    Credential = $cred
    ConfigurationName = 'FSxRemoteAdmin'
    SessionOption = (New-PSSessionOption -UICulture 'en-US')
}
Enter-PSSession @params

1. VSSの有効化

FSx for WindowsでVSSを有効にするにはSet-FsxShadowStorageSet-FsxShadowCopyScheduleコマンドを使います。

はじめにSet-FsxShadowStorage -Defaultでストレージ容量のうちVSSで使用する割合(デフォルト 10%)を設定します。
Set-FsxShadowCopySchedule -DefaultでVSSを取得するスケジュール(デフォルト 平日7:00 UTCと12:00 UTC)を追加します。

# デフォルト設定でVSSを有効にする (ストレージサイズの最大10%をVSSで使用)
PS > Set-FsxShadowStorage -Default

# デフォルトスケジュールの追加
PS > Set-FSxShadowCopySchedule -Default -Confirm:$false

Set-FsxShadowStorageはデフォルト値以外に-MaxSizeパラメーターを指定することでVSSが使う最大容量の割り当てを変更することができます。

# VSSの最大割り当て容量を変更 : 数値指定、パーセント指定のいずれかが可能
PS > Set-FsxShadowStorage -MaxSize "20%"

2. Shadow Copyスケジュールの取得と更新

VSSを取得するスケジュールはGet-FSxShadowCopyScheduleで確認できます。

# 現在のShadow Copyスケジュールを取得する
PS > Get-FSxShadowCopySchedule

スケジュールを更新したい場合はSet-FSxShadowCopyScheduleを使います。

このコマンドの使い方としては、通常のWindowsタスクスケジュールを作るためのNew-ScheduledTaskTriggerコマンドレットを使いTriggerオブジェクトを準備し-Scheduledtasktriggersパラメーターに引き渡してやれば良いのですが、機能制限されているリモートコンソール上ではNew-ScheduledTaskTriggerを呼び出せません。
このためローカルコンソール上でTriggerオブジェクトを用意しInvoke-Commandを使ってやる必要があります。

# Shadow Copyスケジュールを更新するにはローカルコンソールからコマンドを実行する
#  * 新しいスケジュールとなる Trigger オブジェクトを生成
$trigger1 = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Monday,Tuesday,Wednesday,Thursday,Friday -at 06:00
$trigger2 = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Monday,Tuesday,Wednesday,Thursday,Friday -at 18:00
#  * Set-FSxShadowCopySchedule をリモート実行してスケジュールを更新
$cred = Get-Credential '<FSx管理者ユーザー名>'
$params = @{
    ComputerName = '<FSx for WindowsのPowerShellエンドポイント>'
    Credential = $cred
    ScriptBlock = {
        # ここにリモートで実行するコマンドを記述。ローカルから変数を引き渡すため using スコープにする
        Set-FSxShadowCopySchedule -Scheduledtasktriggers $using:trigger1, $using:trigger2 -Confirm:$false
    }
    ConfigurationName = 'FSxRemoteAdmin'
    SessionOption = (New-PSSessionOption -UICulture 'en-US')
}
Invoke-Command @params

ちなみにスケジュールは一括更新(総入れ替え)となりますのでご注意ください。

スケジュールを削除したい場合はRemove-FSxShadowCopyScheduleを使います。
このコマンドには個別のスケジュールを指定する引数は無く、すべてのスケジュールを一括削除します。

# Shadow Copyスケジュールを削除する
PS > Remove-FSxShadowCopySchedule -Confirm:$false

もし誤ってスケジュールを削除してしまった場合は前項のSet-FsxShadowCopySchedule -Defaultを実行して復旧すると良いでしょう。

3. Shadow Copyの一覧を取得

取得したShadow Copyの一覧を取得するにはGet-FSxShadowCopiesを使います。

PS > Get-FSxShadowCopies

これはエクスプローラーから参照できる「以前のバージョン」と同じ情報となります。

4. 手動でShadow Copyを実行する

オンデマンドでShadow Copyを取得する場合はNew-FSxShadowCopyコマンドを使います。

PS > New-FSxShadowCopy

直近のShadow Copyを確認するとちゃんと取得できています。

# リモートコンソールだとデータのフィルターが面倒だったのでローカルから直近3件を取得
$params = @{
    ComputerName = '<FSx for WindowsのPowerShellエンドポイント>'
    Credential = $cred
    ScriptBlock = {
        Get-FSxShadowCopies
    }
    ConfigurationName = 'FSxRemoteAdmin'
    SessionOption = (New-PSSessionOption -UICulture 'en-US')
}
Invoke-Command @params | Sort-Object -Descending 'Creation Time' | 
    Select-Object -Property 'Shadow Copy ID', 'Creation Time' -First 3

5. Shadow Copyを削除する

古いShadow Copyを削除したい場合はRemove-FSxShadowCopiesコマンドを使います。
このコマンドでは以下の3パターンの引数指定が存在します。

# -Oldest パラメーターを指定すると最も古いShadow Copyを削除します。
PS > Remove-FSxShadowCopies -Oldest -Confirm:$false

# -ShadowCopyID パラメーターを使うと個別にShadow Copyを削除します。
PS > Remove-FSxShadowCopies -ShadowCopyID '{ABCDEF12-3456-7890-ABCD-EF1234567890}' -Confirm:$false

# -All パラメーターを指定するとすべてのShadow Copyを削除します。
PS > Remove-FSxShadowCopies -All

5. Shadow Copyのボリューム利用率を取得する

Get-FSxShadowStorageコマンドを使うとVSSがボリューム内でどの程度の容量を使用しているか取得できます。

PS > Get-FSxShadowStorage

取得しているプロパティ名から推測するに、おそらくWin32_ShadowStorageの値を返していると思われます。

これらはそれぞれ、

  • AllocatedSpace : 現在VSSで割り当て済みの容量(Byte)
  • UsedSpace : 現在VSSで使用中の容量(Byte)
  • MaxSpace : Set-FsxShadowStorageで指定した割り当て可能な最大容量(Byte)

とされています。

正直なところAllocatedUsedの違いがあまり良くわかっていないのですが、VSSのボリューム利用率が最大値を迎えても古いShadow Copyが順次消えていくだけなのであまり気にしなくもよいでしょう。

6. VSSの利用を止める

最後にRemove-FSxShadowStorageコマンドを使うと、既存のShadow Copy、Shadow Copyスケジュールをすべて削除し、ストレージの割り当ても解除します。

PS > Remove-FSxShadowStorage

終わりに

以上となります。

Shadow Copyスケジュールの更新や削除の方法がちょっと特殊ですが、それ以外の操作については割と直感的と感じました。

機能的にはこれくらいならWindows Server側で処理するのではなくAWS側でAPIを用意してくれると非常に嬉しいのですが、AWSとして将来的なサポートを考えると難しいところもあるのかなと思います。
VSSの設定自体はさほど頻繁に行うものでもないのでこのままでも問題は無いでしょう。

本記事がFSx for Windowsの管理をする方の役に立てば幸いです。