Skip to content
View in the app

A better way to browse. Learn more.

Unraid

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[Support] Linuxserver.io - Rsnapshot

Featured Replies

linuxserver_medium.png?v=4&s=4000

 

Application Name: Rsnapshot
Application Site: https://www.rsnapshot.org/
Docker Hub: https://hub.docker.com/r/linuxserver/rsnapshot/
Github: https://github.com/linuxserver/docker-rsnapshot

 

Please post any questions/issues relating to this docker you have in this thread.

If you are not using Unraid (and you should be!) then please do not post here, rather use the linuxserver.io forum for support.

  • 3 weeks later...

First post, weee.

 

Any idea why I'm getting this error.  The folder does exist.

 

ERROR: backup /mnt/user/Private/ localhost/ - Source directory \
"/mnt/user/Private/" doesn't exist

7 hours ago, nerbonne said:

First post, weee.

 

Any idea why I'm getting this error.  The folder does exist.

 

ERROR: backup /mnt/user/Private/ localhost/ - Source directory \
"/mnt/user/Private/" doesn't exist

Because you don't understand how volume bind mounts work in docker?

 

Always post the docker run command if you want help.

  • 2 weeks later...

I have edited rsnapshot.conf and crontabs/root in the appdata directory as follows and then restarted the docker, but the cron does not seem to get started. I do not see any snapshots being created so far. Is there anything else that needs to be done?

 

# do daily/weekly/monthly maintenance
# min   hour    day     month   weekday command
*/15    *       *       *       *       run-parts /etc/periodic/15min
0       *       *       *       *       run-parts /etc/periodic/hourly
0       2       *       *       *       run-parts /etc/periodic/daily
0       3       *       *       6       run-parts /etc/periodic/weekly
0       5       1       *       *       run-parts /etc/periodic/monthly

# rsnapshot examples
0       */2     *       *       *       rsnapshot alpha
30      4       *       *       *       rsnapshot beta
30      23      *       *       0       rsnapshot gamma

The configuration should trigger alpha backups every 2h, beta backups daily at 4:30am and gamma backups weekly on Sunday evening (23:30).

Edited by rob_robot

  • 4 months later...

This docker has a little bug. /root/.ssh/ dir schould be mounted and persistent, as after container reinstall known_hosts and private keys are lost. As workaround I am using:

ssh -i /config/id_rsa -o UserKnownHostsFile=/config/known_hosts -p 222 [email protected]

 

and my settings in rsnaphost.conf:

 

ssh_args        -i /config/id_rsa -o UserKnownHostsFile=/config/known_hosts -p 222
rsync_short_args        -az

# My mysql dump on my debian machine:
backup_exec     ssh -i /config/id_rsa -o UserKnownHostsFile=/config/known_hosts -p 222 [email protected] "mysqldump --defaults-file=/etc/mysql/debian.cnf --all-databases| bzip2 > /root/mysqldump.sql.bz2"
# Then backup whole /root folder
backup  [email protected]:/root        your.server.ip/
# and etc www vmain folders - it is ISPCONFIG machine
backup  [email protected]:/etc/        your.server.ip/
backup  [email protected]:/var/www/clients     your.server.ip/
backup  [email protected]:/var/vmail   your.server.ip/

 

 

Of course to install private key ssh login option do:

# Only once to generate key
ssh-keygen
# do this for each server where you want to install your private key
ssh-copy-id -i /config/id_rsa -p 222 [email protected]

 

 

To make this post complete:

  • it is required to modify crontabs:
root@nas:/mnt/user/appdata/rsnapshot-backup/crontabs# cat root
# do daily/weekly/monthly maintenance
# min   hour    day     month   weekday command
*/15    *       *       *       *       run-parts /etc/periodic/15min
0       *       *       *       *       run-parts /etc/periodic/hourly
0       2       *       *       *       run-parts /etc/periodic/daily
0       3       *       *       6       run-parts /etc/periodic/weekly
0       5       1       *       *       run-parts /etc/periodic/monthly

# rsnapshot examples
0      0     *       *       *       rsnapshot daily
0      1     *       *       1       rsnapshot weekly
0      2     1       *       *       rsnapshot monthly

 

  • and in rsnapshot.conf:
#########################################
#     BACKUP LEVELS / INTERVALS         #
# Must be unique and in ascending order #
# e.g. alpha, beta, gamma, etc.         #
#########################################

retain  daily   7
retain  weekly  4
retain  monthly 3

 

Edited by Kacper
Complete post

  • 3 months later...

Because i'm a big fan of healthchecks in my docker containers. i've created a healthcheck script for my rsnapshot container

 

 

i've got it located in 

/mnt/user/appdata/rsnapshot/healthcheck.sh

 

and have set "Extra Parameters" in the template to

 --health-cmd /config/healthcheck.sh --health-interval 5m --health-retries 3 --health-start-period 1m  --health-timeout 30s

 

 

 

Now if my container is unhappy, it'll mark itself as such and the autoheal (willfarrell/autoheal:1.2.0) container i've got running will restart it automatically (which may or may not solve the cause of the unhealthiness)

 

healthcheck.sh

Edited by Meles Meles
typo in script

  • 1 year later...

Trying to use rsnapshot to pull data from another server but somehow couldnt get it to work. I think I have found the issue...

 

When running

docker exec -it rsnapshot rsnapshot -t alpha

The output is: 

echo 765 > /var/run/rsnapshot.pid
mkdir -m 0700 -p /rsnapshot/
mkdir -m 0755 -p /rsnapshot/alpha.0/
/usr/bin/rsync -az --delete --numeric-ids --relative --delete-excluded \
    --rsh=/usr/bin/ssh -F /config/.ssh/config \
    SOURCE DEST
touch /rsnapshot/alpha.0/

 

but the correct syntax should be (note the apostrophes in the fifth line)

echo 765 > /var/run/rsnapshot.pid
mkdir -m 0700 -p /rsnapshot/
mkdir -m 0755 -p /rsnapshot/alpha.0/
/usr/bin/rsync -az --delete --numeric-ids --relative --delete-excluded \
    --rsh='/usr/bin/ssh -F /config/.ssh/config' \
    SOURCE DEST
touch /rsnapshot/alpha.0/

 

Any way to solve this? Thanks all.

Hi,

 

I'm trying to do a rsnapshot backup of an unraid share to a backup disk setup as a pool device. It seems to get terminated after 3 hours each time. Any clues as to what could be doing this? I'm new to this so could be an error in config and crontab so included those.

 

Thanks, Carl

 

[2022-10-17T00:00:00] /usr/bin/rsnapshot beta: started
[2022-10-17T00:00:00] echo 221 > /var/run/rsnapshot.pid
[2022-10-17T00:00:00] mkdir -m 0755 -p /.snapshots/beta.0/localhost/
[2022-10-17T00:00:07] /usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /data/Carl/ /.snapshots/beta.0/localhost/Carl
[2022-10-17T03:00:05] /usr/bin/rsnapshot beta: ERROR: rsnapshot was sent TERM signal... cleaning up
[2022-10-17T03:00:05] rm -f /var/run/rsnapshot.pid

 

# do daily/weekly/monthly maintenance
# min   hour    day     month   weekday command
*/15    *       *       *       *       run-parts /etc/periodic/15min
0       *       *       *       *       run-parts /etc/periodic/hourly
0       2       *       *       *       run-parts /etc/periodic/daily
0       3       *       *       6       run-parts /etc/periodic/weekly
0       5       1       *       *       run-parts /etc/periodic/monthly

# rsnapshot examples
00       00      *       *       *       rsnapshot beta
00       23      *       *       6       rsnapshot gamma
00       22      1       *       *       rsnapshot delta

 

#################################################
# rsnapshot.conf - rsnapshot configuration file #
#################################################
#                                               #
# PLEASE BE AWARE OF THE FOLLOWING RULE:        #
#                                               #
# This file requires tabs between elements      #
#                                               #
#################################################

#######################
# CONFIG FILE VERSION #
#######################

config_version	1.2

###########################
# SNAPSHOT ROOT DIRECTORY #
###########################

# All snapshots will be stored under this root directory.
#
snapshot_root	/.snapshots/

# If no_create_root is enabled, rsnapshot will not automatically create the
# snapshot_root directory. This is particularly useful if you are backing
# up to removable media, such as a FireWire or USB drive.
#
no_create_root	1

#################################
# EXTERNAL PROGRAM DEPENDENCIES #
#################################

# LINUX USERS:   Be sure to uncomment "cmd_cp". This gives you extra features.
# EVERYONE ELSE: Leave "cmd_cp" commented out for compatibility.
#
# See the README file or the man page for more details.
#
cmd_cp		/bin/cp

# uncomment this to use the rm program instead of the built-in perl routine.
#
cmd_rm		/bin/rm

# rsync must be enabled for anything to work. This is the only command that
# must be enabled.
#
cmd_rsync	/usr/bin/rsync

# Uncomment this to enable remote ssh backups over rsync.
#
cmd_ssh	/usr/bin/ssh

# Comment this out to disable syslog support.
#
cmd_logger	/usr/bin/logger

# Uncomment this to specify the path to "du" for disk usage checks.
# If you have an older version of "du", you may also want to check the
# "du_args" parameter below.
#
cmd_du		/usr/bin/du

# Uncomment this to specify the path to rsnapshot-diff.
#
cmd_rsnapshot_diff	/usr/bin/rsnapshot-diff

# Specify the path to a script (and any optional arguments) to run right
# before rsnapshot syncs files
#
#cmd_preexec	/path/to/preexec/script

# Specify the path to a script (and any optional arguments) to run right
# after rsnapshot syncs files
#
#cmd_postexec	/path/to/postexec/script

# Paths to lvcreate, lvremove, mount and umount commands, for use with
# Linux LVMs.
#
#linux_lvm_cmd_lvcreate	/path/to/lvcreate
#linux_lvm_cmd_lvremove	/path/to/lvremove
#linux_lvm_cmd_mount	/bin/mount
#linux_lvm_cmd_umount	/bin/umount

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

############################################
#              GLOBAL OPTIONS              #
# All are optional, with sensible defaults #
############################################

# Verbose level, 1 through 5.
# 1     Quiet           Print fatal errors only
# 2     Default         Print errors and warnings only
# 3     Verbose         Show equivalent shell commands being executed
# 4     Extra Verbose   Show extra verbose information
# 5     Debug mode      Everything
#
verbose		5

# Same as "verbose" above, but controls the amount of data sent to the
# logfile, if one is being used. The default is 3.
#
loglevel	5

# If you enable this, data will be written to the file you specify. The
# amount of data written is controlled by the "loglevel" parameter.
#
logfile	/config/rsnapshot.log

# If enabled, rsnapshot will write a lockfile to prevent two instances
# from running simultaneously (and messing up the snapshot_root).
# If you enable this, make sure the lockfile directory is not world
# writable. Otherwise anyone can prevent the program from running.
#
lockfile	/var/run/rsnapshot.pid

# By default, rsnapshot check lockfile, check if PID is running
# and if not, consider lockfile as stale, then start
# Enabling this stop rsnapshot if PID in lockfile is not running
#
#stop_on_stale_lockfile		0

# Default rsync args. All rsync commands have at least these options set.
#
#rsync_short_args	-a
#rsync_long_args	--delete --numeric-ids --relative --delete-excluded

# ssh has no args passed by default, but you can specify some here.
#
#ssh_args	-p 22

# Default arguments for the "du" program (for disk space reporting).
# The GNU version of "du" is preferred. See the man page for more details.
# If your version of "du" doesn't support the -h flag, try -k flag instead.
#
#du_args	-csh

# If this is enabled, rsync won't span filesystem partitions within a
# backup point. This essentially passes the -x option to rsync.
# The default is 0 (off).
#
#one_fs		0

# The include and exclude parameters, if enabled, simply get passed directly
# to rsync. If you have multiple include/exclude patterns, put each one on a
# separate line. Please look up the --include and --exclude options in the
# rsync man page for more details on how to specify file name patterns.
#
#include	???
#include	???
#exclude	???
#exclude	???

# The include_file and exclude_file parameters, if enabled, simply get
# passed directly to rsync. Please look up the --include-from and
# --exclude-from options in the rsync man page for more details.
#
#include_file	/path/to/include/file
#exclude_file	/path/to/exclude/file

# If your version of rsync supports --link-dest, consider enabling this.
# This is the best way to support special files (FIFOs, etc) cross-platform.
# The default is 0 (off).
#
link_dest	1

# 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

# If enabled, rsnapshot will move the oldest directory for each interval
# to [interval_name].delete, then it will remove the lockfile and delete
# that directory just before it exits. The default is 0 (off).
#
#use_lazy_deletes	0

# Number of rsync re-tries. If you experience any network problems or
# network card issues that tend to cause ssh to fail with errors like
# "Corrupted MAC on input", for example, set this to a non-zero value
# to have the rsync operation re-tried.
#
#rsync_numtries 0

# LVM parameters. Used to backup with creating lvm snapshot before backup
# and removing it after. This should ensure consistency of data in some special
# cases
#
# LVM snapshot(s) size (lvcreate --size option).
#
#linux_lvm_snapshotsize	100M

# Name to be used when creating the LVM logical volume snapshot(s).
#
#linux_lvm_snapshotname	rsnapshot

# Path to the LVM Volume Groups.
#
#linux_lvm_vgpath	/dev

# Mount point to use to temporarily mount the snapshot(s).
#
#linux_lvm_mountpath	/path/to/mount/lvm/snapshot/during/backup

###############################
### BACKUP POINTS / SCRIPTS ###
###############################

# LOCALHOST
backup	/data/Carl		localhost/
#backup	/home/		localhost/
#backup	/etc/		localhost/
#backup	/usr/local/	localhost/
#backup	/var/log/rsnapshot		localhost/
#backup	/etc/passwd	localhost/
#backup	/home/foo/My Documents/		localhost/
#backup	/foo/bar/	localhost/	one_fs=1,rsync_short_args=-urltvpog
#backup_script	/usr/local/bin/backup_pgsql.sh	localhost/postgres/
# You must set linux_lvm_* parameters below before using lvm snapshots
#backup	lvm://vg0/xen-home/	lvm-vg0/xen-home/

# EXAMPLE.COM
#backup_exec	/bin/date "+ backup of example.com started at %c"
#backup	[email protected]:/home/	example.com/	+rsync_long_args=--bwlimit=16,exclude=core
#backup	[email protected]:/etc/	example.com/	exclude=mtab,exclude=core
#backup_exec	ssh [email protected] "mysqldump -A > /var/db/dump/mysql.sql"
#backup	[email protected]:/var/db/dump/	example.com/
#backup_exec	/bin/date "+ backup of example.com ended at %c"

# CVS.SOURCEFORGE.NET
#backup_script	/usr/local/bin/backup_rsnapshot_cvsroot.sh	rsnapshot.cvs.sourceforge.net/

# RSYNC.SAMBA.ORG
#backup	rsync://rsync.samba.org/rsyncftp/	rsync.samba.org/rsyncftp/

 

Hi,

 

sorry i dont understand the  "snapshot_root    /.snapshots/" part.

I defined "/.snapshots" to "/mnt/user/data/rsnapbackup/" in my unraid docker configuration.

 

now i want to start 2 different Backup sets 

1. share.daten

2. share.album

 

BUT when i configure this in rsnapshot.conf:

backup  /data/share.daten/  /share.daten/

 

This does not work, because the hourly.0... directory all go into "/mnt/user/data/rsnapbackup/", the snapshot_root.

BUT I i want is them to be in "/mnt/user/data/rsnapbackup/SHARE.DATEN/hourly.0...." and ""/mnt/user/data/rsnapbackup/SHARE.ALBUM/hourly.0...."

 

i cant seem to put the backup into a subfolder under snapshot_root, but before hourly.0

 

But i see no other way for different paths and jobs? 

 

thanks for any tipp


desired result as seen from unraid:

 

1.)

Source: /mnt/share.daten/Daten/text/file.txt

Destination: /mnt/user/data/rsnapbackup/share.data/hourly.0/Daten/text/file.txt

 

2.

Source: /mnt/share.album/Fotoalbum/2022/file.jpg

Destination: /mnt/user/data/rsnapbackup/share.album/hourly.0/Fotoalbum/2022/file.jpg

Edited by ChrisW1337

  • 4 weeks later...

I’m trying to setup cron job. Is the file /config/crontabs/root on host suppose to be the mapped to /etc/crontabs/root on the container? The job runs perfectly if I manually edit the file on the container but it doesn’t work if I edit the file on host. 

  • 11 months later...

Since update 1.4.5-r0-ls89 on 23/11/19 cron scheduling is broken, none of the scheduling that has been working for months has been executed.

  • 1 year later...

Hello!

I am running into a few confusing things.

 

a) does it matter that the default backup periods in the rsnapshot.conf file are labeled as "alpha," "beta," etc., and the periods in the crontab file are labeled as "hourly," "daily," "weekly," etc?

 

b) when I open the rsnapshot console and type in "crontab -e" the crontab file I end up making changes to is different from the crontab file found in /config/crontabs/root. Is this a problem?

 

c) finally - my cron jobs aren't running! for safety's sake I went ahead and named my "backup periods" in rsnapshot.conf as follows:

#########################################
#     BACKUP LEVELS / INTERVALS         #
# Must be unique and in ascending order #
# e.g. alpha, beta, gamma, etc.         #
#########################################

retain  daily   6
retain  weekly  7
retain  monthly 4
#retain yearly  3

 

and wrote out both crontabs as follows:

 

crontab found by "crontab -e"

 

# do daily/weekly/monthly maintenance
# min   hour    day     month   weekday command
0       2       *       *       *       run-parts /etc/periodic/daily
0       3       *       *       6       run-parts /etc/periodic/weekly
0       5       1       *       *       run-parts /etc/periodic/monthly
0       2       1       1       *       run-parts /etc/periodic/yearly

 

/config/crontabs/root

 

# do daily/weekly/monthly maintenance
# min   hour    day     month   weekday command
0       2       *       *       *       run-parts /etc/periodic/daily
0       3       *       *       6       run-parts /etc/periodic/weekly
0       5       1       *       *       run-parts /etc/periodic/monthly
0       4       1       1       *       run-parts /etc/periodic/yearly

 

rsnapshot configtest results in "Syntax OK".

rsnapshot -t daily gives me

 

echo 506 > /config/rsnapshot.pid 
mkdir -m 0755 -p /.snapshots/daily.0/ 
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
    /data/ /.snapshots/daily.0/localhost/ 

 

which is what it should be. But the first backup just hasn't run yet. Do I need to do anything additional to start cron?

 

1 hour ago, queasy-clinic6339 said:

the periods in the crontab file are labeled as "hourly," "daily," "weekly," etc?

Those are for the underlying system, you have to add some for your rsnapshot tasks yourself according to how you've named things in the config

 

image.png.41751e881ad31beaf2510b2226d868a6.png

Edited by Kilrah

Ahahaha oh wow thank you so much! I always feel like I'm missing understanding of one crucial thing - I should have looked at the example crontab first!

And more questions!

My understanding is that rsnapshot uses rsync to duplicate hard links to original files, so multiple backups shouldn't use any more space if nothing has changed, and the backup process shouldn't take very long unless the source has changed a lot. However, it seems like my backups are completely recopying the data over every time. If I use rsnapshot-diff between two snapshots I get this:

Comparing daily.2 to daily.1

Between daily.2 and daily.1:

378107 were added, taking 733558615852 bytes

378063 were removed, saving 733307783158 bytes

Which seems to me to say that it's adding EVERYTHING and removing EVERYTHING every time. If I look for a specific file in the snapshot-diff -v, I see this:

+ daily.1/localhost/data/audiobooks/eyeofnight_audio/02- Product/Mp3s/Eye of Night - Part 1.mp3

+ daily.1/localhost/data/audiobooks/eyeofnight_audio/02- Product/Mp3s/Eye of Night - Part 3.mp3

+ daily.1/localhost/data/audiobooks/eyeofnight_audio/02- Product/Mp3s/Eye of Night - Part 2..mp3

- daily.2/localhost/data/audiobooks/eyeofnight_audio/02- Product/Mp3s/Eye of Night - Part 1.mp3

- daily.2/localhost/data/audiobooks/eyeofnight_audio/02- Product/Mp3s/Eye of Night - Part 3.mp3

- daily.2/localhost/data/audiobooks/eyeofnight_audio/02- Product/Mp3s/Eye of Night - Part 2..mp3

and if I look at the individual files I see this:

daily.1

File: Eye of Night - Part 1.mp3

Size: 45457491 Blocks: 88832 IO Block: 4096 regular file

Device: 8,1 Inode: 8269311 Links: 1

Access: (0777/-rwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)

Access: 2025-05-20 11:35:38.000000000 -0400

Modify: 2022-08-08 08:09:48.000000000 -0400

Change: 2022-08-08 08:09:48.000000000 -0400

Birth: -

daily.2

File: Eye of Night - Part 1.mp3

Size: 45457491 Blocks: 88832 IO Block: 4096 regular file

Device: 8,1 Inode: 8269310 Links: 1

Access: (0777/-rwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)

Access: 2025-05-20 11:35:41.000000000 -0400

Modify: 2022-08-08 08:09:48.000000000 -0400

Change: 2022-08-08 08:09:48.000000000 -0400

Birth: -

which, again, I THINK indicates that it's copying new ones based on the inode number. Is there an obvious reason why this might be happening?

Please find my rsnapshot.conf file attached, and, again, thank you for bearing with a not very technically minded person

rsnapshot.conf

What are the source of the data and the destination? Maybe something causes the times or such to not be consistent between runs, or the destination filesystem doesn't support hardlinks. It should be hardlinked indeed

image.png

Your conf has spaces instead of tabs as required by rsnapshot but it'd tell you the config is invalid so it might be an artifact of how the file was posted.

Mine has "cmd_rsnapshot_diff /usr/bin/rsnapshot-diff" uncommented and rsync_short_args commented, that could be the issue too?

Edited by Kilrah

16 hours ago, Kilrah said:

What are the source of the data and the destination? Maybe something causes the times or such to not be consistent between runs, or the destination filesystem doesn't support hardlinks. It should be hardlinked indeed

Okay, I think THAT'S it. The drive I'm copying everything to is exfat!!!

Basically, my big concern is that one day I'm going to die unexpectedly and my wife is going to walk into my office, look at the NAS that has every picture of our family on it and not have any idea how to get any of it off of there - so my hope was to have a drive that she could unplug and plug into a Mac and view the files on it. But it seems like the best bet for me is to reformat the drive to NTFS and I guess leave a note on the drive telling her to install Paragon!!

You can do a simple rsync then, just won't have the history.

NTFS wouldn't work with hardlinks either AFAIK, would need a "linux-y" filesystem.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.