PHPPAK9V9A6869_TP_V

こんばんはヽ(´ー`)ノ
ちょっとハマったことがあったのでメモ代わりに調べたことを残そうと思います。


2017/04/02 追記あり

背景

社内SEみんな大好き"robocopy"
私も簡単なサーバ間のデータバックアップはrobocopyをタスクで仕込んで実行させてます。

しかし、何だか最近妙に遅い気がする・・・
これでは業務開始前にデータバックアップが終わらない

ネットワークがボトルネックになるケースもあるとは思うが、
そもそも最近、そんなにネットワーク負荷あがるようなことあったかなー、、、
チューニング出来ないかなーと思って調べてみました。

robocopyとは?

ファイルサーバ同士でフォルダを同期するために作られたwindowsコマンドツールです。
"Robust(堅牢な) File Copy"の略で、robotが実行してくれるcopyという意味ではないので注意です。


コマンド例


@echo off

SET DT=%date%
SET TIME2=%time: =0%
SET LOGFILE01=D:\robocopy_log%DT:~0,4%%DT:~5,2%%DT:~8,2%_%time2:~0,2%%TIME2:~3,2%%time2:~6,2%.log

net use Y: \\server\share_folder
ROBOCOPY Y:\ D:\ /E /DCOPY:DAT /XJD /XJF /R:0 /W:0 /B /NP /MIR /LOG+:%LOGFILE01%
net use Y: /delete
オプションは下記をご参照ください
technet
https://technet.microsoft.com/ja-jp/library/cc733145(v=ws.10).aspx

コマンドの解説自体はもっと詳しいサイトに任せますが、基本的にはだいたいこんな感じでしょう。
私の場合はネットワークドライブにマウントさせて実行することが多いです。


※2017/04/02 追記

Windows Server 2012 R2において、
重複排除が有効な場合に /XJ オプションをつけたrobocopyが正常に動作しないという仕様?不具合?があるようです。

technetフォーラム - データ重複除去が有効なフォルダをコピー元とする、Robocopyが正常に機能しない
https://social.technet.microsoft.com/Forums/office/ja-JP/94a68eb1-1ca0-47f7-b333-d8808e67ff07/robocopy?forum=winserver8

FSRM and Data Deduplication may be adversely affected when you use Robocopy /MIR in Windows Server 2012
https://support.microsoft.com/en-us/help/2834834/fsrm-and-data-deduplication-may-be-adversely-affected-when-you-use-robocopy-mir-in-windows-server-2012

私もえらいハマったので注意です!



実行はdestination側で

まずrobocopyはsourceとdestinationのリストを作るようですが、その際destination側から作るとか?
そのため、ネットワークを跨いだデータコピーの場合はdestination側のリソースで実行すると早いようです。

でも、それは今までも慣例的にそうしてきた、、、
最近になってやけに遅い気がする、、、

タスクスケジューラの優先度が!!

手動でコマンドを実行した時は早い気がした。
そこでタスクスケジューラから実行された場合を見てみたら・・・
WS000000

・・・なんか優先度が「通常以下」になっているんですけど・・・

ネットで調べてみると、どうもWindows vista以降でこの仕様になったんだとか
こんなの分かりませんわ、、、

改善方法

この値、タスクスケジューラのGUIから変更する箇所がないのだとか。
なのでxmlエクスポート→値を変更→インポートで書き換えます。

まず、既にrobocopy実行を仕込んでいるタスクをエクスポートします。
WS000001


吐き出されたxmlファイルの<Priority>タグの値を変更します

WS000002


ちなみにここの値は下記のようです。
Task priorityPriority ClassPriority Level
0REALTIME_PRIORITY_CLASSTHREAD_PRIORITY_TIME_CRITICAL
1HIGH_PRIORITY_CLASSTHREAD_PRIORITY_HIGHEST
2ABOVE_NORMAL_PRIORITY_CLASSTHREAD_PRIORITY_ABOVE_NORMAL
3ABOVE_NORMAL_PRIORITY_CLASSTHREAD_PRIORITY_ABOVE_NORMAL
4NORMAL_PRIORITY_CLASSTHREAD_PRIORITY_NORMAL
5NORMAL_PRIORITY_CLASSTHREAD_PRIORITY_NORMAL
6NORMAL_PRIORITY_CLASSTHREAD_PRIORITY_NORMAL
7BELOW_NORMAL_PRIORITY_CLASSTHREAD_PRIORITY_BELOW_NORMAL
8BELOW_NORMAL_PRIORITY_CLASSTHREAD_PRIORITY_BELOW_NORMAL
9IDLE_PRIORITY_CLASSTHREAD_PRIORITY_LOWEST
10IDLE_PRIORITY_CLASSTHREAD_PRIORITY_IDLE

参照元:MSDN
https://msdn.microsoft.com/en-us/library/aa383512(v=vs.85).aspx

GUIからタスクスケジューラに登録すると、7が初期値になってしまうので、
6あたりに変更して、それでもダメなら3にして、といった感じのチューニングの仕方になりますかね
ちなみに4~6って何が違うんでしょうかね


書き換えたxmlファイルをGUIの「タスクのインポート」からインポートしたら終わり。
WS000003


これで試してみましょうヽ(´ー`)ノ