web-dev-qa-db-ja.com

スケジュールされたフォルダのバックアップ

CentOs 7のユーザーのホームディレクトリをリモートホストまたはNASまたは〜/ .snapshotに自動的にバックアップする方法を探しています。一部のLinuxセットアップでは、.snapshotユーザーのホームディレクトリ(〜/ .snapshot /)内のフォルダーで、ホームディレクトリの毎時、毎晩、毎週のバックアップを保持します(つまり、1週間前のユーザーのホームディレクトリ内のコピーの〜/ .snapshot/weekly1)。

/home/username/.snapshot/ディレクトリは、ユーザーによって読み取り専用になります。ハードウェア障害から保護するためのバックアップではありません。加えられた変更が気に入らない場合は、昨日または今朝からファイルを復元できるのはいいことです。

スタックオーバーフローに関するいくつかの関連記事を見てきましたが、これまでのところ、完全なワークフローを説明するガイドを見ていません。

これは私がこれまでに知っていることです:

  1. rsyncを使用して、特定のフォルダーの内容をリモートホスト、NAS、または(〜/ .snapshot/hourly0)にコピーします
  2. rsyncコマンドを実行するシェルスクリプトを作成します

#!/bin/bash Sudo rsync -av --progress --delete --log-file=/home/username/$(date +%Y%m%d)_rsync.log --exclude "/home/username/.snapshot" /home/username/ /home/username/.snapshot/hourly1

  1. スクリプトの権限を変更して実行可能にします

Sudo chmod +x /home/username/myscript.sh

  1. crontabを使用して、希望のバックアップ間隔でrsyncコマンドをスケジュールします

  2. スケジュールされた毎時rsyncを実行する前に、どういうわけかhourly0をhourly1に移動します

  3. Rsyncが正常に完了したら、最も古いバックアップを削除します

これを行う方法をカバーするガイドはありますか?時間の経過とともにフォルダの名前を自動的に変更する方法(つまり、weekly1からweekly2)、または9週間までしか保持しないことにした場合に「week10」を削除する方法がわかりません。これは別のcronジョブですか?

更新:さらにグーグルで検索したところ、NetAppがスナップショットフォルダを作成することがわかりました。現在、NetApp NASはありません。 https://library.netapp.com/ecmdocs/ECMP1635994/html/GUID-FB79BB68-B88D-4212-A401-9694296BECCA.html

1
random_dsp_guy

このガイドはどうですか:

1)スクリプトを作成します。新しいファイルを作成してmyrsync.shと呼び、以下の行をコピーして貼り付けます。

  #!/bin/bash
    Sudo rsync -av --progress --delete --log-file=/home/your-username/Desktop/$(date +%Y%m%d)_rsync.log --exclude "/home/your-username/.folder" /home/data /media/dataBackup_$(date +%Y%m%d_%T)

フラグの意味:

 -av bit: 'a' means archive, or copy everything recursively, preserving things like permissions, ownership and time stamps. 
  -'v' is verbose, so it tells you what its doing, either in the terminal, in this case, in the log file.
  --progress gives you more specific info about progress.
  --delete checks for changes between source and destination, and deletes any files at the destination that you've deleted at the source.
  --log-file saves a copy of the rsync result to a date-stamped file on my desktop.
  --exclude leaves out any files or directories you don't want copied. In the command above, the .folder directory

  /home/data is the directory I want copied. /home/data copies the directory and its contents, /home/data would just copy the contents. 

  /media/dataBackup_$(date +%Y%m%d_%T) is the separate drive. Change this to whatever your backup location is. Note that `rsync` will name every sync differently based on day/time of sync

2)myrsync.shを〜$ HOMEに保存し、次のように入力して実行可能にします。

Sudo chmod +x /home/your-username/Desktop/rsync-Shell.sh

その.shファイルをダブルクリックして、[Run in Terminal]を選択すると、パスワードを要求して実行され、ログファイルがデスクトップに残ります。または、cronジョブを作成してそれを実行することもできます。

3)cronジョブ

次のように入力して、myrsync.shファイルを/ rootにコピーします。

Sudo cp /home/your-username/Desktop/myrsync.sh /root

次に、次のように入力します。

Sudo crontab -e

次のような行が表示されます。分時日月年コマンド

その下に、次のように入力します。022 * * * /root/myrsync.sh> $ HOME/readme.log 2>&1

これの意味は:

The hour in military time (24 hour) format (0 to 23)
The day of the month (1 to 31)
The month (1 to 12)
The day of the week(0 or 7 is Sun, or use name)
The command to run
So at 22:00 (10pm) every day root will run the Shell script, without prompting you for Sudo password (because its running as root already).

ここでControl-Xを押し、次に「Y」と入力してからEnterを押します。

古いバックアップを削除するための1つの方法は、すべての同期のタイムスタンプを含むファイルを作成することです。たとえば、myrsync.shのコマンドrsyncの後に次のコマンドを追加します

date +%Y%m%d_%T >> time.txt

コマンドfindを使用して、タイムスタンプに一致するバックアップを削除します。例:date +%Y%m%d_%T >> time.txtmyrsync.shの後にこのコマンドを追加します

find . -type f ! -newer /tmp/timestamp -delete

または

find . ! -newermt $date ! -type d -delete

これにより、特定の日時以前のバックアップが削除されます。

毎時/毎日/毎月のバックアップの詳細とサンプルコードは、次の場所にあります ここ

3
user88036