この記事には広告を含む場合があります。
記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
ども。あいしんくいっと(@ithinkitnet)です。
ithinkit
Windowsでデータ移行するなら必要不可欠なrobocopy(ロボコピー)。ファイルサーバーのデータ移行でも威力を発揮します。
Windowsのデータ移行、ファイル共有からのrobocopyで楽々解決!
便利なデータコピーツールであるrobocopyを利用する上で知っておきたいことを書いておきたいと思います。
クリック可能な目次
robocopyでデータ移行するなら絶対に知っておきたい11つのこと
コピー元データは極略減らす
コピー元となるデータは極力減らしておきましょう。不要データを事前に削除しておくことでコピー時間の短縮に繋がります。当たり前だけど一番効果が期待出来ます。
ithinkit
- データコピー元となるデータは可能な限り減らしましょう!
思考停止で「全部重要だから全てデータコピーして!」って言われることも多々あるので減らすのは簡単ではないでしょうけどw
コピー元データが小さくなればなるほどコピー時間の短縮につながるので、事前に不要データ削除を頑張りましょう!
コピー元のファイル数、容量は控えておく
正常にrobocopy出来たかエビデンスとして残せるよう、コピー対象フォルダのファイル数、容量は事前に控えておきましょう。
(エクスプローラのプロパティ比較が手っ取り早くておすすめ)
robocopy実行後にコピー元とコピー先フォルダで比較することでデータ移行の正常確認の目安に出来ます。更新されるとズレますが、大体の目安にはなります。
robocopyはスペックの良いサーバで実行
robocopyはコピー元、コピー先のどちらでも実行可能ですが、スペックの良いサーバでrobocopyを実行させるとパフォーマンス向上に期待が出来ます。
例えば、旧サーバから新サーバへrobocopyする場合、新サーバのほうがスペックが良いのであれば、新サーバ側でrobocopyを実行させましょう!
ithinkit
2016以降なら「MT」オプションで爆速!?
WindowsServer2016以降なら「MT」オプションが使えます。MTはマルチスレッド対応オプションなので、CPUがマルチコアの場合に有効。
ちなみにデフォルトだとMT:8なので、8コアないと速度アップは期待出来ないです。
CPUコア数に合わせて2コアならMT:2、4コアならMT:4と適切に指定しましょう。
マルチコア環境の場合、マルチスレッドオプションを使うと、コピー速度アップが期待出来るので活用しましょう。
~ robocopyログ抜粋 ~
-------------------------------------------------------------------------------
ROBOCOPY :: Windows の堅牢性の高いファイル コピー
-------------------------------------------------------------------------------
開始: 2020年1月17日 22:58:42
コピー元 : D:\backup\
コピー先 : \\192.168.11.100\D$\backup\
ファイル: *.*
オプション: *.* /S /E /COPYALL /PURGE /MIR /B /MT:2 /R:1 /W:1
------------------------------------------------------------------------------
~ robocopyログ抜粋(終わり) ~
MTオプション自体はWindowsServer2008時代から存在しますが、「WindowServer2016以前でMTオプションを利用するとコピーに失敗する」といったバグがあるようです。利用するのであれば2016以降が無難です。
- シングルコアなら、ロボコピーバッチ自体を細分化することで速度アップが望めます。
robocopy実行ログは必ず出力
robocopyの実行に成功したか否かはログを見れば分かります。なので、「/log」オプションを指定してrobocopyログを出力しましょう。
「コピーに成功したのか?失敗したのか?」と問い詰められないようエビデンスとして出せるように。
robocopyバッチで当日日付のログ出力させるなら下記のような感じ。
set date=%date:~0,4%%date:~5,2%%date:~8,2%
robocopy "\\192.168.11.126\f$\src" "E:\bkdata" /MIR /R:0 /NFL /NP /log+:.\robocopy_%date%.log
エラーがあればログに出力されるので個別対応。「エラー」といった検索ワードで確認可能。
robocopyログの出力先はしっかりと指定しましょう。ログの吐き先が無いとrobocopy実行エラーになるので注意。
robocopyエラースキップオプションは必須
コピーに時間がかかる場合、晩にrobocopy流して帰ったりするでしょう。
ithinkit
次の日にはコピーが終わってるかと思いきや、エラーでコピーが完了していなかった!
ithinkit
なんてことがあります。
そんな情けない事態にならないよう、コピーエラーが発生したら、スキップして次のコピーさせるようにしておきましょう。
ithinkit
システムが掴んでいるデータはコピーに失敗することが多いです。
「○○秒間待機しています」が、延々続くとコピーは終わらないのでスキップさせましょう。
~ ロボコピーログから抜粋 ~
2020/1/17 22:59:06 エラー 5 (0x00000005) ファイルをコピーしています \\192.168.11.100\D$\backup\BACKUP_20191201-0230.zip
アクセスが拒否されました。
1 秒間待機しています... 再試行しています...
新しいファイル 3.3 g BACKUP_20191201-0230.zip 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0% 0.0%
~ ロボコピーログから抜粋(終わり) ~
robocopyのコピー速度が出ないなら細分化させよう
robocopyは元々シングルタスクでコピーされます。
上に書いた「MT」が使えない場合はrobocopy処理を分割するとコピーが速くなる可能性があります。
「MIR」オプションには気を付けろ
/MIRオプションを指定するとコピー元のフォルダとミラーリングされます。
つまり、コピー元でファイルを削除すると、コピー先のファイルも削除されます。
コピーしたデータは、コピー先にそのまま残したいのであれば、MIRは付けないようにしましょう。
- 本番切替までは/MIRは付けず差分で同期、本番切替直前で/MIR付けて最終差分同期とすることが多いです。
コピー元、コピー先は向きを間違えない
/MIRオプションをつけてコピー元とコピー先を逆にしてrobocopy実行した場合、えらいことになります。
コピー先が空なら、コピー元も空になります。
システム領域は除外しよう
「System Volume Information」といったシステム領域はアクセス権が無いのでコピーに失敗します。ですので、除外することをおすすめします。ゴミ箱「@Recycle」も除外推奨。
2020/03/30 23:22:04 エラー 5 (0x00000005) ファイルをコピーしています \\jfs01\f$\System Volume Information\WPSettings.dat
アクセスが拒否されました。
2020/03/30 23:22:04 エラー 5 (0x00000005) ファイルをコピーしています \\jfs01\f$\System Volume Information\{2abac7b8-66c1-11ea-b5a2-08f1eab03c9d}{3808876b-c176-4e48-b7ae-04046e6cc752}
アクセスが拒否されました。
2020/03/30 23:22:04 エラー 5 (0x00000005) ファイルをコピーしています \\jfs01\f$\System Volume Information\{2abacb97-66c1-11ea-b5a2-08f1eab03c9d}{3808876b-c176-4e48-b7ae-04046e6cc752}
アクセスが拒否されました。
2020/03/30 23:22:04 エラー 5 (0x00000005) ファイルをコピーしています \\jfs01\f$\System Volume Information\{2abad815-66c1-11ea-b5a2-08f1eab03c9d}{3808876b-c176-4e48-b7ae-04046e6cc752}
アクセスが拒否されました。
「/XD」オプションを指定して除外することをおすすめします。
/XD "System Volume Information"
コピー元をドライブ指定するとデータが見えなくなる
コピー元をドライブ指定した場合、コピー先フォルダにHS属性が付与されて隠しフォルダになります。ですので、robocopyした後、コピー先を確認すると見えなくってしまいます。
ithinkit
なんて焦らなくても良いよう、コピー元をドライブにした場合、コピー先が見えなくなるということは認識しておきましょう。
robocopyでコピー先フォルダが見えない!コピー元ドライブ指定が原因かも
robocopyログに日付を付ける
robocopyを数日間流すのであれば、PowerShellで流すようにして、robocopyログに日付をつけておくと勝手にローテーションされるので便利。
$Today = Get-Date -Format "yyyyMMdd"
robocopy $SRCDIR $DESTDIR /MIR /R:0 /E /NP /FFT /XA:SH /XD "trashbox" ".TemporaryItems" "System Volume Information" "`$RECYCLE.BIN" /XJD /XJF /COPY:DAT /DCOPY:DAT /XO /LOG:.\robocopy.log_$Today;
robocopyでデータ移行する上で絶対に知っておきたいことまとめ
最後にrobocopyでデータ移行する上で絶対に知っておきたいをまとめておきます。
- コピー元のデータは極略減らす
- コピー元のファイル数、容量は控えておく
- obocopyはスペックの良いほうのサーバーで実行
- 2016以降なら「MT」で爆速!?
- robocopy実行ログは必ず出力
- robocopyエラースキップオプションは必須
- robocopyのコピー速度が出ないなら細分化させよう
- 「MIR」オプションには気を付けろ
- コピー元、コピー先は絶対に向きを間違えない
- システム領域は除外しよう
- コピー元をドライブ指定するとコピー先フォルダが見えなくなる
- robocopyログに日付を付ける
便利な差分コピーツールであるrobocopy。
Windowsでデータ移行するなら外すことの出来ない優秀なツールなので、今回挙げた内容は把握しておきましょう。
以上、あいしんくいっとでした。