Amazonで商品を見るセール会場へ

バックアップが本当に戻せるかを確かめる方法|Windowsで復元テストの手順

バックアップを取っている状態と、そこから戻せる状態は同じではない。

コピー先が途中で止まっていた、対象から外れていたフォルダーがあった、戻したファイルが壊れていた、といった食い違いは、実際に戻すまで表に出ない。

ここでは、いま使っているバックアップが戻せるかどうかを、元のデータに触れずに確かめる手順を整理する。

コマンドはWindows 11のPowerShellで実行して確認している。

目次

復元テストで確かめるのは3つ

戻せるかどうかは、次の3点に分かれる。

確かめること分からないと起きること見る方法
取れているか対象から外れたフォルダーが丸ごと無いファイル数を数えて比べる
戻せるか戻す操作そのものが失敗する別の場所へ実際に戻す
中身が同じか戻ったが開けない、途中で切れているハッシュで突き合わせる
3つは別のこと。1つ確かめても他は分からない

ファイル数だけを比べると、中身が壊れていても気づけない。

逆にハッシュだけを見ると、そもそも対象から外れていたフォルダーには気づけない。

元のデータを上書きしない場所へ戻す

復元テストで最も避けたいのは、テストそのものが元のデータを壊すことである。

戻す先は、元のフォルダーではなく、空のフォルダーを新しく作って指定する。

元の場所へ戻す操作は、テストではなく本番の復旧であり、試す目的で実行しない。

  • 戻す先に、空のフォルダーを1つ作る
  • 元のフォルダーと、戻した先の両方を残したまま比べる
  • 比べ終わるまで、戻した先を消さない

手順1 戻す(robocopyの終了コードを見る)

バックアップ先から、テスト用のフォルダーへコピーする。

robocopy "バックアップ先のパス" "テスト用の空フォルダー" /E /NFL /NDL /NJH /NP

robocopyは終了コードで結果を返すため、画面の見た目ではなくコードを見る。

$LASTEXITCODE
終了コード意味扱い
0コピーするものが無かった対象の指定が合っているかを見る
1ファイルをコピーした成功。次の手順へ
2コピー先にだけ余分なものがある内容を確かめる
3コピーした、かつ余分なものもある内容を確かめる
8以上コピーできなかったものがある失敗として扱う
robocopyの終了コードの読み方

手元で3ファイルをコピーしたときの終了コードは1だった。

0が返る場合はコピーが行われておらず、パスの指定が違っている可能性がある。

8以上が返ったときは、その時点で失敗として扱い、次の手順へ進まない。

手順2 中身が同じかをハッシュで突き合わせる

ファイル数が合っていても、中身が同じとは限らない。

元と戻した先の両方でハッシュを取り、突き合わせる。

function Get-Rel($root) {
  Get-ChildItem $root -Recurse -File | Get-FileHash -Algorithm SHA256 |
    Select-Object @{n='rel';e={$_.Path.Substring($root.Length)}},Hash
}

$a = Get-Rel "元のフォルダー"
$b = Get-Rel "戻した先のフォルダー"
Compare-Object $a $b -Property rel,Hash | Select-Object SideIndicator,rel

パスの先頭を切り落としているのは、置き場所が違っても同じファイルとして比べるためである。

何も出力されなければ、ファイルの並びも中身も一致している。

手元では3ファイルをコピーした直後に実行し、出力は空だった。

壊れていたときの出方

戻した側の1ファイルだけを書き換えてから、同じコマンドを実行した。

SideIndicator rel
------------- ---
=>            \b.txt
<=            \b.txt

同じ相対パスが2行出て、矢印の向きが分かれる。

これは「両方に存在するが、ハッシュが違う」という意味になる。

出方意味
同じrelが2行、矢印が両方向両方にあるが中身が違う
矢印が元の側だけ戻した先にそのファイルが無い
矢印が戻した先だけ元に無いファイルが戻した先にある
Compare-Objectの出方の読み方

ファイル履歴やイメージを使っている場合

Windowsの標準機能を使っている場合も、確かめる形は変わらない。

戻す操作の入り口が違うだけで、別の場所へ戻してハッシュで比べる流れは同じである。

使っている仕組み戻す入り口テストのときの注意
ファイル履歴設定のバックアップから、以前のバージョンを復元復元先を元のフォルダーにしない
OneDriveなどの同期Webの版管理から取り出す同期フォルダーの外へ出して比べる
自分でコピーしているコピー先から取り出すコピー元と同時に開いたまま比べる
仕組みが違っても、別の場所へ戻して比べる点は同じ

ファイル履歴の動作状況は、サービスの状態からも確かめられる。

Get-Service -Name fhsvc | Select-Object Name,DisplayName,Status,StartType

手元の環境ではStatusがStopped、StartTypeがManualと表示された。

この表示は、機能が有効かどうかを直接示すものではないため、設定画面の側もあわせて見る。

点検を続ける形にする

一度戻せたことは、次も戻せることを保証しない。

対象フォルダーが増えたり、保存先の空き容量が尽きたりすると、そこから先が取れなくなる。

  • 月に一度、同じ手順で1つのフォルダーだけ戻して比べる
  • 確かめた日と、そのときのファイル数を書き留める
  • 保存先の空き容量を同じタイミングで見る
  • 対象フォルダーを増やしたら、その月のうちに1回試す

全部を戻すテストは時間がかかるため、続けられる大きさに絞るほうが結果的に回数を重ねられる。

まとめ

  • 取れているか、戻せるか、中身が同じかは別のことなので、3つとも確かめる
  • テストの復元先は、元のフォルダーではなく新しく作った空のフォルダーにする
  • robocopyは画面ではなく終了コードで判断する。1はコピー成功、8以上は失敗
  • Get-FileHashとCompare-Objectで、相対パスとハッシュの組を突き合わせる
  • 同じ相対パスが2行、矢印が両方向に出たら、中身が違っている
  • 月に一度、小さい範囲でよいので続けて試す

コマンドレットの詳細はMicrosoft Learnのリファレンスで確認できる。

Windowsの作業を楽にする道具はPCメソッドのまとめにも置いている。

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

仕事効率化のおすすめ書籍

仕事用PCの選び方

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次