技術2課の山﨑です。今回はWindowsのrobocopyコマンドを使ってデータ移行してみました!
robocopyコマンドについては私とは別の山﨑のブログを御覧ください
移行イメージ
今回はオンプレミス環境にあるファイルサーバーからAWS上にあるファイルサーバーにデータ移行する、というシチュエーションを想定して検証してみました

検証環境
個人検証ではさすがにDirect Connectは利用できないため、以下のようにTransitGatewayで代用して類似的な環境を用意しました。

robocopyコマンド実行までの事前準備
実際にrobocopyコマンドを実行するために以下の事前準備をしました。
- ①VPC間で通信できる状態にする(移行イメージではオンプレミス - AWS間の通信ができる状態にする)
- ②移行先サーバーをActive Directoryのユーザー/グループとして登録する
- ③移行元サーバの共有フォルダ設定の後、移行元サーバーの共有フォルダをNetworkDriveとして移行先サーバーにマウントする
②のActive Directoryについては弊社の孔が分かりやすく解説しているブログ記事がありますので参考までに御覧ください
今回は③移行元サーバの共有フォルダ設定の後、移行元サーバーの共有フォルダをNetworkDriveとして移行先サーバーにマウントするから実際にやったことをご紹介していきます。
いざ検証
移行元サーバーの共有フォルダ設定
コントロールパネル -> ネットワークとインターネット -> ネットワークと共有設定 -> 高度な共有設定 を開いて、「プライベート(現在のプロファイル)」のタブで「ネットワークの探索」と「ファイルとプリンターの共有」を有効にする

「すべてのネットワーク」のタブで「パブリックフォルダーの共有」を有効にする

共有したいフォルダに共有設定をする。今回はeveryoneを共有先設定として指定しました。

移行元サーバーの共有フォルダをNetworkDriveとしてマウント
移行元サーバーで共有設定をしただけでは移行先サーバー上で共有フォルダを見ることができません。そのため移行先サーバーで共有フォルダを見ることができるようにマウントします。移行先サーバーにAdministratorユーザーでログイン後、以下のコマンドを実行します
net use Z: \\EC2AMAZ-HPJNRE4.robocopy.local(移行元)\share /user:robocopy.local\source Ba-0150pr ※ net use ドライブ名 \\コンピュータ名\共有名 /user:ドメイン名\ユーザID パスワード
net useコマンドについては以下のMicrosoftのドキュメントをご覧ください
これで移行先サーバーで共有フォルダを見ることができます。

robocopyコマンドを実行
ここまで準備が整ったら念願のrobocopyコマンドを打つことができます。今回は移行先サーバーのDドライブにデータを移行します。予め移行用ファイルを13ファイル用意しました。100MBのファイルが10個で約1GB。あとはrobocopyのオプションを試したかったので1MBのファイルを別ディレクトリに3個作成しておきました。トータルで約1GBです。

移行先サーバーにAdministratorユーザーでログイン後PowerShellを開いて以下のrobocopyコマンドを実行します。
robocopy Z:\ D:\share /MIR /COPYALL /R:1 /W:5 /L
\L オプションを付けるとrobocopyコマンドをシミュレーションとして実行することが可能でコピー元、コピー先、コピー対象のファイル、適用されるオプション等を確認することができます。実際のコピー処理を実行するわけではないので、事前に\L オプションで処理内容をチェックしておくことでコマンドの実行ミスを減らすことが期待できます。
COPYALLというオプションを付けるとディレクトリおよびファイルのセキュリティ情報(アクセス許可情報、所有者情報、監査情報)をコピーすることができます。このオプションを実行するためには管理者としてPowerShellを実行する必要があります。そのためAdministratorユーザーとしてログインしてPowerShell を実行しました。
少し話が前後しますが、ADユーザーとしてOSログインしてNetworkDriveをマウントしてもAdministratorユーザーではNetworkDriveはマウントされた状態にはなっていません。それが原因なのか、ADユーザーでOSログインしている状態で管理者=AdministratorユーザーとしてPowerShellでrobocopyを実行しようとすると「Z:\ (マウントされた共有フォルダ)なんてパスありませんよー」とエラーが出ました。そのため今回はNetworkDriveのマウントもrobocopyの実行もAdministratorユーザーとしてOSログインし、実行すると上手くいきました。
PS C:\Users\Administrator> robocopy Z:\ D:\share /MIR /COPYALL /R:1 /W:5 /L
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows
-------------------------------------------------------------------------------
Started : Sunday, March 7, 2021 8:44:32 AM
Source : Z:\
Dest : D:\share\
Files : *.*
Options : *.* /L /S /E /COPYALL /PURGE /MIR /R:1 /W:5
------------------------------------------------------------------------------
New Dir 3 Z:\
New File 13 sample.txt
New File 13 sample2.txt
New File 13 sample3.txt
New Dir 10 Z:\directory1\
New File 100.0 m test100M-1
New File 100.0 m test100M-10
New File 100.0 m test100M-2
New File 100.0 m test100M-3
New File 100.0 m test100M-4
New File 100.0 m test100M-5
New File 100.0 m test100M-6
New File 100.0 m test100M-7
New File 100.0 m test100M-8
New File 100.0 m test100M-9
------------------------------------------------------------------------------
Total Copied Skipped Mismatch FAILED Extras
Dirs : 2 2 0 0 0 0
Files : 13 13 0 0 0 0
Bytes : 1000.00 m 1000.00 m 0 0 0 0
Times : 0:00:00 0:00:00 0:00:00 0:00:00
Ended : Sunday, March 7, 2021 8:44:32 AM
シミュレーション結果に問題がなければ、いよいよrobocopyコマンドを実行します。
robocopy Z:\ D:\share /MIR /COPYALL /R:1 /W:5
PS C:\Users\Administrator> robocopy Z:\ D:\share /MIR /COPYALL /R:1 /W:5
-------------------------------------------------------------------------------
ROBOCOPY :: Robust File Copy for Windows
-------------------------------------------------------------------------------
Started : Sunday, March 7, 2021 8:54:13 AM
Source : Z:\
Dest : D:\share\
Files : *.*
Options : *.* /S /E /COPYALL /PURGE /MIR /R:1 /W:5
------------------------------------------------------------------------------
New Dir 3 Z:\
100% New File 13 sample.txt
100% New File 13 sample2.txt
100% New File 13 sample3.txt
New Dir 10 Z:\directory1\
100% New File 100.0 m test100M-1
100% New File 100.0 m test100M-10
100% New File 100.0 m test100M-2
100% New File 100.0 m test100M-3
100% New File 100.0 m test100M-4
100% New File 100.0 m test100M-5
100% New File 100.0 m test100M-6
100% New File 100.0 m test100M-7
100% New File 100.0 m test100M-8
100% New File 100.0 m test100M-9
------------------------------------------------------------------------------
Total Copied Skipped Mismatch FAILED Extras
Dirs : 2 2 0 0 0 0
Files : 13 13 0 0 0 0
Bytes : 1000.00 m 1000.00 m 0 0 0 0
Times : 0:00:07 0:00:07 0:00:00 0:00:00
Speed : 149454965 Bytes/sec.
Speed : 8551.881 MegaBytes/min.
Ended : Sunday, March 7, 2021 8:54:20 AM
- 実行結果より以下のことが分かりました
- 13ファイル、トータル1GBの移行に要した所要時間は7秒
- 1TB=7000秒/60秒=116.6分=約2時間 (※1TB=1000GBとして計算)
- 10TB=2時間×10=20時間
帯域などその他の条件によって変動しますが、10TBのデータをrobocopyで移行するとなると目安として1日は必要だということが分かりました。
余談はさておき、ADユーザーとしてログインし直してデータ移行がきちんと実施されているかどうかを確認します。

Dドライブを確認すると無事にデータが移行されていました!
まとめ
今回はrobocopyコマンドを実行するまでの事前準備の方が大変でしたが、おかげでrobocopyだけでなくTransitGatewayやActive Directoryについても学習することができて一石三鳥でした!こういった検証環境を手軽に準備できることもクラウドならではのメリットだなと改めて感じた検証でした。
山﨑 翔平 (Shohei Yamasaki) 記事一覧はコチラ
カスタマーサクセス部所属。2019年12月にインフラ未経験で入社し、AWSエンジニアとしてのキャリアを始める。2023 Japan AWS Ambassadors/2023-2024 Japan AWS Top Engineers