使用Rsnapshot备份Linux系统
很久以前使用Linux Mint时,系统预装的Timeshift很好用。原本打算使用Timeshift来备份单板机Armbian系统,但TF卡剩余空间不多了,所以找到了Rsnapshot。
安装Rsnapshot:
sudo apt install rsnapshot
编辑配置文件,需特别注意,参数/值之间必须是制表符间隔(Tab),不能是空格符:
sudo nano /etc/rsnapshot.conf
配置保存备份的目录:
snapshot_root /path/rsnapshot/
注释默认的备份级别,设置新的备份级别及对应保留备份数量:
#retain alpha 6
#retain beta 7
#retain gamma 4
#retain delta 3
retain hourly 6
retain daily 7
retain weekly 4
retain monthly 3
使用小时、天、周、月的名称作为备份级别是为了好记,但并不是Crontab中的周期概念。
配置要备份的目录和排除的目录/文件:
# 备份的目录
backup /home/ ./
backup /root/ ./
backup /etc/ ./
backup /opt/ ./
backup /usr/local/ ./
backup /var/lib/mysql/ ./
backup /var/lib/postgresql/ ./
# 排除的目录
exclude /home/*/.cache/
exclude /home/*/tmp/
exclude /home/*/.local/share/Trash/
exclude /root/.cache/
exclude *.pyc
exclude *.pyo
exclude *.tmp
exclude *.temp
exclude *.log
exclude .Trash-*/
exclude lost+found/
验证配置文件有效性:
sudo rsnapshot configtest
测试备份:
sudo rsnapshot -t hourly
执行备份:
sudo rsnapshot -v hourly
Rsnapshot的备份机制
按照本文示例的配置,hourly保留6份,执行hourly时,将生成新的hourly.0备份。旧的hourly备份则重命名,处理规则为:
- 删除hourly.5
- hourly.0 → hourly.1
- hourly.1→ hourly.2
- hourly.3 → hourly.4
- hourly.4 → hourly.5
执行daily时,不会生成新的备份,只会通过重命名的方式“生成”指定级别的备份:
- 删除daily.6
- hourly.5 → daily.0
- daily.0 → daily.1
- daily.1 → daily.2
- ……
其他级别的备份原理相同,如果前一个级别没有产生备份就会报错。例如:在没有生成hourly的备份时执行以下备份会报错:
sudo rsnapshot daily
因此,在设置Crontab定时任务时,应确保先产生高频级别的备份。
如果只需要简单的保留N个备份,可以在配置文件中只指定一种级别:
retain hourly 3
#retain daily 7
#retain weekly 4
#retain monthly 3
如上设置,只会保留3个备份。
Crontab定时备份示例:
30 23 * * * root /usr/bin/rsnapshot hourly