Windowsのrobocopyコマンドを使ってデータ移行してみた

記事タイトルとURLをコピーする

技術2課の山﨑です。今回はWindowsのrobocopyコマンドを使ってデータ移行してみました!

robocopyコマンドについては私とは別の山﨑のブログを御覧ください

blog.serverworks.co.jp

移行イメージ

今回はオンプレミス環境にあるファイルサーバーからAWS上にあるファイルサーバーにデータ移行する、というシチュエーションを想定して検証してみました

f:id:swx-yamasaki:20210214131035p:plain

検証環境

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

f:id:swx-yamasaki:20210307171856p:plain

robocopyコマンド実行までの事前準備

実際にrobocopyコマンドを実行するために以下の事前準備をしました。

  • ①VPC間で通信できる状態にする(移行イメージではオンプレミス - AWS間の通信ができる状態にする)
  • ②移行先サーバーをActive Directoryのユーザー/グループとして登録する
  • ③移行元サーバの共有フォルダ設定の後、移行元サーバーの共有フォルダをNetworkDriveとして移行先サーバーにマウントする

②のActive Directoryについては弊社の孔が分かりやすく解説しているブログ記事がありますので参考までに御覧ください

blog.serverworks.co.jp

今回は③移行元サーバの共有フォルダ設定の後、移行元サーバーの共有フォルダをNetworkDriveとして移行先サーバーにマウントするから実際にやったことをご紹介していきます。

いざ検証

移行元サーバーの共有フォルダ設定

コントロールパネル -> ネットワークとインターネット -> ネットワークと共有設定 -> 高度な共有設定 を開いて、「プライベート(現在のプロファイル)」のタブで「ネットワークの探索」と「ファイルとプリンターの共有」を有効にする

f:id:swx-yamasaki:20210307172051p:plain

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

f:id:swx-yamasaki:20210307172107p:plain

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

f:id:swx-yamasaki:20210307172312p:plain f:id:swx-yamasaki:20210307172324p:plain

移行元サーバーの共有フォルダをNetworkDriveとしてマウント

移行元サーバーで共有設定をしただけでは移行先サーバー上で共有フォルダを見ることができません。そのため移行先サーバーで共有フォルダを見ることができるようにマウントします。移行先サーバーにAdministratorユーザーでログイン後、以下のコマンドを実行します

 net use Z: \\EC2AMAZ-HPJNRE4.robocopy.local(移行元)\share /user:robocopy.local\source Ba-0150pr
※ net use ドライブ名 \\コンピュータ名\共有名 /user:ドメイン名\ユーザID パスワード

net useコマンドについては以下のMicrosoftのドキュメントをご覧ください

Net use | Microsoft Docs

これで移行先サーバーで共有フォルダを見ることができます。

f:id:swx-yamasaki:20210307172758p:plain

robocopyコマンドを実行

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

f:id:swx-yamasaki:20210307173941p:plain f:id:swx-yamasaki:20210307173951p:plain

移行先サーバーに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ユーザーとしてログインし直してデータ移行がきちんと実施されているかどうかを確認します。 f:id:swx-yamasaki:20210307180734p:plain f:id:swx-yamasaki:20210307175939p:plain

Dドライブを確認すると無事にデータが移行されていました!

まとめ

今回はrobocopyコマンドを実行するまでの事前準備の方が大変でしたが、おかげでrobocopyだけでなくTransitGatewayやActive Directoryについても学習することができて一石三鳥でした!こういった検証環境を手軽に準備できることもクラウドならではのメリットだなと改めて感じた検証でした。

山﨑 翔平 (Shohei Yamasaki) 記事一覧はコチラ

2019/12〜2023/2までクラウドインテグレーション部でお客様のAWS導入支援を行っていました。現在はIE(インターナルエデュケーション)課にて採用周りのお手伝いや新卒/中途オンボーディングの業務をしています。2023 Japan AWS Top Engineers/2023 Japan AWS Ambassadors