使用Rsnapshot备份Linux系统

AI大语言模型

很久以前使用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
AI大语言模型