差分バックアップ(snapshot)

2023年3月12日

定期的に差分バックアップを取るためのセットアップ方法
snapshotを定期的に実行することにより、/.snapshotという隠しディレクトリにバックアップを保存することができます。
そのために、まず、「rsnapshot」をインストールする必要があります。

参考:https://spp5.blogspot.com/2013/07/backup-with-rsnapshot.html
参考:https://linux.die.net/man/1/rsnapshot
参考:https://web.chaperone.jp/w/index.php?rsnapshot
参考:https://wiki.archlinux.jp/index.php/Rsnapshot
参考:https://itsakura.com/centos-cron-hello

◆rsnapshotのインストール

[teruki@almalinux9 ~]$ sudo yum install rsnapshot
[sudo] teruki のパスワード:
メタデータの期限切れの最終確認: 3:00:25 時間前の Sun 05 Mar 2023 02:26:13 PM JST に実施しました。
依存関係が解決しました。
============================================================================================================================================================
 パッケージ                               アーキテクチャー                 バージョン                             リポジトリー                        サイズ
============================================================================================================================================================
インストール:
 rsnapshot                                noarch                           1.4.5-1.el9                            epel                                112 k
依存関係のインストール:
 perl-DirHandle                           noarch                           1.05-479.el9                           appstream                            21 k
 perl-Lchown                              x86_64                           1.01-24.el9                            epel                                 17 k

トランザクションの概要
============================================================================================================================================================
インストール  3 パッケージ

ダウンロードサイズの合計: 150 k
インストール後のサイズ: 406 k
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
(1/3): perl-DirHandle-1.05-479.el9.noarch.rpm                                                                               108 kB/s |  21 kB     00:00
(2/3): perl-Lchown-1.01-24.el9.x86_64.rpm                                                                                    79 kB/s |  17 kB     00:00
(3/3): rsnapshot-1.4.5-1.el9.noarch.rpm                                                                                     429 kB/s | 112 kB     00:00
------------------------------------------------------------------------------------------------------------------------------------------------------------
合計                                                                                                                         71 kB/s | 150 kB     00:02
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                                                                                                    1/1
  インストール中   : perl-Lchown-1.01-24.el9.x86_64                                                                                                     1/3
  インストール中   : perl-DirHandle-1.05-479.el9.noarch                                                                                                 2/3
  インストール中   : rsnapshot-1.4.5-1.el9.noarch                                                                                                       3/3
  scriptletの実行中: rsnapshot-1.4.5-1.el9.noarch                                                                                                       3/3
  検証             : perl-DirHandle-1.05-479.el9.noarch                                                                                                 1/3
  検証             : perl-Lchown-1.01-24.el9.x86_64                                                                                                     2/3
  検証             : rsnapshot-1.4.5-1.el9.noarch                                                                                                       3/3

インストール済み:
  perl-DirHandle-1.05-479.el9.noarch                     perl-Lchown-1.01-24.el9.x86_64                     rsnapshot-1.4.5-1.el9.noarch

完了しました!
[teruki@almalinux9 ~]$

◆ファイルがインストールされた場所の確認方法

[teruki@almalinux9 ~]$ rpm -qali | less

Name        : rsnapshot
Version     : 1.4.5
Release     : 1.el9
Architecture: noarch
Install Date: Sun 05 Mar 2023 05:26:54 PM JST
Group       : Unspecified
Size        : 389545
License     : GPL-2.0-or-later
Signature   : RSA/SHA256, Sat 31 Dec 2022 07:11:18 AM JST, Key ID 8a3872bf3228467c
Source RPM  : rsnapshot-1.4.5-1.el9.src.rpm
Build Date  : Sat 31 Dec 2022 07:04:25 AM JST
Build Host  : buildvm-x86-11.iad2.fedoraproject.org
Packager    : Fedora Project
Vendor      : Fedora Project
URL         : https://rsnapshot.org/
Bug URL     : https://bugz.fedoraproject.org/rsnapshot
Summary     : Local and remote filesystem snapshot utility
Description :
This is a remote backup program that uses rsync to take backup snapshots of
filesystems.  It uses hard links to save space on disk.
/etc/rsnapshot.conf
/usr/bin/rsnapshot
/usr/bin/rsnapshot-diff
/usr/share/doc/rsnapshot
/usr/share/doc/rsnapshot/AUTHORS
/usr/share/doc/rsnapshot/ChangeLog
/usr/share/doc/rsnapshot/README.md
/usr/share/doc/rsnapshot/rsnapshot.conf.default
/usr/share/doc/rsnapshot/utils
/usr/share/doc/rsnapshot/utils/README
/usr/share/doc/rsnapshot/utils/backup_dpkg.sh
/usr/share/doc/rsnapshot/utils/backup_mysql.sh
/usr/share/doc/rsnapshot/utils/backup_pgsql.sh
/usr/share/doc/rsnapshot/utils/backup_rsnapshot_cvsroot.sh
/usr/share/doc/rsnapshot/utils/backup_smb_share.sh
/usr/share/doc/rsnapshot/utils/debug_moving_files.sh
/usr/share/doc/rsnapshot/utils/make_cvs_snapshot.sh
/usr/share/doc/rsnapshot/utils/mkmakefile.sh
/usr/share/doc/rsnapshot/utils/mysqlbackup.pl
/usr/share/doc/rsnapshot/utils/random_file_verify.sh
/usr/share/doc/rsnapshot/utils/rsnapreport.pl
/usr/share/doc/rsnapshot/utils/rsnapshot-copy
/usr/share/doc/rsnapshot/utils/rsnapshot_if_mounted.sh
/usr/share/doc/rsnapshot/utils/rsnapshot_invert.sh
/usr/share/doc/rsnapshot/utils/rsnapshotdb
/usr/share/doc/rsnapshot/utils/rsnapshotdb/CHANGES.txt
/usr/share/doc/rsnapshot/utils/rsnapshotdb/INSTALL.txt
/usr/share/doc/rsnapshot/utils/rsnapshotdb/LICENSE.txt
/usr/share/doc/rsnapshot/utils/rsnapshotdb/README.txt
/usr/share/doc/rsnapshot/utils/rsnapshotdb/TODO.txt
/usr/share/doc/rsnapshot/utils/rsnapshotdb/rsnapshotDB.conf.sample
/usr/share/doc/rsnapshot/utils/rsnapshotdb/rsnapshotDB.pl
/usr/share/doc/rsnapshot/utils/rsnapshotdb/rsnapshotDB.xsd
/usr/share/doc/rsnapshot/utils/rsnaptar
/usr/share/doc/rsnapshot/utils/sign_packages.sh
/usr/share/licenses/rsnapshot
/usr/share/licenses/rsnapshot/COPYING
/usr/share/man/man1/rsnapshot-diff.1.gz
/usr/share/man/man1/rsnapshot.1.gz

◆rsnapshotの設定

[teruki@almalinux9 ~]$ sudo vi /etc/rsnapshot.conf

#########################################
#     BACKUP LEVELS / INTERVALS         #
# Must be unique and in ascending order #
# e.g. alpha, beta, gamma, etc.         #
#########################################
#retain alpha   6
#retain beta    7
#retain gamma   4
#retain delta   3
↓ 以下に変更します
retain  hourly  6 ←バックアップを6回分作成することを意味します。
retain  daily   7
retain  weekly  4
retain  monthly 3
## crontabを使ってrsnapshotを実行することで、自動バックアップを行うことができます。crontabを設定するときは以下となります。
## 0 */4 * * * root /usr/bin/rsnapshot hourly     ←4時間ごとに6回バックアップを取ります。(0時,4時,8時,12時,16時,20時)
##     ※ただし、rsnapshot.confのオプション sync_first(sync_first 1)を設定した場合には、hourlyの設定は以下となります。
##     0 */4 * * * root /usr/bin/rsnapshot sync && /usr/bin/rsnapshot hourly
## 50 23 * * * root /usr/bin/rsnapshot daily      ←毎日23:50ごとにバックアップを取ります。
## 40 23 * * 6 root /usr/bin/rsnapshot weekly     ←毎週土曜日 (週の6番目)の23:40にバックアップを取ります。
## 30 23 1 * * root /usr/bin/rsnapshot monthly    ←毎月1日の23:30にバックアップを取ります。
※次に、バックアップの失敗したときの対処方法として、sync_firstを有効にします。
同期中、バックアップが失敗すると不完全なスナップショットがhourly.0に 残ってしまいます。
やり直すために再度、rsnapshot hourlyコマンドを使用すると、 
デフォルト設定のままでは、hourly.0はhourly.1にリネームされ、新しくhourly.0が作成されます。
よって、hourly.1には失敗した不完全なスナップショットが格納されることになってしまいます。
このオプションをつけた場合、まず、rsnapshot syncの実行で、「.sync」ディレクトリにバックアップします。
次に、rsnapshot hourlyコマンドを使用することで「.sync」が 「hourly.0」にリネームされます。
これにより、失敗してもrsynapshot syncを実行すれば、「.sync」ディレクトリに対し
再度「.sync」に同期され、やり直すことができます。
# When sync_first is enabled, it changes the default behaviour of rsnapshot.
# Normally, when rsnapshot is called with its lowest interval
# (i.e.: "rsnapshot alpha"), it will sync files AND rotate the lowest
# intervals. With sync_first enabled, "rsnapshot sync" handles the file sync,
# and all interval calls simply rotate files. See the man page for more
# details. The default is 0 (off).
#
#sync_first     0
↓ 以下に変更します
sync_first      1
次に、バックアップ対象を指定します。localhostはバックアップ対象のマシンが自分自身ということを意味します。
###############################
### BACKUP POINTS / SCRIPTS ###
###############################

# LOCALHOST
backup  /home/          localhost/
backup  /etc/           localhost/
backup  /usr/local/     localhost/

◆crontabの設定
自動バックアップを設定します。

[teruki@almalinux9 ~]$ sudo vi /etc/crontab

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
### snapshot ###
0 */4 * * * root /usr/bin/rsnapshot sync && /usr/bin/rsnapshot hourly
50 23 * * * root /usr/bin/rsnapshot daily
40 23 * * 6 root /usr/bin/rsnapshot weekly
30 23 1 * * root /usr/bin/rsnapshot monthly

※上記のように/etc/crontabの直接編集では動きませんでした。
 >crontab -e の起動にて、以下内容を追記することで対応。この時root記述は不要。
root記述をしてしまうとエラーで動かない。

[teruki@almalinux9 ~]$ sudo crontab -e
### snapshot ###
0 */4 * * * /usr/bin/rsnapshot sync && /usr/bin/rsnapshot hourly
50 23 * * * /usr/bin/rsnapshot daily
40 23 * * 6 /usr/bin/rsnapshot weekly
30 23 1 * * /usr/bin/rsnapshot monthly

◆バックアップファイル容量の確認

[teruki@almalinux9 ~]$ sudo rsnapshot du
1002M   /.snapshots/.sync
4.0M    /.snapshots/hourly.0/
4.1M    /.snapshots/hourly.1/
4.1M    /.snapshots/hourly.2/
4.1M    /.snapshots/hourly.3/
4.1M    /.snapshots/hourly.4/
4.1M    /.snapshots/hourly.5/
4.0M    /.snapshots/daily.0/
4.1M    /.snapshots/daily.1/
4.1M    /.snapshots/daily.2/
1.1G    合計
[teruki@almalinux9 ~]$

UNIX

Posted by 伊藤 輝樹