Share
Embed
robocopy の怖い話/scary-story-about-robocopy
https://toranomon-tech-hub.connpass.com/event/356096/
Toranomon Tech Hub 第四回 真夏のIT怪談ナイト 〜ITにまつわる怖い話〜
emi
July 27, 2025
Transcript
39 slides
-
自己紹介 2 • 最近やっていた・いること ◦ Terraform を用いた AWS リソース構築支援 ◦
AWS Control Tower を用いたマルチアカウント環境での AWS Security Hub、Amazon GuardDuty 展開 ◦ AWS リソース負荷軽減、構成検討 ◦ コスト最適化アセスメント ◦ Amazon QuickSight や Amazon Athena を利用した データ分析・可視化 • 名前(ニックネーム) ◦ 木谷 映見(emi) • 部署 ◦ クラスメソッド株式会社 ◦ クラウド事業本部コンサルティング部 • 趣味 ◦ コーヒー、ドーナツ、サウナ、 ホットヨガ、漫画、音楽など AWS Certified Cloud Practitioner バ ッ ジ AWS Certified AI Practitioner バ ッ ジ AWS Certified Solutions Architect - Professional バ ッ ジ AWS Certified DevOps Engineer - Professional バ ッ ジ AWS Certified Advanced Networking - Specialty バ ッ ジ AWS Certified Machine Learning - Specialty AWS Certified Security - Specialty バ ッ ジ AWS Certified SysOps Administrator - Associate バ ッ ジ AWS Certified Developer - Associate バ ッ ジ AWS Certified Solutions Architect - Associate バ ッ ジ AWS Certified Data Engineer - Associate バ ッ ジ AWS Certified Machine Learning Engineer - Associate バ ッ ジ AWS Certified Cloud Practitioner バ ッ ジ AWS Certified AI Practitioner バ ッ ジ AWS Certified Solutions Architect - Professional バ ッ ジ AWS Certified DevOps Engineer - Professional バ ッ ジ AWS Certified Advanced Networking - Specialty バ ッ ジ AWS Certified Machine Learning - Specialty AWS Certified Security - Specialty バ ッ ジ AWS Certified SysOps Administrator - Associate バ ッ ジ AWS Certified Developer - Associate バ ッ ジ AWS Certified Solutions Architect - Associate バ ッ ジ AWS Certified Data Engineer - Associate バ ッ ジ AWS Certified Machine Learning Engineer - Associate バ ッ ジ 最近はカフェインを控えています -
目次 3 ⚫ robocopy とは ⚫ robocopy で絶対に間違えてはいけない部分 ⚫ robocopy
の怖い話 ⚫ AI は人間のミスを減らすか? ⚫ おわりに -
robocopy とは 4 ⚫ robocopy とは ⚫ robocopy で絶対に間違えてはいけない部分 ⚫
robocopy の怖い話 ⚫ AI は人間のミスを減らすか? ⚫ おわりに -
6 ⚫ robocopy とは ⚫ Microsoft Windows に標準搭載されているファイル・フォルダのコピーツール ⚫ Robocopy
| Microsoft Learn ⚫ https://learn.microsoft.com/ja-jp/windows-server/administration/windows- commands/robocopy ⚫ 主な用途 ⚫ バックアップ作業 ⚫ サーバー間のデータ移行 ⚫ 定期的なファイル同期 ⚫ 大容量データの安全な転送 robocopy とは -
7 ⚫ robocopy コマンドの使い方 ⚫ X ⚫ X ⚫ x
⚫ 基本構文 ⚫ D:¥source: コピー元フォルダ ⚫ E:¥destination: コピー先フォルダ ⚫ /mir オプション ⚫ ミラーリング(完全同期)、コピー先をコピー元と完全に一致させる ⚫ コピー元にないファイル・フォルダはコピー先から削除される robocopy とは robocopy D:¥source E:¥destination /mir /copyall /r:3 /w:10 /log+:migration.log /tee -
8 ⚫ robocopy コマンドの使い方 ⚫ X ⚫ X ⚫ x
⚫ /copyall オプション ⚫ すべての情報をコピー (データ、属性、タイムスタンプ、セキュリティ、所有者、監査情報) ⚫ ファイルサーバー移行時に最適 ⚫ /r:3 オプション ⚫ 失敗時のリトライ回数(3回まで再試行) ⚫ ファイルアクセス失敗時、ネットワークエラー時などの対策 robocopy とは robocopy D:¥source E:¥destination /mir /copyall /r:3 /w:10 /log+:migration.log /tee -
9 ⚫ robocopy コマンドの使い方 ⚫ X ⚫ X ⚫ x
⚫ /w:10 オプション ⚫ リトライ間隔(10 秒間待機してから再試行) ⚫ ネットワーク負荷軽減、一時的な問題の回復待ち ⚫ /log+:migration.log オプション ⚫ 既存のログファイルへログを追加出力(migration.log に結果を追記) ⚫ コピー状況、エラー、統計情報 ⚫ 移行作業の証跡として必須 robocopy とは robocopy D:¥source E:¥destination /mir /copyall /r:3 /w:10 /log+:migration.log /tee -
10 ⚫ robocopy コマンドの使い方 ⚫ X ⚫ X ⚫ x
⚫ /tee オプション ⚫ 画面とログファイル両方に出力(リアルタイムで進行状況を確認可能) robocopy とは robocopy D:¥source E:¥destination /mir /copyall /r:3 /w:10 /log+:migration.log /tee -
11 ⚫ 例えば共有フォルダを移行したい場合 robocopy とは Client server01 server02 ネットワークドライブとして H、I、Jドライブが見えている状態にしたい
Share_C(¥¥server01¥share_c)(J:) Share_B(¥¥server01¥share_b)(I:) Share_A(¥¥server01¥share_a)(H:) Share_C(¥¥server02¥share_c)(J:) Share_B(¥¥server02¥share_b)(I:) Share_A(¥¥server02¥share_a)(H:) -
12 ⚫ 例えば共有フォルダを移行したい場合 robocopy とは Client server01 server02 ネットワークドライブとして H、I、Jドライブが見えている状態にしたい
Share_C(¥¥server01¥share_c)(J:) Share_B(¥¥server01¥share_b)(I:) Share_A(¥¥server01¥share_a)(H:) Share_C(¥¥server02¥share_c)(J:) Share_B(¥¥server02¥share_b)(I:) Share_A(¥¥server02¥share_a)(H:) robocopy ¥¥server01¥Share_A ¥¥server02¥Share_A /mir /copyall /r:3 /w:10 /log:migration.log /tee まず UNC パスで robocopy -
13 ⚫ 例えば共有フォルダを移行したい場合 robocopy とは Client server01 server02 server02 側の
UNC パスで ネットワークドライブを 再割り当て Share_C(¥¥server01¥share_c)(J:) Share_B(¥¥server01¥share_b)(I:) Share_A(¥¥server01¥share_a)(H:) Share_C(¥¥server02¥share_c)(J:) Share_B(¥¥server02¥share_b)(I:) Share_A(¥¥server02¥share_a)(H:) robocopy ¥¥server01¥Share_A ¥¥server02¥Share_A /mir /copyall /r:3 /w:10 /log:migration.log /tee -
14 ⚫ 例えば共有フォルダを移行したい場合 robocopy とは Client server01 server02 Server02 側の
UNC パスで ネットワークドライブを 再割り当て Share_C(¥¥server01¥share_c)(J:) Share_B(¥¥server01¥share_b)(I:) Share_A(¥¥server01¥share_a)(H:) Share_C(¥¥server02¥share_c)(J:) Share_B(¥¥server02¥share_b)(I:) Share_A(¥¥server02¥share_a)(H:) robocopy ¥¥server01¥Share_A ¥¥server02¥Share_A /mir /copyall /r:3 /w:10 /log:migration.log /tee 実際には一気に robocopy を流すのは危険 • まず共有フォルダのリストを作成する • 共有フォルダ名が正しいか確認する • 共有フォルダを 1 つずつ robocopy する • 成功したか失敗したか判定する • 成功なら次のフォルダの robocopy に進む : : みたいなスクリプトを組みます -
robocopy とは 15 ⚫ (補足)UNC パス ⚫ ネットワーク内のサーバーやプリンターなどのリソースを識別するための規格 ⚫ Unix
コミュニティが発祥 ⚫ Windows では、コンピューター名の前に二重スラッシュかバックスラッシュを付ける ⚫ コンピューターのパスは単一のスラッシュ(/)かバックスラッシュ(¥)で区切る • UNCパスとは何か&使い方:https://jp.minitool.com/lib/unc-path.html server01 server02 Share_C(¥¥server01¥share_c)(J:) Share_B(¥¥server01¥share_b)(I:) Share_A(¥¥server01¥share_a)(H:) Share_C(¥¥server02¥share_c)(J:) Share_B(¥¥server02¥share_b)(I:) Share_A(¥¥server02¥share_a)(H:) -
robocopy で絶対に間違えてはいけない部分 16 ⚫ robocopy とは ⚫ robocopy で絶対に間違えてはいけない部分 ⚫
robocopy の怖い話 ⚫ AI は人間のミスを減らすか? ⚫ おわりに -
19 ⚫ 【コピー元フォルダ】と【コピー先フォルダ】を間違えると 大変なことになります ⚫ X ⚫ X ⚫ /mir
オプションにより、コピー元とコピー先は全く同じ状態になる ⚫ コピー元とコピー先が逆だった場合、何もないコピー先の状態がコピー元に反映される ⚫ →コピー元のファイルが全部消える ⚫ インシデントを防ぐために必ず実施すること ⚫ 全く同じ仮想環境を作成し、まったく同じコマンドでコピーが成功するか確認する ⚫ 複数人でダブルチェックする robocopy で絶対に間違えてはいけない部分 robocopy D:¥source E:¥destination /mir /copyall /r:3 /w:10 /log+:migration.log /tee コピー元とコピー先が正しい robocopy コピー元とコピー先を間違えた robocopy File_A File_B File_C : コピー元 File_A File_B File_C : コピー先 コピー先 File_A File_B File_C : コピー元 -
robocopy の怖い話 21 ⚫ robocopy とは ⚫ robocopy で絶対に間違えてはいけない部分 ⚫
robocopy の怖い話 ⚫ AI は人間のミスを減らすか? ⚫ おわりに -
24 ⚫ お客様拠点のオンプレミスサーバーをデータセンターの仮想サーバーに 移行するプロジェクトを行っていた ⚫ コピースクリプトを robocopy で作成していた ⚫ 以下のようにパスを変えてテストしていた
⚫ X ⚫ X ⚫ その時は急いでいなかった robocopy の怖い話 robocopy D:¥test¥source E:¥test¥destination /mir /copyall /r:3 /w:10 /log+:migration.log /tee -
25 robocopy の怖い話 robocopy D:¥test¥source E:¥test¥destination /mir /copyall /r:3 /w:10
/log+:migration.log /tee D:¥ xxx test source1 source2 xxx xxx source1 source2 xxx server01 E:¥ xxx test source1 source2 xxx server02 robocopy テスト用の データ 本物の業務データ -
26 robocopy の怖い話 休暇中に会社から電話が。 作業の都合でファイルサーバーのコピーを やりたいのですが、xx フォルダに入っている スクリプトを使えばいいですか? まあテストは大体できているから使っても 大丈夫だと思いますが…
事前にテストは実施してください。 あとパスのミスだけは絶対に気を付けてください。 構築部署の私 ※休暇中 運用部署の方 了解です。 -
28 ⚫ 実行されていたスクリプト robocopy の怖い話 robocopy D:¥source E:¥test¥destination /mir /copyall
/r:3 /w:10 /log+:migration.log /tee -
29 robocopy の怖い話 robocopy D:¥source E:¥test¥destination /mir /copyall /r:3 /w:10
/log+:migration.log /tee D:¥ xxx test source1 source2 xxx xxx source1 source2 xxx server01 E:¥ xxx test source1 source2 xxx server02 本物の業務データが テストフォルダ配下に コピーされていた -
30 ⚫ その後 ⚫ お客様に謝罪 ⚫ 間違えていないパスで再度 robocopy スクリプトを実施 ⚫
間違えてコピーされたテストファイル、テストフォルダを削除 (100万回ダブルチェックの上実施) ⚫ 休日に最終差分コピー ⚫ ファイルサーバー切り替え robocopy の怖い話 -
31 ⚫ テストフォルダを作成するのではなく、完全に別の仮想サーバーを作成して 本番環境と全く同じパスでスクリプトを作成した方が良かった ⚫ 他部署担当者の「作業の都合で」の部分をよく確認すべきであった ⚫ 本当にスクリプトの作成者が休暇中、完成していないスクリプトを使って移行を実施せねば ならない事情があったのか ⚫
常識だが、本番データ移行は要手順整備・チェックリスト作成のうえ、 ダブルチェックしながら行うべきであった ⚫ 急なスケジュール変更が発生する場合は作業もリスケするべき robocopy の怖い話 -
AI は人間のミスを減らすか? 32 ⚫ robocopy とは ⚫ robocopy で絶対に間違えてはいけない部分 ⚫
robocopy の怖い話 ⚫ AI は人間のミスを減らすか? ⚫ おわりに -
34 ⚫ AI は人間のミスを減らすか?※私個人の見解です ⚫ AI は人間の作業を手助けしてくれる。ミスを減らす手助けもしてくれる ⚫ 生成 AI
は人間に似ている(優秀だが、ミスも起こす) ⚫ AI は責任を取れない ⚫ 作業判断は人間が行わなければならない世界がもう少し続くのではないか? ⚫ いずれ AI が人間よりはるかに賢くなった時、 「人間が理解できなくてもうまくいくからこれでいい」という パフォーマンス重視の世界がくる可能性がある ⚫ 【もう必要ない?】AIで都知事選を席巻した安野貴博(たかひろ)さんと “AI時代の言語化力”を徹底議論した – YouTube(25 分 37 秒あたり) ⚫ https://youtu.be/FokCbQre-T8?feature=shared&t=1537 AI は人間のミスを減らすか? -
おわりに 35 ⚫ robocopy とは ⚫ robocopy で絶対に間違えてはいけない部分 ⚫ robocopy
の怖い話 ⚫ AI は人間のミスを減らすか? ⚫ おわりに -
37 ⚫ 当初「robocopy の怖い話と IaC の怖い話」の 2 本立てでお送りしようと 思っていたのですが、納まりきらなかったので IaC
の怖い話はこちらを ご覧ください。 おわりに CloudFormationで管理されたシステムの変更でエラー連発した話 - Speaker Deck https://speakerdeck.com/emiki/cloudformationdeguan-li-saretasisutemufalsebian-geng-deeralian-fa-sitahua -
参考 38 ⚫ Robocopy | Microsoft Learn https://learn.microsoft.com/ja-jp/windows-server/administration/windows- commands/robocopy ⚫
[登壇レポート] Storage-JAWS #7 AWS Pi Day 2025直前スペシャル! 「Windows Server に FSx for NetApp ONTAP を iSCSI 接続してみた」という内容で登壇してきました #storagejaws #jawsug | DevelopersIO https://dev.classmethod.jp/articles/storage-jaws-7-aws-pi-day-2025-windows-server-fsx-for-netapp-ontap-iscsi/