DataSyncがコピーする特殊ファイルと重複排除の検証

目的・やりたいこと

DataSyncでコピーする場合に以下2点を検証

  • DataSyncがコピーする特殊ファイルとは何か?
  • 最初から重複排除が掛かっていた場合にどんな動きになるか?

背景

お客さんからDataSyncを行う環境について、以下の仕様を伺いました。

オンプレのWindows Server 2012 R2のファイルサーバから、DataSyncを使用して、FSx for Windows Serverへ移行する。
AWS環境にセルフマネージドAD(MSAD)を使用するFSxとDataSyncを構築して、データ移行を行う。
既存ファイルサーバにはDataSync Agentをインストールする。
既存ファイルサーバとFSxは、Direct Connect(DX)を使用して通信を行う。
既存ファイルサーバは重複排除の機能が有効になっている。

以上の仕様をもとに、以下2点質問を受けたため、これに回答すべく検証作業を行います。
ドキュメントに記載のある、AWS DataSyncがコピーする特殊ファイルとは何が該当しますか?
例えばシンボリックリンクの事なのかと考えたのですが、下記にはSMB ファイル共有、FSx for Windows File Server ONTAP の間でコピーする場合、シンボリックリンクは対象外となっています。
https://docs.aws.amazon.com/ja_jp/datasync/latest/userguide/special-files-copied.html
どのようなものが特殊ファイルに該当するのでしょうか?
重複排除が掛かっていた場合についてどんな動きになりますか?

対象者

普段DataSyncで同期運用している(中級者~上級者)

対象となる技術

  • DataSync
  • FSx
  • SMB
  • 重複排除
  • AD(MSAD)

条件(導入にあたって前提事項)

  • Windows Server 2012 R2 で役割としてファイルサーバ(重複除外有効)を追加
  • オンプレ+DX環境は再現しにくいので、擬似的にVPCのEC2上にファイルサーバを立て、VPCピアリングで繋いでDataSyncを行う
  • リモートでインターネット経由で簡易的にアクセスできるよう、DataSync対象をすべてグローバルIPを付与してパブリックサブネットに置いているが、本来はできればプライベートサブネットに置いてやりとりすべき
  • SMBの基礎知識

参考URL

注意事項

  • VPCピアリングとそれに伴うルーティング設定の追加は忘れがち
  • ファイルサーバーとFSxのログイン(AD)アカウントを混同しないように
  • 転送設定は[所有権またはACLをコピーしないでください]に変更する

作業の流れ

概要図

事前作業

参考URLに従い、VPCエンドポイントやディレクトリサービス(MSAD)は事前構築済み

検証手順

1.まず、以下のようにしてFSx for Windowsファイルサーバーを構築

これがステータスがずっと「作成」のままでなかなか「利用可能」にならない(実際20分くらいかかりました)

2.ディレクトリは事前作成済み
ディレクトリは色々活用場面あるので、検証することが多い人は残しておくといいです)

DNSアドレスをドメイン参加のためにDNSサーバーに設定するためメモ

3.FSxにファイルを置きたいWindowsで、DNS設定をディレクトリのIPに設定

4.ドライブ共有コマンドの確認と実行
(毎回Zでやると被るので、たまにレター文字を変えるといいです)

アカウントはAdmin@ドメイン

>net use Z: \\amznfsxe4m7njon.nozaki.com\share
'amznfsxe4m7njon.nozaki.com' のユーザー名を入力してください: Admin@nozaki.com
amznfsxe4m7njon.nozaki.com のパスワードを入力してください:
コマンドは正常に終了しました。

Z ドライブとして認識

DataSyncは、エージェント⇨ロケーション⇨タスクの順番で設定する必要があります。

5.DataSyncエージェント on EC2の作成
DataSyncエージェントのAMIはあらかじめ用意されているため、「aws-datasync-」でAMIを検索
コミュニティAMIから発行日を確認し、最新(なるべく新しい)のAMIを選択

m5.2xlarge:最大 2,000 万個未満のファイルを転送する場合
m5.4xlarge:2,000万個を超えるファイルを転送する場合
(通常はm5.2xlargeで十分)

エージェントはこのあとURL接続する必要があるため、http://~で接続できるよう、あらかじめグローバルIPを付与しておきます(52.199.39.114)

6.DataSyncサービスエンドポイントの設定とエージェントとの連携

 

このHTTPアクセスに失敗する場合は、エージェントEC2が正しく作れていないか、SGでHTTPS443が許可されていないかのどっちか(80だけでなく443も許可されている必要がある)

無事エージェントEC2のURLにつながると、このアクティベーションキー取得画面になるので、[エージェントを作成する]をクリック

これでエージェントが完成したことでようやくDataSyncを利用する環境が整いました。

7.ロケーションの作成

⚫︎送信元
今回はこちらを参考にSMB(Windows File Server)をEC2上に構築しました。
【Windows】Windows Server 2022 ファイルサーバ構築手順
Windows Server 2016 でファイル共有サーバーを構築する (ファイル共有サービスの導入) (Windows Server Tips)

 

⚫︎送信先

パスは/share/になってないとマウントできないというエラーが出るので注意

ユーザー名はAdminにすること

8.タスクの作成

⚫︎送信元の設定

⚫︎送信先の設定

最後にタスクを実行(開始)

ところがここで尽くエラーが・・

エラー1:マウントできない

送信元のSMBサーバーのユーザー名かパスワードが間違っているので直した。

エラー2:ポート445が許可されていない

送信元のエージェント等のSGに445(SMB)が許可されていなかったため、追加

エラー3:接続がうまくいかない

これはこちらが参考になります。
Amazon VPC エンドポイントを使用して、AWS リージョンまたはアカウント全体で DataSync エージェントをアクティブ化するにはどうすればよいですか?

ソース環境と宛先環境との間で、次の接続およびネットワーク要件を設定する必要があります。

  1. ソース環境と宛先 VPC エンドポイント間のアクティブなネットワーク接続を設定します。たとえば、AWS Direct Connect、VPC ピアリング、またはトランジット VPC を使用して、この接続を設定します。
  2. ソース環境と宛先環境の間のプライベートネットワークアドレス空間に重複がないことを確認します。次に、CIDR ブロックを確認します。
  3. ソースサブネットと宛先サブネットの両方のルーティングテーブルエントリで、ネットワーク間のトラフィックが問題なく許可されていることを確認します。たとえば、VPC ピアリングを使用している場合は、ピアリング接続のルートテーブルを更新します。
  4. ソースネットワークと宛先ネットワークの間にファイアウォールがある場合は、次のことを許可する必要があります。

自分の場合はまさかのVPCピアリングをまだ作成していなかったというオチ
そりゃ通信できるわけない。ついでに双方のサブネット宛の通信がpeering宛になるようにルートテーブルを設定します。

これでようやくタスク成功

さてこれでようやく本題の検証に入ります。

特殊ファイルをDataSyncでコピーできるか?

AWS DataSyncによってコピーされたリンクとディレクトリによると、SMBファイル共有ではハードリンクとシンボリックリンクをサポートしておらず、タスクはエラーで完了するとのこと
タスクがエラーになると1個もコピーされずに終わるので、1つずつ調べていきます。
そういえばそもそもWindowsシンボリックリンクって作れるんだっけ?というので調べたら、方法がありました。
Windowsでシンボリックリンクを作る

C:\Users\Administrator>mklink
シンボリック リンクを作成します。

MKLINK [[/D] | [/H] | [/J]] リンク ターゲット

        /D          ディレクトリのシンボリック リンクを作成します。既定では、
                    ファイルのシンボリック リンクが作成されます。
        /H          シンボリック リンクではなく、ハード リンクを作成します。
        /J          ディレクトリ ジャンクションを作成します。
        リンク       新しいシンボリック リンク名を指定します。
        ターゲット    新しいリンクが参照するパス(相対または絶対)を指定します。
  1. ハードリンク
C:\Windows\system32>mklink /H C:\dev-share\aaaaa C:\Windows\setupact.log
Hardlink created for C:\dev-share\aaaaa <<===>> C:\Windows\setupact.log


「aaaaa」がsetupact.logのハードリンクです。

この状態でDataSyncタスク実行後、コピー先のshareフォルダを見ると、

フォルダもハードリンクもバッチリコピーされてます!

ついでにシステムファイルとショートカットもコピーされました。

2.シンボリックリンク
確かにシンボリックリンクファイルがあるとエラーになるようです。

ちなみにタスクを実行すると「起動中・・」というのが3分くらい続いた後にようやく結果が出ます。これ終了時刻が21:01となってますが嘘で、実際は21:04でした。

あとこの検証を続けていて困ったのが、立て続けにタスクを実行してDataSyncを実行すると、2回目も成功に終わるものの、なぜか共有フォルダにアクセスできなくなってしまうこと

なので気をつけるようにしたのは、転送設定の「所有権と許可」が最初[所有権とDACLをコピーする]になっているので、[所有権またはACLをコピーしないでください]に変更するようにしました。

データ重複除外の検証

データ重複除外だけだとわからなかったので、以下を参照してまずはドメインに参加することから始めました。
【初心者向け】構築したFSx for Windowsの設定をPowershellからやってみた

PS C:\Users\Admin> enter-pssession -ComputerName amznfsxgkhlkswb.nozaki.com -ConfigurationName FSxRemoteAdmin
[amznfsxgkhlkswb.nozaki.com]: PS>Enable-FSxDedup

ObjectId                 : \\?\Volume{284ffc03-8071-439e-9886-6cf3f89147f5}\
ChunkRedundancyThreshold : 100
DataAccessEnabled        : True
Enabled                  : True
ExcludeFileType          :
ExcludeFileTypeDefault   : {edb, jrs}
ExcludeFolder            :
InputOutputScale         : 0
MinimumFileAgeDays       : 3
MinimumFileSize          : 32768
NoCompress               : False
NoCompressionFileType    : {asf, mov, wma, wmv...}
OptimizeInUseFiles       : False
OptimizePartialFiles     : False
SavedSpace               : 0
UsageType                : Default
Verify                   : False
Volume                   : D:
VolumeId                 : \\?\Volume{284ffc03-8071-439e-9886-6cf3f89147f5}\


[amznfsxgkhlkswb.nozaki.com]: PS>Get-FSxDedupSchedule

Enabled    Type               StartTime              Days               Name
-------    ----               ---------              ----               ----
True       Optimization                                                 BackgroundOptimization
True       GarbageCollection  2:45 AM                Saturday           WeeklyGarbageCollection
True       Scrubbing          3:45 AM                Saturday           WeeklyScrubbing


[amznfsxgkhlkswb.nozaki.com]: PS>Get-FSxDedupJob
Microsoft.PowerShell.Cmdletization.Cim.CimJobException: No MSFT_DedupJob objects found with property '
'D:'.  Verify the value of the property and retry.
    + CategoryInfo          : OperationStopped: (Microsoft.Power...erty and retry.:String) [], Runtime
    + FullyQualifiedErrorId : Microsoft.PowerShell.Cmdletization.Cim.CimJobException: No MSFT_DedupJob
   ith property 'Volume' equal to 'D:'.  Verify the value of the property and retry.

[amznfsxgkhlkswb.nozaki.com]: PS>Get-FSxDedupStatus

ObjectId                           : \\?\Volume{284ffc03-8071-439e-9886-6cf3f89147f5}\
InPolicyFilesCount                 : 0
InPolicyFilesSize                  : 0
LastGarbageCollectionResult        :
LastGarbageCollectionResultMessage :
LastGarbageCollectionTime          :
LastOptimizationResult             :
LastOptimizationResultMessage      :
LastOptimizationTime               :
LastScrubbingResult                :
LastScrubbingResultMessage         :
LastScrubbingTime                  :
OptimizedFilesCount                : 0
OptimizedFilesSavingsRate          : 0
OptimizedFilesSize                 : 0
SavedSpace                         : 0
Volume                             : D:
VolumeId                           : \\?\Volume{284ffc03-8071-439e-9886-6cf3f89147f5}\  

有効化しただけでは実行されない。デフォルトでは以下の実行スケジュールになっています。

[amznfsxgkhlkswb.nozaki.com]: PS>Get-FSxDedupSchedule

Enabled    Type               StartTime              Days               Name
-------    ----               ---------              ----               ----
True       Optimization                                                 Back...
True       GarbageCollection  2:45 AM                Saturday           Week...
True       Scrubbing          3:45 AM                Saturday           Week...

なのですぐに実行されるよう、以下の3つの実行スケジュールを作成・更新

PS>New-FSxDedupSchedule -Name soon -Type Optimizaion -Start 10:18

Enabled    Type               StartTime              Days               Name
-------    ----               ---------              ----               ----
True       Optimization       10:18 AM               {Sunday, Monday... soon

PS>New-FSxDedupSchedule -Name a -Type GarbageCollection -Start 1:31

Enabled    Type               StartTime              Days               Name
-------    ----               ---------              ----               ----
True       GarbageCollection  1:31 AM                {Sunday, Monday... a

PS>New-FSxDedupSchedule -Name b -Type Scrubbing -Start 1:32

Enabled    Type               StartTime              Days               Name
-------    ----               ---------              ----               ----
True       Scrubbing          1:32 AM                {Sunday, Monday... b

実行状況をチェック

[amznfsxgkhlkswb.nozaki.com]: PS>Update-FSxDedupStatus


ObjectId                           : \\?\Volume{284ffc03-8071-439e-9886-6cf3f89
                                     147f5}\
InPolicyFilesCount                 : 1
InPolicyFilesSize                  : 70632
LastGarbageCollectionResult        : 0
LastGarbageCollectionResultMessage : The operation completed successfully.
LastGarbageCollectionTime          : 6/13/2023 1:31:06 AM
LastOptimizationResult             : 0
LastOptimizationResultMessage      : The operation completed successfully.
LastOptimizationTime               : 6/13/2023 1:22:06 AM
LastScrubbingResult                : 0
LastScrubbingResultMessage         : The operation completed successfully.
LastScrubbingTime                  : 6/13/2023 1:32:05 AM
OptimizedFilesCount                : 1
OptimizedFilesSavingsRate          : 94
OptimizedFilesSize                 : 70632
SavedSpace                         : 66560
Volume                             : D:
VolumeId                           : \\?\Volume{284ffc03-8071-439e-9886-6cf3f89
                                     147f5}\

確かに少し減っています。

PS>Measure-FSxDedupFileMetadata -Path D:\share\share2\

Path                    : {D:\share\share2}
Volume                  : D:
VolumeId                : \\?\Volume{284ffc03-8071-439e-9886-6cf3f89147f5}
FilesCount              : 8
OptimizedFilesCount     : 1
Size                    : 12.22 MB
SizeOnDisk              : 12.27 MB
DedupSize               : 2.75 KB
DedupChunkCount         : 1
DedupDistinctSize       : 2.75 KB
DedupDistinctChunkCount : 1

FSx側ではなく、SMB側での重複削除も設定してみます。
役割の追加から「データ重複除去」をチェックすると、C:\Windows\system32>ddpeval.exeがインストールされる。

Dドライブで重複除外を有効化
こちらはWindows Server 重複除去を試してみた!(その2)が参考になりました。

すぐに実行できるようにスケジュール時刻を調整。もちろん0日より古いファイルにする

すると5%だけ進んで9.49MBも重複削除されている。

ご覧のようにディスク上のサイズも0に

SMB共有はこんな感じ

ここからが本番、この重複排除された状態でDataSyncするとどうなるか?(送信先でもそのまま重複排除が有効化されたままか?)
重複排除に関しても動作が確認できました!
左が重複排除した状態、右がDataSyncしたあとの状態です。ご覧のように重複排除は解除されていました!

そもそもこの重複排除されたファイルをどこかにコピーしただけでも重複排除が解除されていたので、重複排除はあくまでそのフォルダにそのまま置かれているときだけ有効と考える方が良さそう

所要時間

8時間(ざっと1日)
VPC2つ作ったり、エージェントが必要だったり、タスクで試行錯誤してたりしてたので結構時間かかると思います。重複削除の設定も結構面倒くさい

ユースケース

DataSyncで普段コピーする時に、FSxやコピー元のファイルサイズを削減して置いておきたい場合

まとめ

・ドキュメントに記載のある、AWS DataSyncがコピーする特殊ファイルとは何が該当しますか?

フォルダ、ハードリンク
SMBの場合、シンボリックリンクファイルがあるとエラーになる

・重複排除が掛かっていた場合についてどんな動きになりますか?

重複排除された状態でDataSyncすると、重複排除は解除されます。重複排除はあくまでそのフォルダにそのまま置かれているときだけ有効なようです。