tar备份根目录必须排除/proc、/sys、/dev、/run、/tmp,推荐额外排除/mnt、/media、/lost+found及备份路径本身;-p保留权限,-v显示过程,-z启用gzip压缩,-f指定输出文件。

tar 是最常用、最可控的整系统备份方式,适合绝大多数物理机和虚拟机场景。它不依赖特定文件系统,能保留权限、符号链接、时间戳等关键元数据,且备份文件可验证、可选择性恢复。
用 tar 备份根目录时必须排除哪些目录?
直接 tar -czf backup.tar.gz / 会失败或产生无效归档——因为 /proc、/sys 等是内核运行时虚拟文件系统,内容不可静态保存;/dev 下设备节点在恢复时需由 udev 重建;/run 和 /tmp 是临时运行态数据。
-
--exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run --exclude=/tmp是底线组合,缺一不可 -
--exclude=/mnt --exclude=/media --exclude=/lost+found推荐加上,避免挂载点和文件系统修复残留干扰 -
--exclude=/backup*或具体备份路径(如--exclude=/mnt/backup),防止把刚生成的备份文件又打包进去 - 如果用了 LVM 或 btrfs 快照,还需排除
/snapshots或/lvm相关路径(依实际而定)
tar 命令里 -p、-v、-z、-f 各自起什么作用?
这些参数不是可选修饰,而是构成可靠备份的最小功能集:
-
-p:保留文件权限和所有者。没它,恢复后/etc/shadow可能变成 644 权限,导致系统无法登录 -
-v:显示正在处理的文件路径。不是为了“看着安心”,而是便于发现卡在哪个路径(比如某个 NFS 挂载点无响应) -
-z:用 gzip 压缩。比-J(xz)快得多,压缩率足够应付多数场景;若磁盘空间极度紧张,才考虑换-J,但解压慢、CPU 占用高 -
-f:指定输出文件名。必须紧跟其后,且不能省略;写成tar -czf backup.tgz /才合法,tar -czf / backup.tgz会报错
备份到外部设备前要确认什么?
很多失败不是命令写错,而是介质状态被忽略:
- 挂载时加
-o noatime:避免备份过程触发大量磁盘写入(atime更新),拖慢速度甚至卡死 - 用
df -h /mnt/backup看真实可用空间,而不是只看磁盘标称容量——ext4 默认预留 5% 给 root,df显示的就是用户可用部分 - 执行前先跑一次
sudo touch /mnt/backup/testfile && sudo rm /mnt/backup/testfile,确认有写权限且无 SELinux/AppArmor 拦截 - 不要把备份目标设在同一个物理磁盘的不同分区(如
/backup在/dev/sda2,而系统在/dev/sda1)——硬盘故障时全丢
备份完成后必须立刻做的三件事
备份文件生成不等于备份成功。未验证的备份等于没备:
- 用
tar -tzf backup.tar.gz | head -20快速检查归档是否可读、结构是否完整(不报错即通过基础校验) - 用
sha256sum backup.tar.gz记录哈希值,存到另一台机器或打印出来——镜像损坏时这是唯一能判断是否该重备的依据 - 挑 1–2 个关键路径(如
/etc/passwd、/usr/local/bin)做抽样解压:tar -xzf backup.tar.gz -C /tmp/restore-test etc/passwd,确认内容可还原
tar 文件末尾因 USB 断连而截断,就晚了。


















