dd全盘备份常出问题,因其字节级拷贝不识别文件系统,遇坏块、动态设备、lvm/raid/nvme差异易致不可恢复镜像,且不跳过空闲块、目标盘略小即静默失败。

dd 做全盘备份为什么常出问题
因为 dd 是字节级拷贝,不识别文件系统结构,遇到坏块、动态写入的设备(如正在运行的根分区)、LVM/RAID 元数据或 NVMe 的命名空间差异时,极易产生不可恢复的镜像。它适合裸设备克隆(比如换硬盘前对 /dev/sdb 整盘复制),但不适合日常备份。
- 运行中系统直接
dd if=/dev/sda of=backup.img可能写入不一致的数据——例如 ext4 的 journal 还没刷盘,镜像里就出现损坏的 superblock -
dd不跳过空闲块,1TB 磁盘哪怕只用了 20GB,也照常拷 1TB,压缩率低、耗时长 - 恢复时若目标盘比源盘小 1 个扇区,
dd会静默失败,最后几 MB 写不进去,但退出码仍是 0
rsync 同步根目录必须加的关键参数
用 rsync 做文件级备份更安全可控,但默认行为会丢关键元数据和特殊文件。要还原成可启动系统,这些参数缺一不可:
-
-a:等价于-rlptgoD,保留链接、权限、时间戳、所有者、组、设备文件、字符设备 -
--delete:确保目标与源严格一致(慎用于首次备份,建议首次用--dry-run验证) -
--exclude必须排除/proc、/sys、/dev、/run、/tmp—— 这些是运行时虚拟文件系统,拷过去不仅无用,还可能破坏目标环境 - 加上
--one-file-system,避免 rsync 误跨挂载点(比如 /home 单独挂载时不会被拉进 / 备份)
典型命令:rsync -a --delete --one-file-system --exclude='/proc' --exclude='/sys' --exclude='/dev' --exclude='/run' --exclude='/tmp' / /mnt/backup/
遇到 LVM 或 btrfs 时别硬套通用方案
LVM 和 btrfs 自带快照能力,强行用 dd 或 rsync 是绕开特性、自找麻烦。
- LVM:先
lvcreate -s -n snap_root /dev/vg0/root创建快照卷,再对/dev/vg0/snap_root执行dd或rsync—— 这样保证一致性,且不影响原卷 IO - btrfs:用
btrfs subvolume snapshot创建只读子卷快照,然后btrfs send+btrfs receive增量传输,比rsync更快、更省空间,还能跨设备校验 - 注意:btrfs 的
send必须基于已有父快照,首次需先send全量,后续才能send -p增量
恢复后系统无法启动的三个高频原因
备份做得再好,恢复失败就白忙。最常卡在以下三处:
- GRUB 没重装:目标盘 MBR 或 ESP 分区没写入引导代码,
grub-install /dev/sdX必须执行,且要确认chroot到恢复后的根目录下操作 -
/etc/fstab里的 UUID 没更新:如果恢复到新硬盘,原磁盘 UUID 已失效,得用blkid查新 UUID,再改/etc/fstab和/boot/grub/grub.cfg(或 regen grub config) - initramfs 未重建:特别是 LVM/btrfs 根分区,恢复后需
update-initramfs -u(Debian/Ubuntu)或dracut --force(RHEL/Fedora),否则内核找不到根设备
这些步骤没有“自动检测”,漏一个,重启就停在 initramfs shell 里。










