夜のバックアップ。 すべてをシンプルかつ明確にします

画像






KDPV、誇大宣伝のため、炎ではありません。



バックアッププロセスの苦痛を緩和するための私の試みは、少なくとも少しです。 私が提案した要件とその実装方法。



この記事はバージョン管理システムに関するものではないとすぐに言います。 何人がCAD図面をGitに入れていますか? 100メガバイトのグラフィックファイルですか? 毎日? クラウドストレージについてではありません。 特定のニーズの実装に関する記事。友人や同僚が通常のMS Windowsを使用して、自宅やオフィスで何かを作成し、何度も表明しています。



図面内のページを削除したり、スケッチ内のレイヤーを組み合わせたりするのは1週間前には価値がないと気づいたら。 増分バックアップであっても、バックアップが作成されたとしましょう。 この時点で、私が最後にやりたいことは、コンテナからファイルを取得する方法、コマンドラインキーをグーグル検索する方法、およびこれらすべてを理解することです。 私は最も簡単なことを望んでいます-任意のファイルマネージャーがファイルの最新バージョンを見つけるか、1週間前に、コンテンツのハッシュではなく名前でそれが優れています。 間違ったファイルですか? たぶん2週間前に必要ですか?



だから私の開発がありました。 彼女のブロと呼ばれます。 暗号化は一切解除されません。



首謀者はrdiff-backupユーティリティでしたが、「致命的な欠陥」がありました。 Pythonで書かれており、データを圧縮テキストファイルに保存します。 彼女が勤務日の終わりに働いたとき、または就寝の準備をしているとき、20分間待つことは受け入れられませんでした。 非常に長い名前は処理できません。 必要なファイルを1日前にn回の編集から必要に応じて「巻き戻す」ことができると考えるのは恐ろしいことです。



例として、フォルダーをバックアップする方法を示します。



buro --backup --srcdir="   " --dstdir="  "
      
      





dstdirとして指定されたフォルダーにburo.dbファイルとミラーフォルダーが作成されます。これは、srcdirフォルダーの完全なコピーになります。 次回同じコマンドを実行すると、バックアップ開始タイムスタンプと呼ばれるサブフォルダーがdstdirフォルダーに作成され、前回の起動と比較して、変更または削除されたファイルが移動されます。 次のようになります。



<2017-06-14T00-01-34.771>

< >

1.doc

<2017-06-15T00-57-35.858>

.xls

<mirror>

< >

1.doc

2.doc

< >

Vivaldi.mp3

.xls

buro.db






ご覧のとおり、ファイルとその以前のバージョンをファイルマネージャに取得する機能は保持されていました。 保存された名前と方法。 やった!



リザーブからのファイルは、次のコマンドによって復元されます。



 buro --restore --srcdir=" " --dstdir=" "
      
      





ここではすべてが簡単です。 特定の日付のフォルダーの状態が必要な場合は、–timestamp引数を追加し、「YYYY-MM-DD HH:mm:SS.SSS」の形式で日付を指定します。次に例を示します。



 buro --restore --srcdir="z:\backup" --dstdir="d:\documents" --timestamp=”2017-06-15 00:00:00.000
      
      





バックアップ状態の正確な時間を指定する必要はありません。中間状態を指定できます。



増分は多くのスペースを占有しますか? 手を削除する必要はありません。パージコマンドがあります。 例:



 buro --purge --srcdir="  " --older="P30D"
      
      





引数olderは、特定の日付、またはISO 8601形式の期間を示します(上記の例では、P1Y2M3DT4H5M6S、30日の期間が選択されています)。



しかし、まったく同じVisual Studioでさえ、毎回数メガバイトのサービスファイルを生成します。 場所は無料ではありません。 除外するファイルマスクとフォルダーを構成しますか? Pfff ...ファイル圧縮オプションがあります! --compress引数を--backupコマンドに追加すると、各ファイルはbzip2アーカイブに変換されます。 拡張子「.bz2」もファイル名に追加され、圧縮率は1〜9の数値で指定されます(デフォルトでは5)。 例:



 buro --backup --srcdir="d:\myprojects" --dstdir="g:\backup" --compress=9
      
      





少なくとも私のファイルマネージャーでは、ファイルを引き出すことができます。 NTFS圧縮オプションがさらに圧縮されるとは思わない。



Buroが開発した私の典型的なバックアップシナリオは、リムーバブルメディアまたはネットワークドライブに保存することです。 データは十分に管理されていない環境に転送されるため、機密性は損なわれません。 リムーバブルメディア、特にネットワークドライブの暗号化は、特に他の場所でファイルの操作を続ける予定の場合、常にちょっとした悲しいトピックです。 しかし、解決策があります! 組み込みの暗号化。 --passwordオプションが--backupコマンドに追加されます。 拡張子「.encrypted」がファイル名に追加されます。圧縮と暗号化を同時に使用できますが、拡張子は「.encrypted」のままです。



企業に不適切なセキュリティアカウントがあり、「Salary manual.xls.encrypted」ファイルの出所について質問があるとします。 このために、名前を暗号化するオプション--encodenamesが実装されています。



例。 ファイルがあるディレクトリ



<.github>

<doc>

<fmt>

<support>

<test>

.gitignore

.travis.yml

Android.mk

ChangeLog.rst

CMakeLists.txt

CONTRIBUTING.rst

LICENSE.rst

README.rst







になります:

<3kOFykh>

<aqFkiIL7WrQu>

<fInOJigKGsSu>

<QCvcAkh>

<WmT4cT0A>

Au!U33x!41SS(8Ir

BuN0kVhe85aPkQh2$

fS1twqYhBCWCagGr

IKNW$LFo3$x9Mgb!rQd

nzSFA6G3RGfKkFA~XaXDZ

pWWMxno894zDuu0L!s3WY

rHtwmdKLrYxkWN~)NtKCuxH4Q

UiJ~)YM0zu01O8g52x~iAPIk







暗号化実装の技術的な詳細に興味がある場合:



パスワード保護オプションを使用すると、「buro.db」ファイルも暗号化されます。 データベースエンジンはBerkeley DBで、AES CBC 128ビットアルゴリズムでデータを暗号化します。キーはSHA1(パスワード+ソルト)から取得されます。 私のユーティリティは、Argon2関数を介してユーザーパスワードを渡し、出力で256ビットのデータを受信し、データベースのパスワードとして機能するテキスト文字列に変換します。 ChaCha20アルゴリズムは、ファイルと名前の暗号化に使用されます。 キーはランダムに生成され、データベースが保存されます。 ファイルごとに独自のキーを取得するのが面倒だったので、使用します。 1つのファイルの異なるバージョンを互いに重ねることができないように、それぞれに異なるNONCEが生成されます。暗号化されたファイルの最初の8バイトとして書き込みます。 暗号化前のファイル名は、元の名前の長さを推測しにくくするために、単純なLZのようなアルゴリズムによって圧縮されます。 間違えた場合は修正してください。



退屈な詳細:





私はデータの整合性制御をチェックサムで追加しませんでした、データ転送の過程で私見、そして多くのレベルで制御があります。 あなたが本当にしたい場合は、圧縮オプションを使用して、制御があります、私はちょうどそれをします。



興味がある人のために、 ソースコードとバイナリへのリンク。



ps Buroの開発中に、SSDを亡くしました。 なんて皮肉だ。



All Articles