Ubuntu 分卷后迁移数据的实用方案
一、先明确目标与准备
- 明确迁移目标:是迁移整个系统(/、/home 等)还是仅迁移单个目录(如 /home、/var、/usr)。
- 做好备份:先备份关键数据与配置(如 /home、/etc、/var),避免误操作造成数据丢失。
- 识别设备与分区:用 lsblk、sudo blkid 确认设备名(如 /dev/sda1、/dev/sdb1)与文件系统类型(如 ext4、btrfs),记录UUID与挂载点。
- 准备环境:优先从 Ubuntu Live USB 启动执行迁移,避免运行中文件被占用;目标分区需提前创建并格式化为相同文件系统(或使用 LVM 新建 LV)。
二、方法一 文件级迁移 rsync(推荐,安全灵活)
- 适用:同版本系统迁移、只迁移部分目录、跨磁盘/跨文件系统。
- 步骤:
- 从 Live USB 启动,挂载源/目标分区:
sudo mkdir -p /mnt/old /mnt/new
sudo mount /dev/sda1 /mnt/old
sudo mount /dev/sdb1 /mnt/new
- 执行同步(排除虚拟文件系统与缓存):
sudo rsync -aAXv --info=progress2 --exclude={‘/dev/‘,’/proc/’,‘/sys/‘,’/run/’,‘/tmp/‘,’/home//.cache’} /mnt/old/ /mnt/new/
- 仅迁移 /home 的简例(已挂载好目标分区到 /mnt/newhome):
sudo rsync -aAXv /home/ /mnt/newhome/
- 同步完成卸载:sudo umount /mnt/old /mnt/new
- 如迁移到新盘并作为 /home 使用,获取新分区 UUID:sudo blkid /dev/sdb1,写入 /etc/fstab(在目标系统的 chroot 或 Live 环境中编辑):
UUID=新UUID /home ext4 defaults 0 2
然后执行 mount -a 验证并重启。
- 说明:-aAX 保留权限/ACL/扩展属性;目标为大磁盘时迁移后可按需扩容文件系统。
三、方法二 块级克隆 dd 或 Clonezilla(整盘/整分区镜像)
- 适用:需要逐位克隆整盘或整分区(如 HDD→SSD、同结构替换)。
- 步骤:
- 确认设备名(如 /dev/sda → /dev/sdb),避免写反;建议用 lsblk 复核。
- 执行 dd(推荐较大块与进度显示):
sudo dd if=/dev/sda of=/dev/sdb bs=64K conv=noerror,sync status=progress
- 目标盘更大时,用 GParted 扩展分区,再用文件系统工具扩容(ext4 用 resize2fs)。
- 克隆会复制 UUID,若新旧盘共存需避免冲突:
- 方案 A:为新盘生成新 UUID(ext4):sudo tune2fs /dev/sdbX -U random,然后更新目标系统 /etc/fstab 中的 UUID。
- 方案 B:在目标系统 chroot 中执行 update-grub 后重启测试。
- 图形化替代:用 Clonezilla 制作启动盘,选择 device-device 或 device-image 模式克隆,操作直观、适合新手。
- 说明:dd/Clonezilla 适合“原样复制”;若硬件差异较大或仅需迁移数据,优先 rsync。
四、方法三 使用 LVM 在线迁移与扩容(已用 LVM 的场景)
- 适用:系统已采用 LVM(PV/VG/LV),需要在线将数据迁至新磁盘或扩容。
- 步骤:
- 新盘分区并设为 LVM 类型(MBR 为 8e,GPT 为 8e00),创建 PV:sudo pvcreate /dev/sdb1。
- 将 PV 加入现有 VG:sudo vgextend vg0 /dev/sdb1。
- 在线迁移数据到新 PV:sudo pvmove /dev/sda2(示例源 PV)。
- 迁移后可移除旧 PV:sudo vgreduce vg0 /dev/sda2;随后按需扩展 LV 与文件系统(如 resize2fs)。
- 说明:LVM 支持跨磁盘聚合与在线迁移,适合服务器与需要弹性扩容的环境。
五、迁移后关键设置与验证
- 更新 /etc/fstab:用 blkid 获取新分区 UUID,替换 fstab 中旧 UUID;如使用卷标,也可改为 LABEL= 方式。
- 修复 GRUB 引导(更换硬盘或无法启动时):
- Live USB 挂载目标根分区与 EFI 分区(如有):
sudo mount /dev/sdb1 /mnt
sudo mount /dev/sdb2 /mnt/boot/efi
- 挂载虚拟文件系统并 chroot:
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo chroot /mnt
- 重装 GRUB 并更新:
grub-install /dev/sdb
update-grub
- 退出并重启:exit → sudo umount -R /mnt → reboot。
- 扩容文件系统(目标分区大于源分区时):
- ext4:sudo resize2fs /dev/sdb1
- 使用 GParted 图形化调整更直观。
- 验证:重启后检查挂载点(df -h)、用户文件(ls /home)、日志与关键服务状态,确认无误再清理旧盘数据。