# 备份的种类、频率、与工具的选择
备份的种类粗了分为:累积备份、差异备份。如果仅想在系统出错时重新安装到更新的系统时,仅备份关键数据也可以
# 完整备份之累积备份(Incremental backup)
笔者个人觉得,关于要如何备份,要看你的需求,这里讲解每种备份的一些思路与思考
# 还原考虑
如果是完整备份的话,可以直接备份 /
根目录下的所有文件,还原时也是全部还原,这个是很快速方便的,还可以备份一个文件系统,例如 /dev/sda1
# 累积备份的原则(增量备份)
累积备份:系统先进行一次完整数据备份之后,下次再备份仅备份有变化的数据。
这样备份规则数据量小且快速,备份很有效率
如何还原?由于是增量备份,当还原的时候需要从第一次备份开始以此还原
# 累积备份使用的备份软件
完整备份常用的工具有 dd、cpio、xfsdump、xfsrestor 等。因为这些工具都能备份设备与特殊文件
- dd 可以直接读取磁盘扇区而不管文件系统,缺点就是有点慢
- cpio 能备份所有的文件,但是需要 find 或其他找文件名的指令才能处理
以上两个都可以完整备份,但累计备份就要额外的使用脚本程序来处理。
xfsdump 可以直接完成累积备份,这部分知识在第 8 章有讲解
# 1. 用 dd 将 /dev/sda 备份到完全一模一样的 /dev/sdb 硬盘上
dd if=/dev/sda of=/dev/sdb
# 由于是直接读取扇区,所以 /dev/sdb 磁盘可以不用格式化
# 2. 使用 cpio 来备份还原整个系统,假设存储媒体为 SATA 磁带机
find / -print | cpio -covB > /dev/st0 # 备份到磁带机
cpio -iduv < /dev/st0 # 还原
2
3
4
5
6
7
假设 /home
是一个独立的文件系统,而 /backupdata
也是一个独立的用来备份的文件系统,如何使用 dump 将 /home
完整备份到 /backupdata 呢?
# 1. 完整备份
xfsdump -l 0 -L 'full' -M -f /backupdata/home.dump /home
# 2. 第一次进行累积备份
xfsdump -l 1 -L ‘full-1’ -N -f /backupdata/home.dump1 /home
2
3
4
5
ta 也可以用来进行完整备份。比如 backupdata
是个独立的文件系统,想将整个系统备份起来时,可以这样考虑:将不需要备份的 /proc
、/mnt
、/tmp
等目录不备份,其他的数据则备份
tar -exclude /proc --exclude /mnt --exclude /tmp --exclude /backupdata -jcvp /backupdata/system.tar.bz2
# 完整备份之差异备份(Differential backup)
差异备份:与累积备份类似,第一次需要完整备份,后面的每次备份都是以第一次作为基准的差异备份。所以系统运行越久,离完整备份时间越长,那么该次的差异备份数据可能就会越大
差异备份与累积备份的常用工具类似,因为都需要完整备份,如果使用 xfsdump 来备份的话,那么每次备份的等级(level) 就都是 level 1 。
当使用 tar 的时候,可以使用 -N 选项来备份
tar -N ‘2020-04-04’ -jpcv -f /backupdata/home.tar.bz2 /home
# 只有在比 2020-04-04 还要新的文件时,在 /home 下的文件才会被打包进 home.tar.bz2 中
# 有一点不好就是,目录会被备份进来,只是目录内的旧文件不会备份
2
3
另外还可以通过 rsync 来进行镜像备份。rsync 可以对两个目录进行镜像(mirror),算是一个非常快速的备份工具,简单指令语法 rsync -av 来源目录 目标目录
# 1. 将 /home/ 镜像到 /backupdata/home/
rsync -av /home /backupdata/
# 此时会在 /backupdata 下产生 home 目录
rsync -av /home /backupdata/
# 再次执行就会快很多,如果数据没有改变,几乎不会进行任何动作
2
3
4
5
6
差异备份所使用的磁盘容量可能会比累积备份更大,但是差异备份还原较快
# 关键数据备份
完整备份虽然有很多好处,但是需要花费很多时间,在某些场景下只需要备份重要文件即可,比如你的主机不是一定要 24 小时提供的服务,就算宕机两三天,可能也不会影响到你的正常生活时。
关机数据备份也有一些好处:比如完整备份是在系统运行期间,如果系统本身就有问题了,就算还原回去,还是有问题的
对于关机数据的备份,对于还原稍微难一点,你需要很熟悉系统的运作,尤其是 SELinux 等安全行管的权限等问题时。
作者在备份关键数据时喜欢使用 tar + date 来配合
tar -jpcvf mysql.`date +%y-%m-%d`.tar.bz2 /var/mysql
备份是非常重要的工作,你可以编写脚本配合 crontab 去执行