rsync不能直接备份裸设备分区,实际是镜像已挂载的根文件系统;需挂载源分区,排除/proc、/sys、/dev等伪文件系统,用-aAXH--delete及合理exclude参数完整同步文件级数据。

直接用 rsync 备份整块系统分区(比如 /dev/sda1)是不可行的——rsync 操作对象是文件系统中的文件和目录,不是裸设备或块设备本身。它无法读取未挂载的分区、不能处理底层元数据(如 superblock、journal)、也不支持复制正在运行的 rootfs 的全部状态(如内存映射、内核模块、/proc /sys 等虚拟文件系统)。所以“备份整块系统分区”在 rsync 场景下,实际指的是:安全、完整地镜像整个已挂载的根文件系统(root filesystem)内容,同时合理排除不可复制或不应备份的路径。
关键前提:挂载并可访问目标分区
确保你要备份的系统分区(例如 /)已正常挂载且处于稳定状态。若需从 Live 环境备份离线系统,也需先将该分区挂载到某个目录(如 /mnt/sysroot),再以该挂载点为源进行操作。
必须排除的伪文件系统与运行时目录
rsync 会遍历所有子目录,若不主动排除,就会尝试读取 /proc、/sys、/dev、/run、/tmp、/mnt、/media 等——这些要么是内存映射的虚拟文件系统,要么包含临时或挂载点内容,复制它们不仅失败,还可能导致备份损坏或恢复异常。
- --exclude=/proc/*
- --exclude=/sys/*
- --exclude=/dev/*
- --exclude=/run/*
- --exclude=/tmp/*
- --exclude=/mnt/*
- --exclude=/media/*
- --exclude=/lost+found(ext 文件系统特有)
- --exclude=/var/cache/*(可选,节省空间,缓存可重建)
推荐命令:归档模式 + 安全排除 + 权限保留
以下命令将当前运行系统的根目录完整镜像到外部存储路径 /backup/system-$(date +%Y%m%d):
sudo rsync -aAXH --delete \
--exclude={"/proc/*","/sys/*","/dev/*","/run/*","/tmp/*","/mnt/*","/media/*","/lost+found"} \
/ /backup/system-$(date +%Y%m%d)/
说明:
- -a:归档模式(含递归、权限、时间戳、属主属组、软链接等)
- -A:保留 ACL 访问控制列表(重要,尤其对服务配置)
- -X:保留扩展属性(如 SELinux context,适用于 CentOS/RHEL/Fedora)
- -H:保留硬链接(避免重复占用空间)
- --delete:使目标严格镜像源——源中删除的文件,备份里也清除(确保一致性)
- 所有 exclude 路径用大括号包裹,避免 shell 展开错误
补充建议:增量备份与恢复验证
rsync 本身支持高效增量。第二次运行相同命令时,仅传输变更部分;配合 cron 可实现每日快照:
- 用 --link-dest 指向上次备份目录,生成硬链接式快照(节省空间)
- 备份后执行 ls -l /backup/system-*/etc/hostname 或 sudo diff -r /etc /backup/system-xxxx/etc 2>/dev/null | head -5 快速校验关键配置是否一致
- 恢复时不要直接覆盖运行中的 /,应在 rescue 环境下挂载目标盘,再 rsync 回写


















