rsnapshot is a filesystem snapshot utility based on rsync. rsnapshot makes it easy to make periodic snapshots of local machines, and remote machines over ssh.
The code makes extensive use of hard links whenever possible, to greatly reduce the disk space required.
(DeepL様翻訳)
rsnapshot は rsync ベースのファイルシステムスナップショットユーティリティです。 rsnapshot を使うと、ローカルマシンや ssh 経由のリモートマシンの定期的なスナップショットを簡単に作成できます。
このコードでは、可能な限りハードリンクを多用し、必要なディスク容量を大幅に削減しています。昨日の(特定フォルダの)スナップショット、一昨日のスナップショットなどが取れます。
macOSで言う所の「timemachine」かな。それをローカルのマシンでもリモート先のマシンでも対象にできます。
[root@rockylinux9 ~]# dnf install epel-release -y
[root@rockylinux9 ~]# dnf install rsnapshot -y
[root@rockylinux9 ~]# rpm -qai rsnapshot
Name : rsnapshot
Version : 1.5.1
Release : 1.el9
Architecture: noarch
Install Date: Fri 11 Jul 2025 08:21:18 PM JST
Group : Unspecified
Size : 396168
License : GPL-2.0-or-later
Signature : RSA/SHA256, Sun 09 Feb 2025 10:59:27 AM JST, Key ID 8a3872bf3228467c
Source RPM : rsnapshot-1.5.1-1.el9.src.rpm
Build Date : Sun 09 Feb 2025 10:55:09 AM JST
Build Host : buildvm-a64-23.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.
[root@rockylinux9 ~]#まずはローカルフォルダのバックアップを定義してみます。
バックアップ対象は /home/ と 「/var/log/」 で バックアップ先は /bk/ とします
設定ファイル
*スペースはタブ(\t)です
[root@rockylinux9 ~]# mv /etc/rsnapshot.conf /etc/rsnapshot.conf.orig
[root@rockylinux9 ~]# grep -v -e '^\s*#' -e '^\s*$' /etc/rsnapshot.conf.orig > /etc/rsnapshot.conf
[root@rockylinux9 ~]# cat /etc/rsnapshot.conf
config_version 1.2
snapshot_root /.snapshots/
cmd_rm /usr/bin/rm
cmd_rsync /usr/bin/rsync
cmd_logger /usr/bin/logger
retain alpha 6
retain beta 7
retain gamma 4
verbose 2
loglevel 3
lockfile /var/run/rsnapshot.pid
backup /home/ localhost/
backup /etc/ localhost/
backup /usr/local/ localhost/
[root@rockylinux9 ~]#これに修正を加えて
[root@rockylinux9 ~]# cat /etc/rsnapshot.conf
config_version 1.2
lockfile /var/run/rsnapshot.pid
cmd_rsync /usr/bin/rsync
snapshot_root /bk/ #バックアップファイルは/opt/rsnapshot/に置かれる。
retain alpha 6 # 6回スナップショットを撮るサイクル.
retain beta 7 # 7回スナップショットを撮る. 例、毎日午前1時に撮影. 8回目以降は一番過去のスナップショットが削除される
retain gamma 4 # 4回スナップショットを撮る. 例、毎週月曜日の午前2時に撮影. 5回目以降は一番過去のスナップショットが削除される
backup /home/ localhost/
backup /var/log/ localhost/
[root@rockylinux9 ~]#最後の「backup」行の「localhost」はバックアップ対象のマシンが自分自身であることを意味します。
*以前は「retain」の代わりに「interval」が使われていたが「interval」は非推奨みたい
rsnapshotの設定は上記でいいが、次は実際にrsnapshotを実際に動かす設定が必要です。それを担うのが cron となります
上記の設定どおりに動かすには下記のようにします
[root@c ~]# crontab -e
MAILTO=""
# 平日月曜日から金曜日の8,10,12,14,16,18の0時に alpha 項目を実行します
00 8,10,12,14,16,18 * * 1-5 /usr/bin/rsnapshot alpha
# 火曜日から土曜日の午前1時00分に beta を実行します
00 1 * * 2-6 /usr/bin/rsnapshot beta
# 月曜日の午前2時00分に gamma を実行します
00 2 * * 1 /usr/bin/rsnapshot gammacrontabの書式は「man 5 crontab」で確認できます
現状はバックアップ元は1つのバックアップ先、「snapshot_root」に集約される。それはそれでいいが、特定のフォルダはこれとは関係のない場所にバックアップしたいなら。
/home/ --+
/opt/data/ --+------------> 「/backup」(snapshot_root)
/etc/ --+
/data/ +--------------> 「/data-backup」rsnapshotのhelpを見ると、[-c]で設定ファイルが指定できるみたい。
[root@centos7 ~]# rsnapshot help
rsnapshot
Usage: rsnapshot [-vtxqVD] [-c cfgfile] [command] [args]
Type "man rsnapshot" for more information.
rsnapshot is a filesystem snapshot utility. It can take incremental
snapshots of local and remote filesystems for any number of machines.
rsnapshot comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to redistribute it under certain conditions.
See the GNU General Public License for details.
Options:
-v verbose - Show equivalent shell commands being executed.
-t test - Show verbose output, but don't touch anything.
This will be similar, but not always exactly the same
as the real output from a live run.
-c [file] - Specify alternate config file (-c /path/to/file)
-q quiet - Suppress non-fatal warnings.
-V extra verbose - The same as -v, but with more detail.
-D debug - A firehose of diagnostic information.
-x one_fs - Don't cross filesystems (same as -x option to rsync).
Commands:
[backuplevel] - A backup level as defined in rsnapshot.conf.
configtest - Syntax check the config file.
sync [dest] - Sync files, without rotating. "sync_first" must be
enabled for this to work. If a full backup point
destination is given as an optional argument, only
those files will be synced.
diff - Front-end interface to the rsnapshot-diff program.
Accepts two optional arguments which can be either
filesystem paths or backup directories within the
snapshot_root (e.g., /etc/ beta.0/etc/). The default
is to compare the two most recent snapshots.
du - Show disk usage in the snapshot_root.
Accepts an optional destination path for comparison
across snapshots (e.g., localhost/home/user/foo).
version - Show the version number for rsnapshot.
help - Show this help message.
[root@centos7 ~]#なので「/data」向けのrsnapshot設定ファイルを作ってそれを起動させればいいみたい。
[root@centos7 ~]# cp /etc/rsnapshot.conf /etc/rsnapshot.data.conf
[root@centos7 ~]# vi /etc/rsnapshot.data.conf
:
snapshot_root /data-backup/
logfile /var/log/rsnapshot.data
lockfile /var/run/rsnapshot.data.pid
backup /data/ localhost/
:
[root@centos7 ~]#* 「logfile」と「lockfile」の名称は既存のと被らないようにします
っでcronは下記のようにする
00 * * * * /usr/bin/rsnapshot hourly
10 23 * * * /usr/bin/rsnapshot daily
20 23 * * 4 /usr/bin/rsnapshot weekly
00 * * * * /usr/bin/rsnapshot -c /etc/rsnapshot.data.conf hourly
10 23 * * * /usr/bin/rsnapshot -c /etc/rsnapshot.data.conf daily
20 23 * * 4 /usr/bin/rsnapshot -c /etc/rsnapshot.data.conf weeklyrsyncでバックアップしているので、複数台のリモートサーバの内容を一つのマシンに集約できる。

こんな感じで
まず、rsnapshotを実行するノードで 公開鍵 を作ります
[root@rockylinux9 ~]# ssh-keygen -t ed25519 -f rsnapshot
:
(パスフレーズなしで作成)
:
[root@rockylinux9 ~]# ls -l rsnapshot*
-rw-------. 1 root root 411 Jul 12 09:07 rsnapshot
-rw-r--r--. 1 root root 98 Jul 12 09:07 rsnapshot.pub
[root@rockylinux9 ~]# cat rsnapshot.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICBWqtZysqXp1Iag+/VrkT7A/YeHAzVBgmwgc+MnV1tO root@rockylinux9
[root@rockylinux9 ~]#この公開鍵(rsnapshot.pub)の中身を バックアップ対象ノード の「/root/.ssh/authorized_keys」に追記します
root@ubuntu24:~# echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICBWqtZysqXp1Iag+/VrkT7A/YeHAzVBgmwgc+MnV1tO root@rockylinux9" >> .ssh/authorized_keysっでパスワードなしでバックアップ対象ノードに入れるかのテストを行います
[root@rockylinux9 ~]# ssh -i rsnapshot -l root ubuntu24
root@ubuntu24:~#っと入れたら事前準備は完了
っで、バックアップ対象の場所は「/home」なら
[root@rockylinux9 ~]# cat /etc/rsnapshot.conf
config_version 1.2
lockfile /var/run/rsnapshot.pid
cmd_rsync /usr/bin/rsync
snapshot_root /bk/ #バックアップファイルは/opt/rsnapshot/に置かれる。
retain alpha 6 # 6回スナップショットを撮るサイクル.
retain beta 7 # 7回スナップショットを撮る. 例、毎日午前1時に撮影. 8回目以降は一番過去のスナップショットが削除される
retain gamma 4 # 4回スナップショットを撮る. 例、毎週月曜日の午前2時に撮影. 5回目以降は一番過去のスナップショットが削除される
backup /home/ localhost/
backup /var/log/ localhost/
cmd_ssh /usr/bin/ssh
ssh_args -p 22 -i /root/rsnapshot # リモート先への接続設定
backup root@ubuntu24:/home/ ubuntu24/
[root@rockylinux9 ~]#*スペースは全てtab(\t)であることに注意
作ったファイルの設定を確認に
rsnapshot configtestで文法チェックを多なう事
ログは
verbose 2
loglevel 3
logfile /var/log/rsnapshotで定義できる。verbose, loglevelの数字は「1」がQuiet, 「2」がDefault、「3」がVerbose、「4」がExtra Verbose、「5」がDebug mode。
っがlogrotateのエントリーがないので、「/varlog/rsnapshot」はどんどん肥大します。
っでlogrotateのエントリーを入れる
[root@rockylinux9 ~]# vi /etc/logrotate.d/rsnapshot
/var/log/rsnapshot {
monthly
missingok
notifempty
rotate 12
compress
delaycompress
}
[root@rockylinux9 ~]#上記は毎月のログローテーションで、12回分残す。ローテイションされたログは次回のローテイションの時に圧縮。なので2か月分は平文のまま。そんな感じ