はじめに
システム管理者は3つのタイプに分けられるというよく知られた言葉があります。 すでにバックアップを作成している人と、バックアップが機能していることを作成して確認する人。
ただし、これでは十分ではありません。バックアップシステムのユーザーにとっては、速度などのパラメーターが重要であり、バックアップ自体の速度だけでなく、ファイルのアーカイブだけでなく、回復も重要です。
同意します。50〜100〜1000ギガバイトのアーカイブ全体を読み取って1つのファイルを抽出するのは愚かなことです。
また、これらのアーカイブがインクリメンタルである場合、1つのファイルを目的の日付に復元するには、すべてのアーカイブを順番に読み取る必要があります。 アーカイブファイルがリモートサーバーにある場合、すべてがさらに悪化します。
TARアーカイブ形式を使用する場合は、これを実行します。 結局のところ、これはアーカイブの業界標準であり、多くのバックアップユーティリティで使用されています。
また、この動作の理由は非常に単純です-アーカイブから1つのファイルをプルできるインデックスがありません。
TARには一般に多くの欠点があり、その多くは致命的です。 調査中に遭遇した主な欠点の短いリストを示します。
- インデックスがないため、アーカイブ全体を読み取らずに1つのファイルを取り出すことができません。
- フォーマットの動物園:さまざまなバージョンのGNU tar、さまざまなバージョンのBSD tar。これは、アーカイブの互換性がないことを意味する場合があります。
- 組み込みの暗号化の欠如。
- 選択圧縮の不可能性(たとえば、なぜjpegを圧縮する必要があるのか?)
- アーカイブおよびリカバリ中の絶対に聞き取れないエラー(典型的なエラーメッセージは「アーカイブの予期しないEOF」であり、これは何でも意味します)。
- たとえば、アーカイブ中に一部のファイルが削除されたため、単にアーカイブを作成できず、tarはこの状況を処理しません。
そして、これは私が移動中に思い出したことです。
アーカイバ(zip、rar、7zip)のほか、バックアップ用のあらゆる種類の巨大なシステム(バキュラなどのオープンソース(または条件付きでオープン)、独自仕様)についてもかなり広範な調査を実施しました。
そして彼はアーカイブ形式を見つけました。それは多かれ少なかれ私と会社をあらゆる面で整理し、私の仕事に適していました。
darアーカイバに注意を払い、その長所と短所について簡単に話すことをお勧めします(それらは存在しますが、それらはほとんどなく、一緒に暮らすことができます)。次に、実際の例を取り上げます。
長所
- アーカイブファイルにはインデックスがあり、さらに多くの場合、インデックス自体を個別に配置してバックアップすることができます。これにより、インデックスが破損している場合にアーカイブを復元できます。
- 通常の差分および増分バックアップだけでなく、減分も行います。
- 暗号化(フグ、aes、twofish、ヘビ、カメリア)。
- 特定の拡張子を持つファイルを圧縮できます。
- 特定の拡張子のファイルは圧縮できません。
- アーカイブと解凍のプロセス(ファイルの削除、変更、移動などへの対応方法)を柔軟に制御できます。
- darにはアーカイブマネージャーが付属しており、ファイルの検索時にすべてのアーカイブを連続して復元せずに、必要なものだけを自動的に選択できます。
これらは主な利点に過ぎず、一般にdarは機能が非常に豊富であり、人間からの引用はこれが何よりも優れていると言っています: "...コマンドラインオプションに使用可能な未使用文字がないため..."。
プロジェクトは活発に開発されており、開発者によって十分にサポートされています。 数日以内に質問に対する回答を受け取りましたが、回答は常に非常に有益です。 私は同じレベルのサポートを持つプロジェクトを1つだけ知っています-libguestfs 、ところで、私はすでにそれについて書いています。
短所
- 非現実的な量のオプションがあり、アーカイブ/解凍中にさまざまなファイルの変更にどのように反応するかを真剣に検討すると、夢中になります。
- パイプを介した(たとえばsshを介した)完全に明白なバックアップ/復元プロセス。
- 特定の状況では、darはユーザーの応答を必要とする場合があります(これはコマンドに引数を追加することで行われますが、原則として、特に最初のdarスクリプトを書いている間は、この対話性は非常に予期しません)。
これが欠陥であることではありませんが、darは非常に冗長です。 tarが操作後に1行を書き込む場合、darは非常に詳細に書き込みます。 そしてもちろん、それを閉じることができます(誰もまだエスケープしていません
>/dev/null 2>&1
)。
ワークショップ
観客の一部はすでにお気に入りのディストリビューションにdarをインストールし、自分で男の本を読んでいると思います。 滞在した人のために、私はそれを使用する方法を教えます。 そして、愛好家が戻ってきたら、この素晴らしいユーティリティの使い方をお見せし、
man dar
ページにある基本的な概念についてお話します。
アーカイブ
最初の例、最も簡単なもの:
dar -R $HOME -c /mnt/backup/archive
/ホームディレクトリをアーカイブします。
いくつかのディレクトリを除外しましょう(〜/ movies、〜/ downloads):
dar -R $HOME -c /mnt/backup/archive -P movies -P downloads
アーカイブの名前には.darファイル拡張子が記載されていないことに誰もが既に気付いていると思います。 そして、図1はファイル名のどこかに由来しています。これは、darが元々リムーバブルメディア(CD、DVD、またはテープドライブなど)へのバックアップを目的としていたためです。このスライスが最初です。 そして、キー
-s 100M
と唯一のものを指定しなかったので。 Darには、特定の操作を実行するときにスクリプトを実行するためのキーもあります(tarにもそのようなキーがあります)。 たとえば、スライスが記録されている場合、スクリプトを実行してメディアを変更し、その後再度変更することができます。
一般に、アーカイブをいくつかの部分に分割しても、誰も驚かないでしょう。
デフォルトでは、圧縮なしのdarアーカイブ、および圧縮を有効にするには、
-z algo:level
スイッチを渡す必要があります。 サポートされているのはgzip、bzip2、lzoです。 出力では、.gzなどを追加せずに、同じ.N.darファイルを取得します。 アーカイバ自身は、彼の中にあるものを知っています。
次の利点に移りましょう-アーカイブ中の圧縮の例外:
dar -R $HOME -c /mnt/backup/archive -Y "*.txt" "*.fb2" -Z "*.mp4"
-Y
スイッチは圧縮を含めるファイルを示し、
-Z
は不要なファイルを示します。 さらに、デフォルトでは、例外の優先度が高くなっています(ただし、この動作は必要に応じて変更できます)。
そして、差分バックアップ、増分バックアップ、そして最もおいしいバックアップを開始しましょう。
誰かがこれが何を意味するのかわからない場合-恐れることなく、私は言います
- 差分:最初に完全なコピーが作成され、それ以降は、このコピーとファイルの現在の状態との差のみが保存されます。
- 増分:完全なコピーが作成され、翌日に完全な状態と現在の状態の差が保存され、3日目に-2日目と3日目の差になります。
- デクリメンタル:完全なコピーが毎日保存され、現在の状態と昨日の違いが保存されます。
同時に、増分バックアップと減分バックアップの両方を同時に実装する必要はありません。 したがって、2週間でバックアップは次のようになります(曜日が一番上、バックアップタイプd-が下にデクリメント、+ iがインクリメンタル):
MTWTFSSMTWTFS
d- d- d- d- d- d- f +i +i +i +i +i +i
これにより、1回のフルコピーが可能になり、スペースを大幅に節約できます。
また、増分アーカイブを作成するために必要なのはインデックスだけであることも知っておく必要があります。 darの観点では、インデックスはディレクトリと呼ばれ、ファイルにインデックスを保存することはディレクトリ分離と呼ばれます。 また、差分アーカイブは増分の特殊なケースであるため、増分/減分という用語のみを使用します。
それでは、増分アーカイブを作成しましょう。
dar -R $HOME -c /mnt/backup/archive_monday -A /mnt/backup/archive
それでは、もう1つやってみましょう。
dar -R $HOME -c /mnt/backup/archive_tuesday -A /mnt/backup/archive_monday
あなたはその考えを理解していますか? さあ、先に進みましょう。 ここで、インデックスを個別に保存しましょう(アーカイブから切り取らず、単にコピーします。mbrバックアップと同様です。結局、ブートローダーをバックアップしますか?)増分アーカイブを作成するだけでマルチギガバイトのバックアップを有効にする必要はありません。 現在、「隔離中に分離」を行っていますが、カタログは既成のアーカイブから取得することにより、いつでも保存できます。
dar -R $HOME -c /mnt/backup/archive_wednesday -A /mnt/backup/archive_tuesday -@ /mnt/backup/CAT_archive_wednesday
そして、CAT アーカイブの水曜日インデックスのみを使用して、もう一度バックアップを作成しましょう。
dar -R $HOME -c /mnt/backup/archive_thursday -A /mnt/backup/CAT_archive_wednesday -@ /mnt/backup/CAT_archive_thursday
さて、おなじみの増分バックアップを整理しましたが、減分バックアップはどのようなものですか?
そもそも、昨日の完全なアーカイブが1つ必要で、そこからデクリメンタルになり、今日は完全になります。
dar -R $HOME -c /mnt/backup/archive_sunday
dar -R $HOME -+ /mnt/backup/archive_saturday_decremental -A /mnt/backup/archive_saturday -@ /mnt/backup/archive_sunday -ad
一般的に、すべてがここで少し混乱します(慣れる)。これは、ドキュメントによると、2つのアーカイブを結合するために作成されたためです。-
-@
デクリメント。 ある意味では、これは論理的です。 たぶん。
さて、私たちは真実の瞬間に到達しました-データ復旧。 結局、復元できないバックアップは、作成されていないバックアップに等しいことを誰もが理解していますか?
復元する前に、アーカイブを確認するとよいでしょう。
dar -t /mnt/backup/archive_sunday
darがエラーコードを返さなかった場合(man'aの最後に、darが返す可能性のあるすべての終了コードをリストします)、復元できます。
mkdir sunday
dar -x /mnt/backup/archive_sunday -R sunday
リモートマシン操作
ファイル回復
パイプを介して(たとえば、sshを介して)リモートマシンからファイルを復元するのは簡単ではないことを渡すことで既に言及しました。
それがどのように機能するかを詳細に説明しようとします。
すべての問題は、1つのdarファイルを復元するためにインデックスを読み取る必要があるという事実に関連しています。 ストリーミング読み取りモードのtarと同じ方法で使用する場合(--sequential-readスイッチ)、このような問題は発生しません。
インデックスの読み取りに関する問題を解決するために、2つのバージョンのdarが作成されました。
- プライマリ:dar、回復する必要があると言います。
- ヘルパー:dar_slave。コマンドを受け取り、復元されたデータをdarに渡し、darはディスクに書き込みます。
したがって、作業のスキーム(回復用)は次のようになります。
(2) --> dar --> (1) --> dar_slave archive --> (2)
- dar through pipeは、dar_slave:「ファイルAを復元したい」と言います。
- dar_slaveは、アーカイブファイルのインデックスを読み取り、ファイルが配置されているオフセットを見つけ、それをstdoutに渡します。stdoutはdarを読み取り、結果のファイルをディスクに書き込みます。
問題は、ファイルをdar_slaveからdarに転送することです。 このような「リング」データ転送では、mkfifoを使用して小さな松葉杖を作成する必要があります。
mkfifo /tmp/fifo<.code>
dar -x -i /tmp/fifo -R sunday | ssh user@host dar_slave sunday > /tmp/fifo
rm /tmp/fifo
, , , NFS.
: , :
dar -R $HOME -c - -A /mnt/backup/CAT_archive_wednesday -@ /mnt/backup/CAT_archive_thursday | ssh user@host 'cat > archive_thursday'
dar dar_manager, dar. , , , , (, , , ).
, , .
, , , : production-, , , , , .
dar dar_static: , .
, ( ), dar. Ubuntu 12.04 , dar 2.4.2, / . dar 2.4.12 .
, , 2.4, dar 2.3 .
mkfifo /tmp/fifo<.code>
dar -x -i /tmp/fifo -R sunday | ssh user@host dar_slave sunday > /tmp/fifo
rm /tmp/fifo
, , , NFS.
: , :
dar -R $HOME -c - -A /mnt/backup/CAT_archive_wednesday -@ /mnt/backup/CAT_archive_thursday | ssh user@host 'cat > archive_thursday'
dar dar_manager, dar. , , , , (, , , ).
, , .
, , , : production-, , , , , .
dar dar_static: , .
, ( ), dar. Ubuntu 12.04 , dar 2.4.2, / . dar 2.4.12 .
, , 2.4, dar 2.3 .
mkfifo /tmp/fifo<.code>
dar -x -i /tmp/fifo -R sunday | ssh user@host dar_slave sunday > /tmp/fifo
rm /tmp/fifo
, , , NFS.
: , :
dar -R $HOME -c - -A /mnt/backup/CAT_archive_wednesday -@ /mnt/backup/CAT_archive_thursday | ssh user@host 'cat > archive_thursday'
dar dar_manager, dar. , , , , (, , , ).
, , .
, , , : production-, , , , , .
dar dar_static: , .
, ( ), dar. Ubuntu 12.04 , dar 2.4.2, / . dar 2.4.12 .
, , 2.4, dar 2.3 .
mkfifo /tmp/fifo<.code>
dar -x -i /tmp/fifo -R sunday | ssh user@host dar_slave sunday > /tmp/fifo
rm /tmp/fifo
, , , NFS.
: , :
dar -R $HOME -c - -A /mnt/backup/CAT_archive_wednesday -@ /mnt/backup/CAT_archive_thursday | ssh user@host 'cat > archive_thursday'
dar dar_manager, dar. , , , , (, , , ).
, , .
, , , : production-, , , , , .
dar dar_static: , .
, ( ), dar. Ubuntu 12.04 , dar 2.4.2, / . dar 2.4.12 .
, , 2.4, dar 2.3 .
mkfifo /tmp/fifo<.code>
dar -x -i /tmp/fifo -R sunday | ssh user@host dar_slave sunday > /tmp/fifo
rm /tmp/fifo
, , , NFS.
: , :
dar -R $HOME -c - -A /mnt/backup/CAT_archive_wednesday -@ /mnt/backup/CAT_archive_thursday | ssh user@host 'cat > archive_thursday'
dar dar_manager, dar. , , , , (, , , ).
, , .
, , , : production-, , , , , .
dar dar_static: , .
, ( ), dar. Ubuntu 12.04 , dar 2.4.2, / . dar 2.4.12 .
, , 2.4, dar 2.3 .
mkfifo /tmp/fifo<.code>
dar -x -i /tmp/fifo -R sunday | ssh user@host dar_slave sunday > /tmp/fifo
rm /tmp/fifo
, , , NFS.
: , :
dar -R $HOME -c - -A /mnt/backup/CAT_archive_wednesday -@ /mnt/backup/CAT_archive_thursday | ssh user@host 'cat > archive_thursday'
dar dar_manager, dar. , , , , (, , , ).
, , .
, , , : production-, , , , , .
dar dar_static: , .
, ( ), dar. Ubuntu 12.04 , dar 2.4.2, / . dar 2.4.12 .
, , 2.4, dar 2.3 .
mkfifo /tmp/fifo<.code>
dar -x -i /tmp/fifo -R sunday | ssh user@host dar_slave sunday > /tmp/fifo
rm /tmp/fifo
, , , NFS.
: , :
dar -R $HOME -c - -A /mnt/backup/CAT_archive_wednesday -@ /mnt/backup/CAT_archive_thursday | ssh user@host 'cat > archive_thursday'
dar dar_manager, dar. , , , , (, , , ).
, , .
, , , : production-, , , , , .
dar dar_static: , .
, ( ), dar. Ubuntu 12.04 , dar 2.4.2, / . dar 2.4.12 .
, , 2.4, dar 2.3 .
mkfifo /tmp/fifo<.code>
dar -x -i /tmp/fifo -R sunday | ssh user@host dar_slave sunday > /tmp/fifo
rm /tmp/fifo
, , , NFS.
: , :
dar -R $HOME -c - -A /mnt/backup/CAT_archive_wednesday -@ /mnt/backup/CAT_archive_thursday | ssh user@host 'cat > archive_thursday'
dar dar_manager, dar. , , , , (, , , ).
, , .
, , , : production-, , , , , .
dar dar_static: , .
, ( ), dar. Ubuntu 12.04 , dar 2.4.2, / . dar 2.4.12 .
, , 2.4, dar 2.3 .
mkfifo /tmp/fifo<.code>
dar -x -i /tmp/fifo -R sunday | ssh user@host dar_slave sunday > /tmp/fifo
rm /tmp/fifo
, , , NFS.
: , :
dar -R $HOME -c - -A /mnt/backup/CAT_archive_wednesday -@ /mnt/backup/CAT_archive_thursday | ssh user@host 'cat > archive_thursday'
dar dar_manager, dar. , , , , (, , , ).
, , .
, , , : production-, , , , , .
dar dar_static: , .
, ( ), dar. Ubuntu 12.04 , dar 2.4.2, / . dar 2.4.12 .
, , 2.4, dar 2.3 .
mkfifo /tmp/fifo<.code>
dar -x -i /tmp/fifo -R sunday | ssh user@host dar_slave sunday > /tmp/fifo
rm /tmp/fifo
, , , NFS.
: , :
dar -R $HOME -c - -A /mnt/backup/CAT_archive_wednesday -@ /mnt/backup/CAT_archive_thursday | ssh user@host 'cat > archive_thursday'
dar dar_manager, dar. , , , , (, , , ).
, , .
, , , : production-, , , , , .
dar dar_static: , .
, ( ), dar. Ubuntu 12.04 , dar 2.4.2, / . dar 2.4.12 .
, , 2.4, dar 2.3 .