新手也能搭:Linux服务器系统备份策略完整教程
为什么你需要一套系统备份策略
服务器数据一旦丢失,恢复成本极高。Linux服务器系统备份策略 就是通过全量、增量或差异备份,把系统文件、数据库和配置定期复制到安全位置。
对于新手来说,最怕操作复杂或备份失败而不自知。
本文会从零开始,讲清楚每一步命令和要点。
开始前需要准备什么
- 一台 Linux 服务器(本教程以 Ubuntu 20.04 为例,其他发行版命令类似)
- 备份目标目录(本地磁盘或远程 NFS 挂载,路径如
/backup) - root 权限或 sudo 权限
- 已安装
rsync和cron(一般系统自带,没有则用apt install rsync安装)
重点: 备份目标磁盘容量要大于待备份数据总量的1.5倍,否则增量备份也会撑爆。
动手配置第一个备份脚本
1. 创建全量备份脚本
使用 tar 打包系统关键目录(排除 /proc, /sys, /dev, /run 等虚拟目录):
sudo mkdir -p /backup/full
sudo vim /usr/local/bin/full_backup.sh
写入以下内容:
#!/bin/bash
DATE=$(date +%Y%m%d)
tar --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run \
--exclude=/mnt --exclude=/media --exclude=/lost+found \
-czf /backup/full/full_backup_$DATE.tar.gz /
赋予执行权限:
sudo chmod +x /usr/local/bin/full_backup.sh
2. 创建增量备份脚本
这里用 rsync 实现基于快照的增量备份(硬链接方式),节省空间和传输时间:
sudo mkdir -p /backup/incremental/current
sudo vim /usr/local/bin/incremental_backup.sh
写入:
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M)
BACKUP_DIR=/backup/incremental
rsync -av --delete --link-dest=$BACKUP_DIR/current \
/ $BACKUP_DIR/$DATE
rm -f $BACKUP_DIR/current
ln -s $BACKUP_DIR/$DATE $BACKUP_DIR/current
同样赋予执行权限:
sudo chmod +x /usr/local/bin/incremental_backup.sh
解释:--link-dest让 rsync 对没有变化的文件创建硬链接(不占用额外空间),只有变化部分才复制。冷知识:每次运行后软链接current会指向最新备份目录。
3. 设置定时任务(cron)
编辑 crontab:
sudo crontab -e
建议每周一次全量备份,每天一次增量备份:
# 每周日 02:00 执行全量备份
0 2 * * 7 /usr/local/bin/full_backup.sh
# 每天 03:00 执行增量备份(周日除外)
0 3 * * 0-6 /usr/local/bin/incremental_backup.sh
保存后,cron 会自动生效。
备份过程中的常见坑
- 磁盘空间不足: 全量备份一次可能十几 GB,建议备份完成后用
du -sh /backup查看用量,并设置磁盘告警。 - 权限错误: rsync 默认保留权限,但访问
/proc等虚拟目录会报错。使用--exclude排除后加2>/dev/null或重定向错误日志。 - 增量备份硬链接断开: 如果手动删除
current软链接,后续备份会重新全量复制。务必保留该软链接。 - 忘记测试恢复: 备份后不验证等于白做。每月至少从备份中恢复一个文件测试。
如何确认备份是有效的
验证全量备份包完整性
tar -tzf /backup/full/full_backup_20250101.tar.gz | head -20
如果输出文件列表,没有错误,说明包未损坏。
验证增量备份一致性
随机抽取一个文件,检查是否可读:
ls -la /backup/incremental/20250101_0300/etc/hosts
对比原始文件:
sudo diff /etc/hosts /backup/incremental/20250101_0300/etc/hosts
无输出表示完全一致。
高频问题解答
Q:备份占用太多空间,怎么办?
A:调高全量备份间隔(如每两周一次),并设置保留最近N份备份的脚本自动删除过期文件。
Q:备份到远程服务器呢?
A:rsync 支持远程路径,将增量脚本中的目标路径改为 user@remote:/backup,并配置 SSH 免密登录。
Q:我的网站是宝塔面板,有差别吗?
A:宝塔自带计划任务,可调用上述脚本。主要差别是目录:你的网站数据通常在 /www/wwwroot,数据库在 /www/server/data 或使用宝塔插件备份。可以单独备份这些目录。
总结
一套基础的 Linux服务器系统备份策略 并不复杂:先做全量快照,再用 rsync 增量跟进,配上 cron 自动执行,最后定期验证。
从这篇教程动手,你就能避免“数据丢了才后悔”的情况。
遇到异常时,优先回看避坑部分和常见问题。