Linux 服务器备份时,哪些目录应该排除?
Linux 服务器备份的排除清单:/proc /sys /dev /run /tmp 等伪文件系统必排,缓存与挂载点按需排除;rsync/tar 排除示例、必须备份的目录清单与 FAQ。
必须排除的:/proc、/sys、/dev、/run、/tmp、/mnt、/media、/lost+found——前四个是内核伪文件系统(不是真实数据),/tmp 是易失临时文件,/mnt 和 /media 是挂载点(会把挂上去的盘整个卷进备份)。
排除清单与原因
| 排除 | 原因 |
|---|---|
/proc /sys |
内核运行态的虚拟视图,备份它们既无意义又可能让备份工具卡死 |
/dev |
设备节点,系统启动时自动重建 |
/run |
运行时数据(PID 文件、socket),重启即重建 |
/tmp |
临时文件,语义上就是可丢弃的 |
/mnt /media |
挂载点——不排的话 NFS/外接盘会被整个拷进备份 |
/lost+found |
fsck 的碎片收容所,无备份价值 |
| 交换文件/分区 | 内存镜像,无恢复价值 |
按需排除(看你的恢复策略):/var/cache、/var/tmp、容器镜像层(/var/lib/docker 很大且可重建,但卷数据不能排)、日志归档、大对象存储挂载。
rsync / tar 实操
# rsync 整盘备份的典型排除
rsync -aAXH \
--exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found} \
/ /backup/server-root/
# tar 等价写法
tar --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run \
--exclude=/tmp --exclude=/mnt --exclude=/media \
-cvpzf backup.tar.gz /
必须备份的清单(对照检查)
/etc:全部配置——恢复一台机器的身份就靠它。/home、/root:用户数据。/var/www、/srv:站点与应用数据。/var/lib里的有状态服务数据:数据库(建议用数据库自己的备份工具导出后再备,直接拷数据文件有损坏风险)。- crontab:
/var/spool/cron/与/etc/crontab、/etc/cron.d/。 - SSL 证书与密钥:
/etc/letsencrypt、/etc/ssl。 - 应用自定义安装目录(
/opt等)。
观测云对照
备份作业是典型的"平时没声音、出事救不了"的系统。备份脚本输出落日志、DataKit 采集到观测云,用心跳式监控——预期时间窗口内没有"备份成功"日志就告警;同时监控备份目标盘的剩余空间,"备份悄悄失败三个月"这种经典悲剧才能杜绝。
常见问题(FAQ)
Q:数据库目录(/var/lib/mysql)直接备份行不行?
A:风险大。运行中的数据库文件处于不一致状态,拷出来的可能是坏库。正确做法:mysqldump/物理备份工具(XtraBackup)先导出,备份导出产物;或至少停库再拷。
Q:Docker 服务器要备什么?
A:镜像不用备(仓库里有);卷(volumes)必须备;compose 文件和 .env 在版本库里就不用单独备。/var/lib/docker 整体排除是常见做法。
Q:怎么验证备份真的能恢复?
A:定期做一次恢复演练——把备份还原到一台干净的机器/容器里验证服务能起。没演练过的备份约等于没有备份。