平滑迁移根目录分区需确保启动链不断、服务不中断、数据不丢失;关键步骤包括:格式化新分区并用rsync同步数据,chroot后更新fstab与initramfs,重装GRUB并生成配置,最后验证启动。

在生产环境中平滑迁移根目录分区,核心不是“复制完就换硬盘”,而是确保系统启动链不断、服务不中断、数据不丢失。关键在于避免直接挂载替换引发的内核 panic 或 GRUB 找不到 root 分区,同时保留原有运行状态和配置一致性。
提前准备新分区并同步数据
先将新硬盘(如 /dev/nvme0n2p1)格式化为相同文件系统(如 ext4),再挂载到临时路径(如 /mnt/newroot)。使用 rsync -aAXH --exclude='/proc' --exclude='/sys' --exclude='/dev' --exclude='/run' --exclude='/tmp' --exclude='/boot' / /mnt/newroot/ 完整同步根目录内容。注意保留 ACL、扩展属性、硬链接和权限,-H 确保设备文件正确重建。
更新 fstab 与重新生成 initramfs
进入新根目录 chroot:chroot /mnt/newroot /bin/bash,然后编辑 /etc/fstab,把旧 UUID 替换为新分区的 UUID(用 blkid 查看)。接着运行 update-initramfs -u(Debian/Ubuntu)或 dracut --force(RHEL/CentOS/Rocky),确保 initramfs 能识别新 root 设备并正确挂载。
重装并配置引导加载程序
在 chroot 环境中执行 grub-install /dev/nvme0n2(目标磁盘,非分区),再运行 grub-mkconfig -o /boot/grub/grub.cfg。这一步必须完成,否则即使文件系统就绪,GRUB 仍会尝试从旧硬盘加载内核和 initrd,导致启动失败。若使用 UEFI,还需确认 /boot/efi 已正确挂载且 EFI 分区中有对应引导项。
验证与切换前最后检查
- 重启前用 lsblk -f 和 findmnt / 确认当前运行系统仍挂载旧根,新分区未被意外占用
- 在 GRUB 启动菜单按 e 编辑启动项,手动将 root=UUID=xxx 改为新 UUID,按 Ctrl+X 尝试单次启动验证
- 确认 /etc/crypttab(如有加密)、/etc/lvm/cache(如有 LVM)已适配新设备布局


















