Linux系统快照一键备份恢复、不同机器恢复、增量备份恢复

前言

  • 由于前端时间在做一个自动化部署开发环境的项目需要重复安装多种服务以及中间件,但是公司的服务器不像自己的虚拟机可以使用快照,如果直接操作会导致每次测试完就要重装系统,这肯定行不通,于是开始想办法做系统快照备份。

工具对比

  • tar:
  • 保留权限
  • 适合备份整个目录
  • 可以选择不同的压缩方式
  • 如果选择不压缩还能实现增量备份,部份还原,参考man tar

  • dd:

  • 对块进行操作,能备份整个硬盘,包括分区表以及其他Linux不能很好支持的文件系统
  • 可以进行压缩
  • 经过大量测试发现tar最适合我现在的测试场景
  • 以下测试基于Rocky Linux系统 使用tar进行备份恢复操作

系统快照备份

  • 创建备份
# 创建备份目录
mkdir /backup/ 


# 全量系统备份实例
tar -g snapshot -cvpzf 
    /backup/full_backup.tar.gz \
    --exclude=/proc \
    --exclude=/lost+found \
    --exclude=/mnt \
    --exclude=/sys \
    --exclude=/media \
    --exclude=/backup \
    / 


# 增量系统备份实例(改下备份文件名即可)
tar -g snapshot -cvpzf 
    /backup/diff_backup.tar.gz \
    --exclude=/proc \
    --exclude=/lost+found \
    --exclude=/mnt \
    --exclude=/sys \
    --exclude=/media \
    --exclude=/backup \
    / 


# 注释
--exclude:忽略备份的目录

系统快照恢复

  • 本机系统备份恢复
# 全量备份恢复
tar -g snapshot -zxvpf /backup/full_backup.tar.gz -C / etc home run usr var root

# 增量备份恢复 
tar -g snapshot -zxvpf /backup/diff_backup.tar.gz -C / etc home run usr var root

# 恢复SELinux文件属性
restorecon -Rv /etc /home /run /usr /var /root

# 保险起见在执行一下
restorecon -Rv /

# 重启电脑
reboot
  • 本机系统备份恢复至其他机器
# 全量备份恢复
tar -g snapshot -zxvpf /backup/full_backup.tar.gz -C / etc home run usr var root

# 增量备份恢复 
tar -g snapshot -zxvpf /backup/diff_backup.tar.gz -C / etc home run usr var root

# 恢复SELinux文件属性
restorecon -Rv /etc /home /run /usr /var /root

# 保险起见在执行一下
restorecon -Rv /

# 查看/boot 挂载位置 
df -h
# 本次测试挂载位置
/dev/sda2           1014M  188M  827M   19% /boot

# 查看/dev/sda2 的 uuid
blkid
# 本次测试 UUID="11e22d15-8d1f-4f12-ae62-7c2048e190f9"
/dev/sda2: UUID="11e22d15-8d1f-4f12-ae62-7c2048e190f9" BLOCK_SIZE="4096" TYPE="xfs" PARTUUID="c21f8a20-b8d8-528d-acab-a2ba9a76115d"


# 修改 /etc/fstab 文件中UUID值修改为上面查到的UUID 可使用vim等编辑工具或者使用sed替换
sed -i "s/old UUID/new UUID/g" /etc/fstab

# 注:仔细观察fstab其他挂载目录是否正确 如不正确修改为本机实际挂载位置

# 如果系统装有mysql,删除以下文件,默认如下
mv /var/lib/mysql/auto.cnf /var/lib/mysql/auto.cnf.back

# 重启电脑
reboot

使用脚本进行备份恢复

  • 备份系统or普通文件目录

  • 执行格式:system_snapshot.sh backup 快照绝对路径 备份文件绝对路径 备份目录 需要过滤的目录(多个目录空格隔开)

  • 执行实例:
# 备份系统 
# 快照及备份文件存储到/data/test/
system_snapshot.sh backup /data/test/snapshot /data/test/systembackup / /proc /lost+found /mnt /sys /media /data

# 备份普通目录或文件
# 实例:备份/data/整个目录 快照及备份文件存储到/backup/
system_snapshot.sh backup /backup/snapshot /backup/data-bak /data /backup/
  • 恢复系统or普通文件目录

  • 执行格式:system_snapshot.sh restore 快照绝对路径 备份文件绝对路径 恢复目录 需要恢复的文件或目录

  • 执行实例:
# 恢复系统备份快照 /data/test/systembackup_20221230-175555.tar.gz
system_snapshot.sh restore /data/test/snapshot /data/test/systembackup_20221230-175555.tar.gz / etc home run usr var root

# 恢复/data/目录备份快照/backup/data-bak_20221230-175720.tar.gz
system_snapshot.sh restore /backup/snapshot /backup/data-bak_20221230-175720.tar.gz /
  • 设置定时备份系统
# 每天凌晨1点开始备份/data目录 忽略备份full_backup.tar.gz文件
00 01 * * * system_snapshot.sh backup /backup/snapshot /backup/data-bak /data /backup/ >> /bak/crontab.log 2>&1
  • 脚本可实现自动增量备份系统或普通文件目录

结语

  • 以上就是本人测试linux本机系统一键备份恢复、linux本机系统备份、不同机器恢复 的全过程。
  • 如有操作或者其他问题欢迎去我的博客(www.loganjin.cn)留言或者微信公众号(Python技术交流圈)留言交流哦。

版权声明:如无特殊说明,文章均为本站原创,转载请注明出处

本文链接:https://www.loganjin.cn/article/linux-backup/

许可协议:署名-非商业性使用 4.0 国际许可协议