別のアーカイブストレージ形式:dar

はじめに



システム管理者は3つのタイプに分けられるというよく知られた言葉があります。 すでにバックアップを作成している人と、バックアップが機能していることを作成して確認する人。

ただし、これでは十分ではありません。バックアップシステムのユーザーにとっては、速度などのパラメーターが重要であり、バックアップ自体の速度だけでなく、ファイルのアーカイブだけでなく、回復も重要です。

同意します。50〜100〜1000ギガバイトのアーカイブ全体を読み取って1つのファイルを抽出するのは愚かなことです。

また、これらのアーカイブがインクリメンタルである場合、1つのファイルを目的の日付に復元するには、すべてのアーカイブを順番に読み取る必要があります。 アーカイブファイルがリモートサーバーにある場合、すべてがさらに悪化します。

TARアーカイブ形式を使用する場合は、これを実行します。 結局のところ、これはアーカイブの業界標準であり、多くのバックアップユーティリティで使用されています。

また、この動作の理由は非常に単純です-アーカイブから1つのファイルをプルできるインデックスがありません。

TARには一般に多くの欠点があり、その多くは致命的です。 調査中に遭遇した主な欠点の短いリストを示します。



そして、これは私が移動中に思い出したことです。

アーカイバ(zip、rar、7zip)のほか、バックアップ用のあらゆる種類の巨大なシステム(バキュラなどのオープンソース(または条件付きでオープン)、独自仕様)についてもかなり広範な調査を実施しました。

そして彼はアーカイブ形式を見つけました。それは多かれ少なかれ私と会社をあらゆる面で整理し、私の仕事に適していました。

darアーカイバに注意を払い、その長所と短所について簡単に話すことをお勧めします(それらは存在しますが、それらはほとんどなく、一緒に暮らすことができます)。次に、実際の例を取り上げます。

長所





これらは主な利点に過ぎず、一般にdarは機能が非常に豊富であり、人間からの引用はこれが何よりも優れていると言っています: "...コマンドラインオプションに使用可能な未使用文字がないため..."。

プロジェクトは活発に開発されており、開発者によって十分にサポートされています。 数日以内に質問に対する回答を受け取りましたが、回答は常に非常に有益です。 私は同じレベルのサポートを持つプロジェクトを1つだけ知っています-libguestfs 、ところで、私はすでにそれについて書いています。

短所





これが欠陥であることではありませんが、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は不要なファイルを示します。 さらに、デフォルトでは、例外の優先度が高くなっています(ただし、この動作は必要に応じて変更できます)。

そして、差分バックアップ、増分バックアップ、そして最もおいしいバックアップを開始しましょう。

誰かがこれが何を意味するのかわからない場合-恐れることなく、私は言います



同時に、増分バックアップと減分バックアップの両方を同時に実装する必要はありません。 したがって、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が作成されました。



したがって、作業のスキーム(回復用)は次のようになります。

(2) --> dar --> (1) --> dar_slave archive --> (2)


  1. dar through pipeは、dar_slave:「ファイルAを復元したい」と言います。
  2. 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 .

Source: https://habr.com/ru/post/J215449/


All Articles