TT Lab
はじめる
学ぶ 学習パス コース

バックアップとリストア

バックアップ検証の自動化

TT Labで続きを見る

目標

バックアップの整合性を3段階で検証し、段階ごとの終了コードを持つ検証スクリプトを作成します。

なぜ重要なのか

「バックアップが動いている」と「バックアップが有効である」は別のことです。検証は3段階です。存在するか、読めるか、実際に復旧できるかです。前の2つは自動化でき、それだけでも静かな失敗の大半を捕まえられます。さらに、段階ごとに異なる終了コードを返すと、監視でどこで壊れたのかがすぐにわかります。「バックアップ検証の失敗」より「圧縮ストリームの破損」のほうが、ずっと役に立つアラートです。

ステップ

  1. /root/bvディレクトリを作成し、/root/bkの下の.tar.gzファイルに対するsha256のマニフェストを/root/bv/manifest.sha256に作成してください。
  2. マニフェストで検証を実行し、結果を/root/bv/check.txtに保存してください。すべての行が正常でなければなりません。
  3. /root/bk/full.tar.gzの圧縮ストリームの整合性を検査し、終了コードを/root/bv/gzip.txtにrc=0の形式で書いてください。
  4. 同じファイルのアーカイブ構造を検査し、終了コードを/root/bv/tarlist.txtにrc=0の形式で書いてください。
  5. /root/bv/corrupt.tar.gzを作成してください。/root/bk/full.tar.gzをコピーしたあと、途中のバイトを破損させる必要があります。そして、圧縮の検査が失敗することを確認し、その出力を/root/bv/corrupt-detected.txtに保存してください。
  6. /root/bv/last-successファイルに現在の時刻をISO形式(date -Is)で記録し、そのファイルが24時間以内かどうかを判定した結果を、/root/bv/fresh.txtにFRESH=yesの形式で書いてください。
  7. /root/bv/verify.shを作成してください。最初の引数でアーカイブのパスを受け取り、次のように動作する必要があります。
    • ファイルがない、またはサイズが0なら、終了コード1
    • 圧縮ストリームが壊れていれば、終了コード2
    • アーカイブの構造が壊れていれば、終了コード3
    • すべて通過すれば、終了コード0とともにOKを含むメッセージを出力 採点ツールが、正常なアーカイブとステップ5の破損アーカイブの両方で実行します。
  8. /root/bv/report.txtを次の4行で作成してください。 MANIFEST_OK=yes / CORRUPT_DETECTED=yes / SCRIPT_OK_RC=0 / SCRIPT_BAD_RC=<손상 아카이브에 대해 스크립트가 낸 종료 코드>(プレースホルダーは、破損したアーカイブに対してスクリプトが返した終了コードです)

参考

チェックサムのマニフェストを作る

/root/bvディレクトリを作成し、/root/bkの下の.tar.gzファイルに対するsha256のマニフェストを/root/bv/manifest.sha256に作成してください。

検証するディレクトリで相対パスで作っておくと、あとの検査が楽になります。

マニフェストで検証する

マニフェストで検証を実行し、結果を/root/bv/check.txtに保存してください。すべての行が正常でなければなりません。

sha256sumには、マニフェストを読み込んで検査するオプションがあります。すべての行が正常でなければなりません。

圧縮ストリームを検査する

/root/bk/full.tar.gzの圧縮ストリームの整合性を検査し、終了コードを/root/bv/gzip.txtにrc=0の形式で書いてください。

gzipには、圧縮ファイルの整合性だけを検査するオプションがあります。成功したときは何も出力されません。

アーカイブの構造を検査する

同じファイルのアーカイブ構造を検査し、終了コードを/root/bv/tarlist.txtにrc=0の形式で書いてください。

一覧を出力しますが、画面には出さずに捨てて、終了コードだけを見ます。

破損を再現して検出する

/root/bv/corrupt.tar.gzを作成してください。/root/bk/full.tar.gzをコピーしたあと、途中のバイトを破損させる必要があります。そして、圧縮の検査が失敗することを確認し、その出力を/root/bv/corrupt-detected.txtに保存してください。

コピーを作って、バイトを付け足すか反転させてください。元のファイルには触れてはいけません。

最後に成功した時刻を記録する

/root/bv/last-successファイルに現在の時刻をISO形式(date -Is)で記録し、そのファイルが24時間以内かどうかを判定した結果を、/root/bv/fresh.txtにFRESH=yesの形式で書いてください。

成功した時刻をファイルに残して、そのファイルの経過時間を検査する方式です。ISO形式が扱いやすいです。

段階ごとの検証スクリプトを書く

/root/bv/verify.shを作成してください。最初の引数でアーカイブのパスを受け取り、次のように動作する必要があります。

引数でアーカイブのパスを受け取り、失敗した段階ごとに異なる終了コードを返してください。採点ツールが、正常なアーカイブと破損したアーカイブの両方で実行します。

検証レポートを作る

/root/bv/report.txtを次の4行で作成してください。 MANIFEST_OK=yes / CORRUPT_DETECTED=yes / SCRIPT_OK_RC=0 / SCRIPT_BAD_RC=<손상 아카이브에 대해 스크립트가 낸 종료 코드>(プレースホルダーは、破損したアーカイブに対してスクリプトが返した終了コードです)

値は実際の実行結果でなければなりません。終了コードは、スクリプトが実際に返した値です。