KnowHow

技術的なメモを中心にまとめます。
検索にて調べることができます。

rsyncを用いたバックアップ処理の例

登録日 :2024/08/06 04:33
カテゴリ :Linux

rsyncを使って、月曜から土曜は増分バックアップを行い、日曜日にフルバックアップを行う方法を説明します。この方法では、ハードリンクを利用して効率的な増分バックアップを実現します。

  • 1.バックアップ元とバックアップ先のディレクトリを設定します。
  • 2.現在の日付と曜日を取得します。
  • 3.バックアップ先に日付ごとのディレクトリを作成します。
  • 4.日曜日(DOWが7)の場合、フルバックアップを実行します。
  • 5.月曜から土曜(DOWが1-6)の場合:
  • 6.最新の完全バックアップ(日曜日のバックアップ)を見つけます。
  • 7.--link-destオプションを使用して増分バックアップを実行します。
  • 8.--deleteオプションにより、ソースで削除されたファイルはバックアップからも削除されます

サンプルスクリプト

#!/bin/bash

# バックアップ元とバックアップ先のディレクトリを設定
SOURCE="/path/to/source"
DEST="/path/to/backup"

# 日付を取得
DATE=$(date +%Y-%m-%d)
DOW=$(date +%u)  # 曜日を数字で取得 (1-7, 1が月曜)

# バックアップディレクトリの作成
BACKUP_DIR="$DEST/$DATE"
mkdir -p "$BACKUP_DIR"

# 日曜日(7)の場合はフルバックアップ
if [ "$DOW" -eq 7 ]; then
    rsync -av --delete "$SOURCE/" "$BACKUP_DIR"
else
    # 最新の完全バックアップを見つける
    LATEST_FULL=$(find "$DEST" -maxdepth 1 -type d -name "*-7" | sort -r | head -n1)

    # 増分バックアップの実行
    rsync -av --delete --link-dest="$LATEST_FULL" "$SOURCE/" "$BACKUP_DIR"
fi

このスクリプトをcrontabに登録して毎日実行するようにします:

0 1 * * * /path/to/backup_script.sh

これにより、毎日午前1時にバックアップが実行されます。
注意点:
- バックアップ先に十分な空き容量があることを確認してください。
- 初回実行時は完全バックアップが行われます。
- このスクリプトは、ソースディレクトリの変更をバックアップに反映します。誤って削除したファイルも反映されるため、重要なデータは別途バックアップすることをお勧めします。
この方法により、効率的な増分バックアップと週1回のフルバックアップを実現でき、ファイルサーバのデータを安全に保護できます。

Appendix 実行テスト後

#!/bin/bash

# バックアップ元とバックアップ先のディレクトリを設定
SOURCE="/home"
DEST="/home/backup_dir"

# 日付を取得
DATE=$(date +%Y-%m-%d)
DOW=$(date +%u)  # 曜日を数字で取得 (1-7, 1が月曜)

# バックアップディレクトリの作成
BACKUP_DIR="$DEST/$DATE"
mkdir -p "$BACKUP_DIR"

# 日曜日(7)の場合はフルバックアップ
if [ "$DOW" -eq 7 ]; then
    rsync -av --delete "$SOURCE/" "$BACKUP_DIR"
else
    # 最新の完全バックアップを見つける
    LATEST_FULL=$(find "$DEST" -maxdepth 1 -type d -name "*-7" | sort -r | head -n1)

    # 増分バックアップの実行
    rsync -av --delete --link-dest="$LATEST_FULL" "$SOURCE/" "$BACKUP_DIR"
fi

実行すると、以下のようにステータスログが出力される

[root@nis1 backup]# /root/tools/backup/backup_script.sh
sending incremental file list
--link-dest arg does not exist:
backup_dir/2024-08-08/
backup_dir/2024-08-08/backup_dir/
backup_dir/2024-08-08/backup_dir/2024-08-08/
backup_dir/2024-08-08/backup_dir/n1001_test/
backup_dir/2024-08-08/backup_dir/n1001_test/2024-08-07/
backup_dir/2024-08-08/backup_dir/n1001_test/2024-08-07/.bash_history
backup_dir/2024-08-08/backup_dir/n1001_test/2024-08-07/.bash_logout
backup_dir/2024-08-08/backup_dir/n1001_test/2024-08-07/.bash_profile
backup_dir/2024-08-08/backup_dir/n1001_test/2024-08-07/.bashrc
backup_dir/2024-08-08/backup_dir/n1001_test/2024-08-07/test
backup_dir/2024-08-08/backup_dir/n1001_test/2024-08-07/test2
backup_dir/2024-08-08/backup_dir/n1001_test/2024-08-07/.cache/
backup_dir/2024-08-08/backup_dir/n1001_test/2024-08-07/.mozilla/
backup_dir/2024-08-08/backup_dir/n1001_test/2024-08-07/.mozilla/extensions/
backup_dir/2024-08-08/backup_dir/n1001_test/2024-08-07/.mozilla/plugins/
backup_dir/2024-08-08/backup_dir/n1001_test/2024-08-07/test_dir/
backup_dir/2024-08-08/backup_dir/n1001_test/2024-08-07/test_dir/testfile
backup_dir/2024-08-08/backup_dir/n1001_test/2024-08-07/test_dir/test/
backup_dir/2024-08-08/backup_dir/n1001_test/2024-08-08/
backup_dir/2024-08-08/backup_dir/n1001_test/2024-08-08/.bash_history
backup_dir/2024-08-08/backup_dir/n1001_test/2024-08-08/.bash_logout
backup_dir/2024-08-08/backup_dir/n1001_test/2024-08-08/.bash_profile
backup_dir/2024-08-08/backup_dir/n1001_test/2024-08-08/.bashrc
backup_dir/2024-08-08/backup_dir/n1001_test/2024-08-08/test
backup_dir/2024-08-08/backup_dir/n1001_test/2024-08-08/test2
backup_dir/2024-08-08/backup_dir/n1001_test/2024-08-08/.cache/
backup_dir/2024-08-08/backup_dir/n1001_test/2024-08-08/.mozilla/
backup_dir/2024-08-08/backup_dir/n1001_test/2024-08-08/.mozilla/extensions/
backup_dir/2024-08-08/backup_dir/n1001_test/2024-08-08/.mozilla/plugins/
backup_dir/2024-08-08/backup_dir/n1001_test/2024-08-08/test_dir/
backup_dir/2024-08-08/backup_dir/n1001_test/2024-08-08/test_dir/testfile
backup_dir/2024-08-08/backup_dir/n1001_test/2024-08-08/test_dir/test/
backup_dir/2024-08-08/n1001/
backup_dir/2024-08-08/n1001/.bash_history
backup_dir/2024-08-08/n1001/.bash_logout
backup_dir/2024-08-08/n1001/.bash_profile
backup_dir/2024-08-08/n1001/.bashrc
backup_dir/2024-08-08/n1001/test
backup_dir/2024-08-08/n1001/test2
backup_dir/2024-08-08/n1001/.cache/
backup_dir/2024-08-08/n1001/.mozilla/
backup_dir/2024-08-08/n1001/.mozilla/extensions/
backup_dir/2024-08-08/n1001/.mozilla/plugins/
backup_dir/2024-08-08/n1001/test_dir/
backup_dir/2024-08-08/n1001/test_dir/testfile
backup_dir/2024-08-08/n1001/test_dir/test/
backup_dir/2024-08-08/n1002/
backup_dir/2024-08-08/n1002/.bash_history
backup_dir/2024-08-08/n1002/.bash_logout
backup_dir/2024-08-08/n1002/.bash_profile
backup_dir/2024-08-08/n1002/.bashrc
backup_dir/2024-08-08/n1002/.esd_auth
backup_dir/2024-08-08/n1002/.cache/
backup_dir/2024-08-08/n1002/.config/
backup_dir/2024-08-08/n1002/.config/pulse/
backup_dir/2024-08-08/n1002/.config/pulse/b7e56f9791684f3995f6aa5fcc70f6fb-card-database.tdb
backup_dir/2024-08-08/n1002/.config/pulse/b7e56f9791684f3995f6aa5fcc70f6fb-default-sink
backup_dir/2024-08-08/n1002/.config/pulse/b7e56f9791684f3995f6aa5fcc70f6fb-default-source
backup_dir/2024-08-08/n1002/.config/pulse/b7e56f9791684f3995f6aa5fcc70f6fb-device-volumes.tdb
backup_dir/2024-08-08/n1002/.config/pulse/b7e56f9791684f3995f6aa5fcc70f6fb-stream-volumes.tdb
backup_dir/2024-08-08/n1002/.config/pulse/cookie
backup_dir/2024-08-08/n1002/.mozilla/
backup_dir/2024-08-08/n1002/.mozilla/extensions/
backup_dir/2024-08-08/n1002/.mozilla/plugins/
backup_dir/2024-08-08/n1003/
backup_dir/2024-08-08/n1003/.bash_logout
backup_dir/2024-08-08/n1003/.bash_profile
backup_dir/2024-08-08/n1003/.bashrc
backup_dir/2024-08-08/n1003/.mozilla/
backup_dir/2024-08-08/n1003/.mozilla/extensions/
backup_dir/2024-08-08/n1003/.mozilla/plugins/
backup_dir/2024-08-08/n1004/
backup_dir/2024-08-08/n1004/.bash_history
backup_dir/2024-08-08/n1004/.bash_logout
backup_dir/2024-08-08/n1004/.bash_profile
backup_dir/2024-08-08/n1004/.bashrc
backup_dir/2024-08-08/n1004/.cache/
backup_dir/2024-08-08/n1004/.mozilla/
backup_dir/2024-08-08/n1004/.mozilla/extensions/
backup_dir/2024-08-08/n1004/.mozilla/plugins/
backup_dir/2024-08-08/n1005/
backup_dir/2024-08-08/n1005/.bash_logout
backup_dir/2024-08-08/n1005/.bash_profile
backup_dir/2024-08-08/n1005/.bashrc
backup_dir/2024-08-08/n1005/.mozilla/
backup_dir/2024-08-08/n1005/.mozilla/extensions/
backup_dir/2024-08-08/n1005/.mozilla/plugins/

/home/backup_dir に日付のフォルダが作成されて、バックアップが保存される。

[root@nis1 backup_dir]# pwd
/home/backup_dir
[root@nis1 backup_dir]# ls
2024-08-08
[root@nis1 backup_dir]# ls 2024-08-08/
backup_dir  n1010  n1020  n1030  n1040  n1050  n1060  n1070  n1080  n1090  n1100
n1001       n1011  n1021  n1031  n1041  n1051  n1061  n1071  n1081  n1091  user01
n1002       n1012  n1022  n1032  n1042  n1052  n1062  n1072  n1082  n1092
n1003       n1013  n1023  n1033  n1043  n1053  n1063  n1073  n1083  n1093
n1004       n1014  n1024  n1034  n1044  n1054  n1064  n1074  n1084  n1094
n1005       n1015  n1025  n1035  n1045  n1055  n1065  n1075  n1085  n1095
n1006       n1016  n1026  n1036  n1046  n1056  n1066  n1076  n1086  n1096
n1007       n1017  n1027  n1037  n1047  n1057  n1067  n1077  n1087  n1097
n1008       n1018  n1028  n1038  n1048  n1058  n1068  n1078  n1088  n1098
n1009       n1019  n1029  n1039  n1049  n1059  n1069  n1079  n1089  n1099
[root@nis1 backup_dir]#