Linux 服务器备份时,哪些目录应该排除?
Linux 服务器备份通常排除 /proc /sys /dev /run 等运行态目录;/tmp、挂载目录与 lost+found 按恢复需求判断,并明确排除备份目标;rsync/tar 排除示例、必须备份的目录清单与 FAQ。
通常排除运行态目录 /proc、/sys、/dev、/run;/tmp、/mnt、/media、lost+found 是否排除要按恢复目标判断,不能无条件认定其中没有需要恢复的数据。
排除清单与原因
| 排除 | 原因 |
|---|---|
/proc /sys |
内核运行态的虚拟视图,备份它们既无意义又可能让备份工具卡死 |
/dev |
设备节点,系统启动时自动重建 |
/run |
运行时数据(PID 文件、socket),重启即重建 |
/tmp |
通常是临时数据,但需确认应用没有错误地存放必要数据,且不保证总在内存中 |
/mnt /media |
只是常用挂载目录,其他位置也可能挂载;应先列出全部文件系统并安排分别备份 |
/lost+found |
可能含恢复出的孤立文件,应先检查内容再决定 |
| 交换文件/分区 | 内存镜像,无恢复价值 |
按需排除(看你的恢复策略):/var/cache、/var/tmp、容器镜像层(/var/lib/docker 很大且可重建,但卷数据不能排)、日志归档、大对象存储挂载。
rsync / tar 实操
# rsync 整盘备份的典型排除
rsync -aAXH \
--one-file-system \
--exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found,/backup/*} \
/ /backup/server-root/
# tar 等价写法
tar --one-file-system --exclude=./proc --exclude=./sys --exclude=./dev --exclude=./run \
--exclude=./tmp --exclude=./mnt --exclude=./media --exclude=./backup \
--acls --xattrs -cvpzf /backup/server-root.tar.gz -C / .
示例明确排除备份目标,避免把新归档再次纳入自身;--one-file-system 会跳过其他挂载,必须为 /home、/var、/boot 等独立文件系统另设备份。备份文件含密钥和凭据,需限制权限并按策略加密。
必须备份的清单(对照检查)
/etc:全部配置——恢复一台机器的身份就靠它。/home、/root:用户数据。/var/www、/srv:站点与应用数据。/var/lib里的有状态服务数据:数据库(建议用数据库自己的备份工具导出后再备,直接拷数据文件有损坏风险)。- crontab:
/var/spool/cron/与/etc/crontab、/etc/cron.d/。 - SSL 证书与密钥:
/etc/letsencrypt、/etc/ssl。 - 应用自定义安装目录(
/opt等)。
目录清单确认后,还要验证备份作业确实结束且副本能恢复。若已用观测云采集作业日志,可按任务名筛选成功与失败记录,并依照日志检测配置设置预期完成窗口。缺少完成日志时先检查任务和采集链路;恢复演练仍须从备份副本实际执行。
常见问题(FAQ)
Q:数据库目录(/var/lib/mysql)直接备份行不行?
A:风险大。运行中的数据库文件处于不一致状态,拷出来的可能是坏库。正确做法:mysqldump/物理备份工具(XtraBackup)先导出,备份导出产物;或至少停库再拷。
Q:Docker 服务器要备什么?
A:确认镜像能从可信仓库或构建材料恢复;持久卷、绑定目录、Compose 配置和运行所需密钥都应纳入恢复方案。不要假定 .env 已安全入库;排除 /var/lib/docker 前必须单独保护其中的卷与不可重建数据。
Q:怎么验证备份真的能恢复?
A:定期做一次恢复演练——把备份还原到一台干净的机器/容器里验证服务能起。没演练过的备份约等于没有备份。