私はこの質問について多くのサイトで断片的な答えを受け取ったと確信しています。しかし、とにかく、私はこの質問を(全体的に)安定して動作させることができないようです。
シナリオ:増分バックアップを実行したいサーバーがあります(毎日それについて考えます)。
バックアップするファイルとディレクトリは、/home/
次のディレクトリにあります/srv/samba/
。
/mnt/backup/
バックアップはディレクトリの.tar.gzでなければならず、ファイル名はinc_backup_yyyymmdd.tar.gz
.
.tar.gzを正常に作成したら、sshを使用してファイルを外部サーバーに送信する必要があります。
これで、サーバーは週に1回、フルバックアップを作成し、ランダムな間隔で手動でオフサイトに送信します(.tar.gzのサイズは約60GBなので、時間がかかります...)。
理想的には、.tar.gz通常のファイルとフォルダのみが必要です。 .で始まるファイルと、〜と.で始まるディレクトリは除外する必要があります。
1つの例外があります:とフォルダ
には、バックアップに含める必要があるがファイル除外を適用する必要がある「.recycle」フォルダがあります。/home/[user]/
/srv/samba/[someshare]/
例えば
/home/user/.hiddendirectory/ (excluded)
/home/user/.hiddendirectory/myfile.txt (excluded)
/home/user/myfile.txt (included)
/home/user/.myfile.txt (excluded)
/home/user/~myfile.txt (excluded)
/home/user/mydirectory/myfile.txt (included)
/home/user/.recycle/ (included)
/home/user/.recycle/~tmpfile (excluded)
/home/user/.recycle/.myfile (excluded)
/home/user/.recycle/myfile.txt (included)
私はfindを使い始めました。
次のコマンドには非標準演算子(-not、-or)が含まれているため、使用する場合はシステムがそれをサポートしていることを確認してください。
find /home -not -path '*/\.*' ! \( -name '.*' -or -name '~*' \) -mtime -1
必要なファイルやフォルダを探しているようです。しかし、すぐにtarに移動すると、すべての除外を無視するように見えますか?
find /home -not -path '*/\.*' ! \( -name '.*' -or -name '~*' \) -mtime -1 -print0 | tar -zcvf /tmp/testbackup1.tar.gz --null -T -
以下を使用して正しい結果を得るようです。
find /home -not -path '*/\.*' ! \( -name '.*' -or -name '~*' \) -mtime -1 -print0 | tar -Avf /tmp/testbackup1.tar | gzip -c /tmp/testbackup1.tar > testbackup1.tar.gz
...しかし、これは過度に複雑に見え、大きなタールサイズにもかかわらず空のタールボールが生成されますか?これらのどれも.recycleのインクルードを考慮しません。
追加ボーナスは、セキュリティを強化するために暗号化されたtar.gzです。
SSHを使用してファイルを送信するのは簡単な部分です。
私の考えは、Cronが実行するスクリプトファイルに入れることです。
このスクリプトは次のことを行います。
- バックアップファイルの作成(名前指定処理)
- SSH経由でバックアップファイルを外部サーバーに送信する
- .recycleディレクトリから古いファイル(2週間など)を削除する
(内部)フルバックアップは毎月実行され、古いバックアップファイルのクリーンアップも処理されます(2ヶ月)。
したがって、2つのフルバックアップと約60の増分バックアップが作成されます。完全バックアップが削除されると、増分バックアップ(増分バックアップと呼ばれる)も削除されます。すべてのバックアップファイルはオンサイトとオフサイトの両方にあります。
どんな提案(全く新しい方法でも)をいただきありがとうございます!
よろしくお願いします!