Linuxの世界では、バックアップが常にホットな話題であることは明らかです。 2017年に、David BothはOpensource.comの読者に「rsyncを使用してLinuxシステムをバックアップする」ためのヒントを提供し、今年の初めに、「Linuxの/homeディレクトリの主要なバックアップ戦略は何ですか。 「」今年の別の世論調査で、ドン・ワトキンスは「どのオープンソースバックアップソリューションを使用していますか?」と尋ねました。
私の応答はrsyncです。私はrsyncが本当に好きです!市場には、テープドライブやストレージライブラリデバイスの管理に必要な大規模で複雑なツールがたくさんありますが、必要なのは単純なオープンソースのコマンドラインツールだけかもしれません。
私は、数テラバイトのファイルを持つ約35,000人の開発者がいるグローバル組織のバイナリリポジトリシステムを管理しました。一度に数百ギガバイトのデータを定期的に移動またはアーカイブしました。 Rsyncが使用されました。この経験は、このシンプルなツールに自信を与えてくれました。 (つまり、自宅でLinuxシステムをバックアップするために使用しています。)
基本的なrsyncコマンドは簡単です。
rsync -av SRC DST
実際、チュートリアルで教えられているrsyncコマンドは、ほとんどの一般的な状況で正常に機能します。ただし、非常に大量のデータをバックアップする必要があるとします。それぞれが50GBから700GBのデータを保持する2,000のサブディレクトリを持つディレクトリのようなものです。このディレクトリでrsyncを実行すると、特にチェックサムオプションを使用している場合は、非常に時間がかかる可能性があります。
大量のデータを同期したり、低速のネットワーク接続間で同期したりすると、パフォーマンスが低下する可能性があります。優れたパフォーマンスと信頼性を確保するために私が使用するいくつかの方法を紹介します。
その他のLinuxリソース
- Linuxコマンドのチートシート
- 高度なLinuxコマンドのチートシート
- 無料のオンラインコース:RHELの技術概要
- Linuxネットワーキングのチートシート
- SELinuxチートシート
- Linuxの一般的なコマンドのチートシート
- Linuxコンテナとは何ですか?
- 最新のLinux記事
rsyncの実行時に最初に表示される行の1つは、「増分ファイルリストの送信」です。この行を検索すると、次のような質問がたくさん表示されます。なぜ永遠にかかるのですか?または、なぜハングアップしたように見えるのですか?
このシナリオに基づく例を次に示します。 / storageというディレクトリがあるとします。 / media / WDPassportにマウントされた外部USBデバイスにバックアップしたい 。
/ storageをバックアップする場合 USB外付けドライブに接続するには、次のコマンドを使用できます:
rsync -cav /storage /media/WDPassport
c オプションは、変更されたファイルを判別するためにタイムスタンプの代わりにファイルチェックサムを使用するようにrsyncに指示します。これには通常、より長い時間がかかります。 / storageを分類するため ディレクトリ、検索を使用して、サブディレクトリで同期します 指図。次に例を示します:
find /storage -type d -exec rsync -cav {} /media/WDPassport \;
これは問題ないように見えますが、 / storageにファイルがある場合 ディレクトリ、それらはコピーされません。では、どうすれば / storageのファイルを同期できますか ?特定のオプションによってrsyncがを同期するという小さなニュアンスもあります。 ソースディレクトリのルートであるディレクトリ。これは、サブディレクトリが2回同期されることを意味しますが、これは望ましくありません。
簡単に言えば、私が決めた解決策は「ダブルインクリメンタル」スクリプトです。これにより、ディレクトリを分割できます。たとえば、 / homeを分割できます。 個々のユーザーのホームディレクトリに、または音楽や家族の写真など、複数の大きなディレクトリがある場合に。
これが私のスクリプトの例です:
HOMES="alan"
DRIVE="/media/WDPassport"
for HOME in $HOMES; do
cd /home/$HOME
rsync -cdlptgov --delete . /$DRIVE/$HOME
find . -maxdepth 1 -type d -not -name "." -exec rsync -crlptgov --delete {} /$DRIVE/$HOME \;
done
最初のrsyncコマンドは、ソースディレクトリで見つかったファイルとディレクトリをコピーします。ただし、ディレクトリは空のままなので、 findを使用してディレクトリを反復処理できます。 指図。これは、 dを渡すことによって行われます。 引数。ディレクトリを再帰しないようにrsyncに指示します。
-d, --dirs transfer directories without recursing
検索 次に、コマンドは各ディレクトリを個別にrsyncに渡します。次に、Rsyncはディレクトリの内容をコピーします。これは、 rを渡すことによって行われます。 引数。rsyncにディレクトリを再帰するように指示します。
-r, --recursive recurse into directories
これにより、rsyncが使用する増分ファイルが管理可能なサイズに保たれます。
ほとんどのrsyncチュートリアルはaを使用します (またはアーカイブ )便宜上の引数。これは実際には複合的な議論です。
-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
私が渡す他の引数は、 aに含まれているはずです。;それらはl 、 p 、 t 、 g 、および o 。
-l, --links copy symlinks as symlinks
-p, --perms preserve permissions
-t, --times preserve modification times
-g, --group preserve group
-o, --owner preserve owner (super-user only)
-削除 オプションは、ソースに存在しなくなった宛先上のファイルを削除するようにrsyncに指示します。このように、結果は正確な複製になります。 .Trashの除外を追加することもできます ディレクトリまたはおそらく.DS_Store MacOSによって作成されたファイル。
-not -name ".Trash*" -not -name ".DS_Store"
最後の推奨事項:rsyncは破壊的なコマンドになる可能性があります。幸いなことに、その思慮深いクリエイターは「ドライラン」を行う機能を提供しました。 nを含める場合 オプションの場合、rsyncはデータを書き込まずに期待される出力を表示します。
rsync -cdlptgovn --delete . /$DRIVE/$HOME
このスクリプトは、非常に大きなストレージサイズ、大きな遅延、または低速リンクの状況に合わせて拡張できます。いつものように、まだまだ改善の余地があると思います。提案があれば、コメントで共有してください。