見出し画像

robocopy とシャドウコピー

AD など複数の役割を兼任したサーバーをファイルサーバーとしてリインストールした記録です。
2019 年に [PRESS] で掲載していたものを再編集した記事です。

https://pressblog.me

ロバストなコピーを

ロバストとは、堅牢な、頑強な、強靭な、などの意味を持つ英単語。 「ロバストネス」(robustness:堅牢性)はその名詞形。 様々な分野でそれぞれ固有の意味を持つ術語として用いられる。

https://e-words.jp/w/ロバスト.html

記憶域は Windows Server 2012 で初めて採用され、その後 Windows7 でも使えるようになった機能です。内容は、複数のストレージを一つのストレージとして使えるようにする仮想化技術です。

MCP を取得するときに勉強したときにその存在を知りまして、理解のために設定しました。

ですが、サーバーにマウントしたストレージ全てを仮想化していたため、今回の再インストールで追加ストレージの枠がなく困りました。僕自身の技術もなくて復旧ができませんでした。
そのため今回は 2TB と 3TB を記憶域にして実用のドライブとして利用し、買い足した 4TB のディスクは単体でバックアップストレージとして利用することにしました。

また古典的な方法になりますが、バックアップツールとしてタスクスケジューラに robocopy のバッチを設定します。✍️

robocopy コマンドは、Windows Vista から追加された高機能コピーツールで差分チェックしてコピーをしてくれるインテリジェントなコマンドです。ちなむと、robo は ロボットの略ではなくて「Robust File Copy」です。確実なファイルコピーって感じですかね☝️

そして、バックアップとは別にシャドウコピーも設定してロバストなコピーを設定します。

Robust File Copy


今回、バックアップに robocopy を使おうと思ったのは記憶域とバックアップのファイルを完全に同期させたかったからです。xcopy でバックアップすると稼働中のストレージでファイルを削除してもバックアップ側は削除されません。

一眼レフで撮影したサッカーの写真 📸 を例にして書いてみます。

  • 昨日、息子のサッカーの試合がありました。

  • RAW データを有効にして撮影しました。SD カードには 32GB 分のデータが記録されました。

  • その日は疲れていたので写真の整理はせずに「未整理」というフォルダーを作って、サーバーにまるっと保存しました。

  • 深夜に、その日のバックアップタスクが動いて 32GB の「未整理」フォルダーがまるっとバックアップストレージに xcopy されました。

  • 翌週に時間が取れたので、良い写真だけ選抜してファイル名も「一試合目」とか「PK戦」などとリネームして整理してサーバーに保存しました。

  • 🖼 その際、不要な「未整理」フォルダーは削除しました。

  • 深夜にバックアップタスクが動いて「一試合目」や「PK戦」といった整理したフォルダーがバックアップストレージに xcopy されました。

「未整理」フォルダーと整理したフォルダーが冗長

このように、xcopy 運用だとバックアップ先のフォルダに「未整理」フォルダーと整理済みのフォルダーが冗長して保存されることになります。

この問題に関しては、毎日バックアップストレージをクリアーしてからフルバックアップすれば解決しますが、時間もかかるし書き込み回数が増えてディスクの寿命を縮めます。😇 そのためミラリングが理想でした。ただ、前回も記載しましたが RAID はシステムがダウンしたときに復元が手間なので嫌。

ということで、robocopy を採用しました。バッチファイルは以下の通りです👇

バッチファイル

robocopy "D:\Documents" "Z:\Documents" /MIR /XD "System Volume Information"
robocopy "D:\Movie" "Z:\Movie" /J /MIR /XD "System Volume Information"
robocopy "D:\Music" "Z:\Music" /MIR /XD "System Volume Information"
robocopy "D:\Pictures" "Z:\Pictures" /MIR /XD "System Volume Information"

/MIR:同期します。コピー元になくコピー先にある場合(場所移動やコピー等)は、コピー先にあるファイルを削除します。
/J:バッファ無しで I/O でコピー。大きなファイルサイズのデータに適しているらしいので、Movie フォルダに使ってみました。
/XD:除外フォルダを指定します。VSSフォルダはコピー不要なので除外します。

https://docs.microsoft.com/ja-jp/windows-server/administration/windows-commands/robocopy

※ Windows10 では、"System Volume Information" を除外処理が自動でされるよう改修されたようです。

ドキュメント フォルダに設置しました

早速バッチファイルを実行してみました。完全に同期しているのでコピーや削除の処理がない状態で計測しましたが 5分ぐらいで終わりました。

タスク スケジューラに登録

バッチファイルは問題なく動作したため、タスク登録します。
スタートメニューから「タスク...」と入力すると、候補に「タスク スケジューラ」が出てくるので選択して起動します。

スタートメニューから検索

「タスク スケジューラ ライブラリ」を右クリックし「基本タスクの作成」を選択します。「基本タスクの作成ウィザード」が開きます。「次へ(N)」を押下します。

基本タスクの作成ウィザード

名前と説明を入力して「次へ(N)」

基本タスクの作成

トリガーは「毎日」を選択しました。
「次へ(N)」

トリガー

一番作業をしなさそうな時間帯(毎朝 05:00)に設定しました。
「次へ(N)」

トリガー > 毎日(時間指定)

「操作」は バッチファイルを実行させるので「プログラムの開始(T)」を選択して、「次へ(N)」

操作

「プログラムの開始」が表示されるので、ドキュメントに保存したバッチファイルを指定して
「次へ(N)」

プログラムの開始

「完了」

完了

以上、ロバストなコピーの実装でした。

シャドウコピー

「あー‼️😱うっかりサーバーのデータ消しちゃった❗️サーバーはごみ箱ないよー😭」

ネットワークドライブに保存されたデータは、削除するときに ごみ箱 に入らず一発で消えてしまいます。オペミスで消してしまうとファイル復旧ソフトなどに頼らないと救出できないので厄介です。

また、誤ってファイルを更新してしまう可能性もあります。ファイルのバージョニングは有効にしておきたいです。Windows Server は VSS (ボリュームシャドウコピーサービス) というバージョニングツールが利用できます。
有効にするだけでデフォルトで一日 2回の差分スナップショットを取得してくれます。
ファイルを復旧したいときは、ファイルやフォルダのコンテキストメニューかプロパティにある「以前のバージョン」から利用できます。ファイルを消してしまったとき以外にも、誤って更新したときに 以前のバージョンに戻せるので昔からビジネスで採用されることが多い印象です。

シャドウコピーの設定方法

エクスプローラでドライブを右クリックし、[シャドウ コピーの構成 (W)...] を選択します。

シャドウ コピーの構成

[有効(E)] をクリックして設定します。

有効をクリック

「今すぐ作成(C)」をクリックするとスケジュールではなく即時でスナップショットが作成されます。

シャドウコピーの確認方法

シャドウコピーを有効にしたら、ファイルを更新します。ファイルのプロパティから「以前のバージョン」を選択します。以前のバージョンが表示されます。

ファイルを誤って消してしまったときは?

親フォルダの以前のバージョンの中にありますので、コピーして復元させることができます!

シャドウ コピーの対象を除外するには?

シャドウコピーは増分バックアップ方式なので、頻繁に更新すれば更新するほどサイズが肥大していきます。我が家だと、ムービーを保存しているフォルダーは各ムービーファイルの容量が大きいのと、ドキュメントと違い一度保存したら更新することがないため除外します。(誤って削除した場合は、バックアップストレージから救出できます。)

レジストリをいじると除外フォルダが指定できます。

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\BackupRestore\FilesNotToSnapshot
レジストリ設定

以上、バックアップと VSS を利用したロバストなコピーの設定記録でした。

いいなと思ったら応援しよう!