必须以root权限执行并使用-p选项,备份时需排除/proc、/sys等虚拟目录,恢复时应在Live环境用-xvpzf加-C和--numeric-owner确保权限属主完整还原。

用 tar 备份恢复时保持属主、权限不丢失,关键不是“加个参数就行”,而是整套操作要闭环:备份时正确归档、排除干扰项;恢复时在合适环境执行、带全必要选项。下面分场景说清楚。
备份阶段必须启用 -p 且以 root 身份运行
属主(user/group)和权限(rwx)属于元数据,普通用户无法读取 /etc/shadow 的属主信息,也无法打包 /root 下的文件。所以:
- 必须用 sudo 或 root 权限 执行 tar,否则即使加了 -p,tar 也拿不到真实 uid/gid,恢复后会变成当前用户或 nobody
- -p(或 --preserve-permissions)是刚需,它同时保留文件权限、所有者、所属组、时间戳;缺它会导致 /etc/shadow 变成 644 权限、cron 任务失效、SSH 登录拒绝等严重问题
- 不要只写 -p,建议组合使用:-cpzf(c 创建、p 保权限、z gzip 压缩、f 指定文件),例如:
sudo tar -cpzf /backup/etc-$(date +%F).tar.gz /etc
系统级备份要排除虚拟与临时目录
直接 tar / 会失败或污染备份,因为部分目录内容不能静态归档:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
-
必须排除:
--exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run --exclude=/tmp(这些是内核/udev 动态生成的,无实际文件内容) -
强烈建议排除:
--exclude=/mnt --exclude=/media --exclude=/lost+found --exclude=/backup*(避免挂载点、修复残留、备份文件自身被重复打包) - 完整示例:
sudo tar -cpzf /backup/full-$(date +%F).tar.gz / \--exclude=/proc --exclude=/sys --exclude=/dev \--exclude=/run --exclude=/tmp --exclude=/mnt \--exclude=/media --exclude=/lost+found --exclude=/backup*
恢复时需在干净环境并补全选项
恢复不是简单解压,尤其整系统还原时:
- 必须在 Live 系统或 chroot 环境中执行,不能在原系统上直接解压到 / —— 否则正在运行的进程会锁文件、覆盖关键运行时配置
- 恢复命令也要带 -p,且推荐加 -v(看过程)、--numeric-owner(跳过用户名映射冲突):
sudo tar -xvpzf full-2026-09-15.tar.gz -C /mnt/target --numeric-owner - 如果目标分区已挂载为 /mnt/target,-C /mnt/target 是必需的,确保路径重定向正确;若要覆盖根目录,必须确认 /mnt/target 是空的或已清空旧系统
进阶:需要保留 ACL、扩展属性时加对应开关
普通 -p 不管 ACL(getfacl)、chattr(lsattr)、capabilites(getcap)等:
- 备份时加:--acls --xattrs --selinux(后者仅 SELinux 系统需要)
- 恢复时同样要加这些选项,且 --xattrs-include='*' 确保扩展属性不被过滤
- 示例:
sudo tar --acls --xattrs --selinux -cpzf backup-with-attrs.tar.gz /etcsudo tar --acls --xattrs --selinux --xattrs-include='*' -xvpzf backup-with-attrs.tar.gz -C /mnt/target

















