dd命令可实现linux整盘扇区级克隆,复制mbr/gpt、引导记录、文件系统及全部数据,目标盘容量≥源盘即可直接启动;需先用lsblk或fdisk -l确认设备名,推荐在live usb中执行sudo dd if=/dev/sda of=/dev/sdb bs=4m status=progress conv=noerror,sync,并克隆后更新fstab uuid、重装grub及重建initramfs。

直接用 dd 命令做整盘克隆是最常用、最可靠的方式,尤其适合 CentOS、Ubuntu 等主流 Linux 发行版。它复制的是原始扇区数据,包括分区表、引导记录(MBR/GPT)、文件系统结构和所有文件,克隆后新硬盘可直接替换启动。
确认源盘和目标盘设备名
这是最关键的一步,错选会导致数据被覆盖甚至丢失。
- 运行
lsblk或fdisk -l查看所有磁盘及其分区,重点关注容量、型号和挂载点 - 源盘(如旧系统盘)通常是已挂载的
/dev/sda或/dev/nvme0n1 - 目标盘(新硬盘)应未挂载、无重要数据,例如
/dev/sdb或/dev/nvme1n1 - 务必核对设备容量是否匹配——目标盘容量必须 ≥ 源盘总容量
执行 dd 克隆(推荐参数)
在 Live USB 环境(如 Ubuntu/CentOS 安装盘)中操作更安全,避免源盘被占用。
- 基础命令(适用于大多数场景):
sudo dd if=/dev/sda of=/dev/sdb bs=4M status=progress conv=noerror,sync -
bs=4M:提升传输效率,比默认 512 字节快得多 -
status=progress:实时显示进度(需 GNU coreutils ≥ 8.24) -
conv=noerror,sync:遇到坏块时跳过并填充零,防止中断
克隆后必须做的三件事
仅复制数据还不够,Linux 启动依赖 UUID 和引导配置。
-
更新 /etc/fstab 中的 UUID:用
blkid查出新硬盘各分区的 UUID,替换 fstab 中旧值 -
重装 GRUB 到新硬盘:
挂载新系统根分区(如mount /dev/sdb1 /mnt),再执行:mount --bind /dev /mnt/dev && mount --bind /proc /mnt/proc && mount --bind /sys /mnt/syschroot /mnt grub2-install /dev/sdb && grub2-mkconfig -o /boot/grub2/grub.cfg -
检查 initramfs 是否适配新硬件(尤其换 NVMe 或 RAID):
在新系统内运行dracut -f重建启动镜像
其他适用场景的替代方案
如果目标盘比源盘小,或想跳过空闲空间节省时间,可考虑:
- Clonezilla Live:图形化界面,支持压缩、校验、网络克隆,自动适配分区大小
-
partclone + dd:先用
partclone.ext4 -c -s /dev/sda1 -o sda1.partclone.img只克隆已用数据,再恢复到更小目标盘 - rsync(仅限文件级迁移):适合已有新盘并分区格式化好,但需手动处理引导和 fstab,不复制 MBR/GPT











