本家様 http://www.rsnapshot.org/

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 ~]#

rsnapshot設定

まずはローカルフォルダのバックアップを定義してみます。
バックアップ対象は /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 gamma

crontabの書式は「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 weekly

リモートからファイルバックアップ

rsyncでバックアップしているので、複数台のリモートサーバの内容を一つのマシンに集約できる。
2013y10m10d_220201855.png
こんな感じで

まず、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か月分は平文のまま。そんな感じ

最新の60件
2025-12-09 2025-12-08 2025-12-07 2025-12-05 2025-11-30 2025-11-27 2025-11-24 2025-11-23 2025-11-19 2025-11-18 2025-11-16 2025-11-05 2025-11-03 2025-11-02 2025-10-31 2025-10-30 2025-10-29 2025-10-28 2025-10-26 2025-10-25 2025-10-24 2025-10-22 2025-10-21 2025-10-17 2025-10-13 2025-10-11 2025-10-06 2025-10-05 2025-09-30 2025-09-29 2025-09-28 2025-09-25 2025-09-24 2025-09-23 2025-09-21 2025-09-20 2025-09-14 2025-09-13

edit


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2025-07-12 (土) 11:55:21