Closed16

robocopy 賞賛スレ

hymkorhymkor

背景

自宅マシンから会社設置のニューマシンへ、すごく大量のデータをコピーしています。

hymkorhymkor

robocopyはログがうるさいほど出るので、とりあえず途中で不安にならなくてすむ。OS標準コマンドなので、定番オプションをおぼえれば安心

(Jan.11,2022 20:31)

hymkorhymkor

robocopy (コピー元) (コピー先) (オプション)

  • コピー元=コピー先で同じ階層になるように書く(cp とか mv の感覚でやると階層が一つ浅くなってしまうので注意)
  • /E … サブディレクトリ以下もコピー
  • /MOVE … 移動する
  • /MIR … ミラーリング(つまり削除もする)

(Jan.11,2022 21:33)

hymkorhymkor

robocopy、最後にコピーしたファイル数とかバイト数、速度とかの統計情報を出してくれる。これ、小規模コピーの時はウザイと思っていたが、何時間もかかる大規模コピーの時は結構参考になるな
(以下は自宅から会社のPCに、リモートデスクトップの共有フォルダー越しにファイルを移動した時のもの)

(Jan.12,2022 9:16)

hymkorhymkor

無線LAN + sshトンネル + リモートデスクトップのファイル共有上の robocopy なので、すごく遅い。あと、細かいファイルがたくさんあるので、OPEN/CLOSEコストも大きいのだろうと思う。zip で固めて向こうで展開でも、OPEN/CLOSEの回数変わらんはずだしな…
(Jan.12,2022 9:18)

hymkorhymkor

robocopy すげぇ

ssh トンネルが切れて、ネットワークパスがアクセスできなくなっても、30秒ごとにリトライを繰り返してやがる。

そして、1時間後、ssh トンネルをつなぎ直したらコピーを再開しやがった!
(Jan.12,2022 22:29)

hymkorhymkor

これ、俺が実装したら、普通に if err != nil { return err } して、エラー終了してるわ
(Jan.12,2022 22:33)

hymkorhymkor

この robocopy の実に堅い挙動って、どことなく、IBM、Oracle 的なものを感じる。このなんとしても、くじけず復旧させるぞ文化はメインフレーム由来である気がする。間違っても UNIX 的ではない
(Jan. 12,2022 23:32)

hymkorhymkor

しかし、しばらく走らせてたら、4GBほどのVMイメージファイルのコピーで CPUパワーかネットワークの帯域を食いすぎて、他のリモート操作がまったくできなくなった。一旦やめて、夜中に続きやろう
(帯域制御とかのオプションもあるみたいだけど、業務時間中無理してやるほどでもないだろう)
(Jan. 13,2022 13:31)

hymkorhymkor

robocopy の /create オプション、0バイトのファイルとディレクトリの作成のみか。とある用途に使えそうだ
(Jan.13,2022 18:16)

hymkorhymkor

(ここからリアルタイム)

現状、自宅 → ssh トンネル → リモートデスクトップ → コマンドプロンプト → robocopy \\tsclient\C\..コピー元 C:\..コピー先 でコピーしてる。

これやると、帯域を圧迫しすぎるのか、リモートデスクトップ先の応答がすごく悪くなって、1分に1操作くらいしか伝わらないw

  • リモートデスクトップのファイル共有機能経由ではなく、ssh トンネルの上に Windows のファイル共有プロトコルの経路を作る
  • robocopy の利用帯域を下げる
    • これ、計算がややこしい。1ブロックごとに何ms休むかという形式だから。現状、146KB/秒で1ブロック=1MBだから、10秒に1度しか休めない。ブロックを64KBに変えれば2秒に1度の休み時間か。500msくらいでいいかな
  • DropBox 経由で移動
  • ハードディスクを持ち運ぶ
    • 会社にゆくのヤダ
hymkorhymkor
2022/01/13 20:46:52 エラー 5 (0x00000005) コピー先ディレクトリにタイムスタンプを追加しています C:\Users\zetamatta\Documents\tmp\Roaming\Microsoft\Windows\Start Menu\プログラム\
アクセスが拒否されました。
30 秒間待機しています... 再試行しています...

うーむ。こちらは、壊れたPCの内蔵SATAディスクを SATA→USBアダプタ経由でつなぎ、中身のデータをローカルの内蔵ディスクにコピーしていた時に出たもの( robocopy Roaming ~"\Documents\tmp\Roaming" /E /MOVE )

[Robocopy] ERROR 5 (0×00000005) Changing File Attributes アクセスが拒否されました。 | mkoba のお部屋 : DREAMHIVE Staff Blog に従って、属性をコピーしないよう

robocopy Roaming ~"\Documents\tmp\Roaming" /E /MOVE /COPY:DT

でやってみたところ、とりあえずうまく処理しているかのように見えている。。。

このスクラップは2022/02/12にクローズされました