怎样迁移Ubuntu From Scratch
小樊
32
2025-12-22 11:15:35
Ubuntu 整盘迁移到新硬盘或新机器的实操指南
适用场景与前置准备
- 适用:将现有 Ubuntu 20.04/22.04/24.04 从旧硬盘迁移到新硬盘,或从一台电脑迁移到另一台电脑(硬件不同也可,Linux“万物皆文件”)。
- 准备:
- 一个 ≥16GB 的 U 盘制作启动盘(推荐 Ventoy 或 Rufus/UltraISO)。
- 目标硬盘可用空间需不小于原系统盘已用空间;尽量保持分区布局一致(如 /、/home、/boot、EFI、swap)。
- 备份重要数据;准备外置硬盘/移动硬盘用于中转大文件(如系统镜像或打包备份)。
- 一台可联网的电脑(用于安装引导修复工具)。
方法一 整盘克隆 dd(最快速、最省心)
- 步骤
- 用启动盘进入 Try Ubuntu 环境(不要安装)。
- 确认设备名:lsblk、sudo fdisk -l(如源盘 /dev/sdb,目标盘 /dev/nvme0n1)。
- 执行克隆(目标盘会“变”成源盘,原有数据将被覆盖):
sudo dd if=/dev/sdb of=/dev/nvme0n1 bs=64K conv=noerror,sync status=progress
提示:另开终端观察进度:watch -n 5 pkill -USR1 dd。
- 若目标盘更大,可在克隆后用 GParted 扩展分区;若更小,需先压缩原系统数据再克隆。
- 迁移后首次启动,建议仅接新盘,避免挂载旧盘导致 fstab 挂载错误。
- 若启动失败,进入 Live 环境修复引导(见下文“引导修复”)。
- 说明
- 适合“同构”迁移(同架构、同引导方式);跨平台(如 BIOS+MBR ↔ UEFI+GPT)需额外处理引导分区与模式。
- 克隆会复制分区 UUID,若新旧盘共存,需调整 /etc/fstab 的 UUID 或使用文件系统标签。
方法二 打包解压迁移 tar(更灵活、可改分区)
- 步骤
- 启动到 Try Ubuntu,挂载原系统的 /、/home、/boot(必要时也挂载 /boot/efi)。
- 打包(排除运行时目录,避免不一致与过大包):
- 根分区:
sudo tar -cvpzf ubuntu_root.tar.gz --exclude=/proc --exclude=/tmp --exclude=/home --exclude=/boot --exclude=/lost+found --exclude=/media --exclude=/mnt --exclude=/run --exclude=ubuntu_root.tar.gz ./
- 家目录:sudo tar -cvpzf ubuntu_home.tar.gz ./home
- 引导分区:sudo tar -cvpzf ubuntu_boot.tar.gz ./boot
- 在新硬盘用 GParted 建分区(示例):
- UEFI:ESP 512MB FAT32(flag: boot,esp),/boot 1GB ext4,/ 剩余空间 ext4,/home 余下 ext4,swap 视内存创建。
- Legacy:创建 1MB 未格式化分区(flag: bios_grub),其余同上。
- 将三份压缩包分别解压到新盘对应分区挂载点:
tar -xzvpf ubuntu_root.tar.gz -C /mnt/new_root
tar -xzvpf ubuntu_boot.tar.gz -C /mnt/new_boot
tar -xzvpf ubuntu_home.tar.gz -C /mnt/new_home
- 复制 EFI 分区内容(若迁移自 UEFI 机器):
sudo cp -a /mnt/old_efi/* /mnt/new_efi/
- 生成新分区的 UUID 映射:blkid,编辑新盘 /etc/fstab,将根、/boot、/home、swap 的 UUID 更新为新的。
- 修复引导(见下文)。
- 说明
- 可在迁移时调整分区大小与数量;适合“异构”迁移与跨平台。
- 打包时排除的目录会在新系统首次启动时自动重建。
引导修复与常见问题处理
- 一键修复(推荐)
- 仅接新盘 → 进入 Try Ubuntu → 联网 → 安装并运行 boot-repair:
sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt update && sudo apt install -y boot-repair
sudo boot-repair
- 选择 Recommended repair,按提示完成;若提示创建缺失分区(如 bios_grub/ESP),先分区再修复。
- 手工修复要点
- UEFI:确保 ESP 挂载到 /boot/efi,grub 安装到 ESP(–target=x86_64-efi --efi-directory=/boot/efi)。
- Legacy:grub 安装到 /dev/sdX(整盘,不要写分区),并确保存在 bios_grub 分区。
- 更新配置:update-grub;检查 /etc/fstab 挂载是否正确(必要时用 UUID 或 LABEL)。
- 常见报错与对策
- Gave up waiting for root device:检查 /etc/fstab 是否引用了不存在的旧盘;NVMe 机型在部分主板需将 SATA Operation 从 RAID 改为 AHCI。
- 进入 emergency mode:fsck 检查文件系统,或暂时注释 fstab 中不存在的挂载项后重启再恢复。
- 黑屏时间长:在 /etc/default/grub 设置合适的分辨率(如 GRUB_GFXPAYLOAD_LINUX=1920x1080),然后 update-grub。
迁移后的优化与验证
- 更新 initramfs:sudo update-initramfs -u -k all(内核或驱动变更后执行)。
- 重建 initramfs 帧缓冲(解决部分机型黑屏):
echo FRAMEBUFFER=y | sudo tee /etc/initramfs-tools/conf.d/splash
sudo update-grub
- 重建 UEFI NVRAM 条目(可选):sudo efibootmgr -c -d /dev/nvme0n1 -p 1 -L “Ubuntu” -l \EFI\ubuntu\shimx64.efi
- 验证:
- 检查分区与挂载:df -h、lsblk、cat /etc/fstab
- 检查引导:sudo efibootmgr(UEFI)、sudo update-grub
- 检查网络/显卡/外设驱动是否正常加载。
- 风险提示
- 操作会覆盖目标盘数据,务必先完整备份;不确定设备名时不要执行 dd。
- 若需保留双系统或多盘,请谨慎处理 /etc/fstab 与 GRUB,避免误挂载与启动项冲突。