背景

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

方案对比

在网上查询系统方案中,主流方案基本都采用了tar、timeshift

对于tar,是全量备份,资源占用率高,备份时间长,并不是一个理想的解决方案

对于timeshift,是增量备份,使用群体广,但是其主要文档聚集于GUI环境,对于CLI端并不友善

最后选择了Rsnapshot,同时他也是作为Ubuntu server官方推荐的快照方案,遂进行部署,希望日后能稳定运行

Rsnapshot

参考链接

https://ubuntu.com/server/docs/tools-rsnapshothttps://rumenz.com/rumenbiji/linux-rsnapshot.htmlhttps://xie.infoq.cn/article/6e788c130503571c2a1b5af4d

安装

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= 配置文件版本

    2. snapshot_root= 存储快照的备份目的地

    3. cmd_cp= 复制命令的路径

    4. cmd_rm= 删除命令的路径

    5. cmd_rsync= rsync 的路径

    6. cmd_ssh= SSH 路径

    7. cmd_logger= shell 命令接口到 syslog 的路径

    8. cmd_du= 磁盘使用命令的路径

    9. interval hourly= 要保留多少小时的备份。

    10. interval daily= 要保留多少每日备份。

    11. interval weekly= 要保留多少每周备份。

    12. interval monthly= 每月要保留多少备份。

    13. ssh_args= 可选的 SSH 参数,例如不同的端口 (-p)

    14. verbose= verbose

    15. loglevel= loglevel

    16. logfile= 日志文件的路径

    17. exclude_file= 排除文件的路径(将更详细地解释)

    18. rsync_long_args= 传递给 rsync 的长参数

    19. lockfile= lockfile

    20. 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