type
Post
status
Published
date
Jul 3, 2022
slug
rsnapshot
summary
在Ubuntu Server环境下的自己对于快照的解决方案
tags
Linux
category
技术分享
icon
password

背景

由于下载机服务器迁移回家中,并在频繁修改后已经趋于稳定,可以平稳运行了,但是万一日后需要添加新的功能导致出现了问题又崩溃了,修复的时间成本过大,此刻就需要进行一次系统备份

方案对比

在网上查询系统方案中,主流方案基本都采用了tar、timeshift
对于tar,是全量备份,资源占用率高,备份时间长,并不是一个理想的解决方案
对于timeshift,是增量备份,使用群体广,但是其主要文档聚集于GUI环境,对于CLI端并不友善
最后选择了Rsnapshot,同时他也是作为Ubuntu server官方推荐的快照方案,遂进行部署,希望日后能稳定运行

Rsnapshot

参考链接

安装

apt-get install rsnapshot

配置

编辑rsnapshot配置文件
vim /etc/rsnapshot.conf
 
  • 指定根目录
在配置文件中会有大量注释,找到 snapshot_root指定一个备份目录,它将作为一个默认路径。我的备份目录位置是 /mnt3/back_up/,它位于我的移动硬盘内,他具有足够大的容量去备份
注意最后要添加/进行路径闭合,不然语法检查不通过
snapshot_root /data/backup/
如果需要被远程备份,取消cmd_ssh注释,使rsnapshot允许远程备份
cmd_ssh /usr/bin/ssh
 
  • 指定备份保留数量
指定要保留多少个旧备份,及其参数名
其中的hourly参数对应的是之后运行时传入的参数
他会根据你传入的参数,决定他的备份保留数量
对于最新版的alpha, beta, gamma, etc书写格式,他基本与下方意思一一对应
如果你想更chinese化,正常修改成如下即可,一样运行
对于备份,采用的是增量备份,无需担心过多的频率带来的额外空间开销
######################################### # BACKUP INTERVALS # # Must be unique and in ascending order # # i.e. alpha, beta, gamma, etc. # ######################################### retain hourly 6 retain daily 5 retain weekly 3 retain monthly 2
 
  • 指定当前服务器的SSH端口
对于更改了SSH默认端口的,你需要指定远程备份服务器的端口号,如果没有不变即可。
ssh_args -p xxxx
 
  • 备份目录
对于本地备份,直接指定路径即可
localhost代表着保存在之前设置好的snapshot_root路径下
注意最后要添加/进行路径闭合,不然语法检查不通过
backup / localhost/ backup /etc/ localhost/
备份远程目录
如果要备份远程服务器目录,则需要告诉rsnapshot服务器在哪里以及要备份哪些目录
在这里,我正在备份我的远程服务器 /home 目录
 /data/backup 为rsnapshot 服务器上的目录。
backup root@example.com:/home/ /data/backup/
排除不需要的目录
对于部分目录是不需要的,我们可以进行排除设置,将其添加在备份本地目录时的后方即可
exclude=/home/tom/music ,排除目录可以用逗号隔开
backup / localhost/ exclude=/mnt1,exclude=/mnt2,exclude=/mnt3
 
  • 当前配置
config_version 1.2 snapshot_root /mnt3/back_up/ cmd_cp /bin/cp cmd_rm /bin/rm cmd_rsync /usr/bin/rsync cmd_logger /usr/bin/logger retain hourly 6 retain daily 5 retain weekly 3 retain monthly 2 verbose 2 loglevel 3 lockfile /var/run/rsnapshot.pid backup / localhost/ exclude=/mnt1,exclude=/mnt2,exclude=/mnt3
参数解释(只启用了部分)
  1. config_version 1.2= 配置文件版本
  1. snapshot_root= 存储快照的备份目的地
  1. cmd_cp= 复制命令的路径
  1. cmd_rm= 删除命令的路径
  1. cmd_rsync= rsync 的路径
  1. cmd_ssh= SSH 路径
  1. cmd_logger= shell 命令接口到 syslog 的路径
  1. cmd_du= 磁盘使用命令的路径
  1. interval hourly= 要保留多少小时的备份。
  1. interval daily= 要保留多少每日备份。
  1. interval weekly= 要保留多少每周备份。
  1. interval monthly= 每月要保留多少备份。
  1. ssh_args= 可选的 SSH 参数,例如不同的端口 (-p)
  1. verbose= verbose
  1. loglevel= loglevel
  1. logfile= 日志文件的路径
  1. exclude_file= 排除文件的路径(将更详细地解释)
  1. rsync_long_args= 传递给 rsync 的长参数
  1. lockfile= lockfile
  1. backup= 要备份的内容的完整路径,然后是放置的相对路径。
 

验证 Rsnapshot 配置

完成所有配置后,就可以验证一切是否按预期工作。运行以下命令以验证你的配置是否具有正确的语法。
rsnapshot configtest OK
测试当前配置,但不使其生效
rsnapshot -t hourly
-t 参数使其不生效,只是列出执行列表
 

执行备份

rsnapshot hourly
上面的命令将使用我们添加的所有配置运行备份脚本rsnapshot.conf 文件并创建一个 backup  目录,然后在其下创建用于组织我们文件的目录结构。运行上述命令后,你可以通过转到备份目录并使用ls -l 命令列出目录结构来验证结果
 

自动化流程

使流程自动化,你需要安排rsnapshot以一定的时间间隔运行Cron.默认情况下,rsnapshot自带cron文件在 /etc/cron.d/rsnapshot,如果它不存在,则创建一个并向其添加以下几行。
默认规则是注释的,所以你需要删除 # 从前面的调度部分启用这些值。
# This is a sample cron file for rsnapshot. # The values used correspond to the examples in /etc/rsnapshot.conf. # There you can also set the backup points and many other things. # # To activate this cron file you have to uncomment the lines below. # Feel free to adapt it to your needs. 0 */12 * * * root /usr/bin/rsnapshot hourly 30 3 * * * root /usr/bin/rsnapshot daily 15 3 * * 1 root /usr/bin/rsnapshot weekly 30 2 1 * * root /usr/bin/rsnapshot monthly
协同编程低延迟方案HK1 BOX 校园有线网转无线热点