最近、仕事に就くときに不快感を覚えました。 気持ちはそれほど強くありませんでしたが、集中することは困難でした。 怠だと思った。 すべてがもう少し複雑であることが判明しました:)私が働いているラップトップはほぼ3年です。 Mac OS X 10.6.1がインストールされていますが、リンゴは描かれておらず、定期的なバックアップシステムがクラスとして欠落しています。 一般に、安定性と信頼性の感覚がなかったので、この問題に厳密に対処しました。 実際、さらに潜在意識が満足した結果について説明します:)たぶん誰かが何か有用なものを見つけるでしょう。
挑戦する
バックアップとは
- さまざまなソースのあるディレクトリ。 一部のプロジェクトはGitリポジトリであるため、ソースの最新バージョンだけでなく、リポジトリを保存したいと考えています。 NB:なんとかして一日の終わりにきれいにしたりアナログにしたりすることに慣れていないので、バイナリをコピーしないという要件を追加します。
- 構成とパラメーターを含むディレクトリ。
- TeXソースを含むディレクトリ。 実際、最初の段落に追加することができます。
もちろん、保存したい写真やその他のバイナリがあることもありますが、10 GBを超えるスクリプトを1回以上プッシュできる信頼できる場所がないため、バックアップの問題については触れません。毎月、それらは正常に変化しません。
バックアップ先
- 実際には、ファイルストレージ。 cpコマンドを使用したコピーは簡単で便利なため、無料のDropboxアカウントが選択されました。
- Gmailでメール。 同じように、7つのギグは使用されず、信頼性を疑う理由はまだありません。
おそらく近い将来、このリストは拡大するでしょうが、今のところ、これで十分かと思われます。
どのような機能
- シンプル。 主な機能:)複雑で大規模なプログラムは必要ありません。自分でコピーするファイルを決定できます。 小さなプログラムが正しく動作することを確認する方が簡単です。
- 変更履歴。 私が欲しい最初の機能は、「このファイルが私を悩ませた!」というトピックを誓わないように、変更の履歴です。
- 圧縮 Gitはもちろんプレスですが、 バックアップを1つのファイルに保存する方が便利なため、他の人がそれを圧縮できます。
- 暗号化インターネットプロバイダーとストレージプロバイダーの誠実さとセキュリティについては間違いありません。 しかし、私は自分のしていることを伝えたくはありません。
解決策
Googleからのリクエストは価値があり満足のいくものではなかったため、自分で作成する必要がありました。 Pythonとは何かに触れながら、私は長い間適切な機会を探していました。
コピー
「すべてコピー」オプションは、スペース不足のため機能しません。 さらに、不必要なファイル(オブジェクト、ビルドログなど)のバックアップコピーを大量に保持するのは、どういうわけかばかげているように見えます。 その結果、参照条件は、いわば次のようになりました。
- コピーするディレクトリとファイルのリストは、別のファイルに保存されます。
- 各ディレクトリに対して、そこからコピーするファイルマスクを指定できます。 マスクが指定されていない場合は、すべてコピーします。
- 元のディレクトリ構造は保持されます。
- スクリプトは、指定されたフォルダーにファイルをコピーします(コピーのみ)。
- ファイルが宛先フォルダーに既に存在する場合は、ソースファイルの変更時間が長い場合にのみコピーします。
コピースクリプトはPythonで作成されており、200行弱(インデント、コメントなどを含む)しかかかりません。 さらに、1つのgoogleモジュールを使用して、絶対パスを相対パスに、またはその逆に変換します。
使用法:
sn-backup.py <combo file> <base directory> <backup directory>
制限事項:
- 厳密なコンボファイル形式。 行形式:
<ベースディレクトリからの相対パス> [\ t <カンマ区切りマスク>]
複数のタブ文字は使用できません。 マスクはスペースなしのカンマで区切られます。 - バカからの保護は事実上ありません。
リストの例(ベースディレクトリ〜を使用):
.emacs
ドキュメント/プログラミング* .c、*。H、*。Cpp、*。Pro、*。Py、.git
スクリプト
ソース(おそらく、同じ200行がテキストを詰まらせるよりもファイルホスティングにある方が便利です):
sn-backup.py (
dumpz.orgを 見てください )
relpath.py (
dumpz.orgをご覧ください )
relpath.pyは
、ここから、最初のコメント
から取得され、わずかに修正されました。
圧縮と暗号化
圧縮と暗号化には1行が必要なので、それらをPythonで記述するのはどういうわけか奇妙です。 圧縮するものは好みの問題です。 7-zipが好きです。 したがって、ここのコマンドラインは単純です(アーカイブ名はbackup.7z、フォルダー名は.backupです)。
7za a -mx7 backup.7z .backup
暗号化にはopensslを選択しました。理論的には、ほとんどすべての場所にあり、何も生成することなくそのまま使用できます。 コマンドは次のようになります。
openssl enc -aes-256-cbc -salt -in backup.7z -out backup.aes256cbc -pass file:<パスパス>
したがって、backup.7zソースファイルの名前、backup.aes256cbc出力ファイルの名前(暗号化アルゴリズムの名前を突然忘れた場合に備えて)。 パスワードはファイルに保存され、任意の長さにすることができます。 ただし、より良いのは、少なくとも32文字です。
派遣
送信する方法はさまざまである可能性があるため、最初は非常にカスタマイズ可能なPythonスクリプトでもやりたいと思っていましたが、少数のホストへのコピーは手動で行う方がはるかに簡単で、多数のホストへのコピーは偏執臭がします。 したがって、送信はshスクリプトで実装されます。 クライアントがインストールされたDropboxのcopyコマンドは重要ではないため、send to mailコマンドのみを考慮します(さらに一般的ではありません)。
uuencode <暗号化されたアーカイブへのパス> $(ベース名<暗号化されたアーカイブへのパス>)| mail -s "[BACKUP] $(date)" <アドレス>
注:このコマンドを機能させるには、ローカルマシンでSMTPサーバーを構成する必要があります。 このコマンドは、件名行「[BACKUP] <current date and time>」を使用して暗号化されたアーカイブをメッセージに添付し、メッセージを<address>に送信します。 sn-upload.shスクリプトにこのコマンドがあり、暗号化されたアーカイブファイルの名前を唯一の引数として使用します。
すべて一緒に
すべて一緒に、backup.shスクリプトが収集され、次のようになります。
# ~/.backup - , .
# .git-.
cd ~/.backup
# .
~/Scripts/sn-backup.py ./list ~ .
# , git.
git add .
git commit -m "Backup at $(date)"
# .
cd ..
7za a -mx7 backup.7z .backup > /dev/null
# .
openssl enc -aes-256-cbc -salt -in backup.7z -out backup.aes256cbc -pass file:///${SECRET_PATH}/.password
# .
~/Scripts/sn-upload.sh ./backup.aes256cbc
# ???
rm backup.7z
# PROFIT!
さらなる開発の方向性
空き時間には、次の改善を行うことができます。
- Pythonですべてのbashスクリプトを翻訳します。
- Pylzmaおよび組み込みのPython暗号化(クロスプラットフォーム用)に切り替えることができます。
- リストファイル形式をよりソフトでまともなものにします。
おわりに
私は自転車を発明した可能性を排除しません。 しかし、私はそれにあまり時間を費やさず、少し経験を得ました。 まず第一に、このシステムの設計はシンプルであることに留意してください。 どのファイルとどこにコピーする必要があるかを知っています。 後でそれらをどうするか知っています。 このすべてをマシンで実行できるようにするために、スクリプトが必要です。 私の意見では、彼は彼のタスクを完全に実行します。
ご清聴ありがとうございました!