温馨提示×

怎样迁移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(最快速、最省心)

  • 步骤
    1. 用启动盘进入 Try Ubuntu 环境(不要安装)。
    2. 确认设备名:lsblk、sudo fdisk -l(如源盘 /dev/sdb,目标盘 /dev/nvme0n1)。
    3. 执行克隆(目标盘会“变”成源盘,原有数据将被覆盖):
      sudo dd if=/dev/sdb of=/dev/nvme0n1 bs=64K conv=noerror,sync status=progress
      提示:另开终端观察进度:watch -n 5 pkill -USR1 dd。
    4. 若目标盘更大,可在克隆后用 GParted 扩展分区;若更小,需先压缩原系统数据再克隆。
    5. 迁移后首次启动,建议仅接新盘,避免挂载旧盘导致 fstab 挂载错误。
    6. 若启动失败,进入 Live 环境修复引导(见下文“引导修复”)。
  • 说明
    • 适合“同构”迁移(同架构、同引导方式);跨平台(如 BIOS+MBR ↔ UEFI+GPT)需额外处理引导分区与模式。
    • 克隆会复制分区 UUID,若新旧盘共存,需调整 /etc/fstab 的 UUID 或使用文件系统标签。

方法二 打包解压迁移 tar(更灵活、可改分区)

  • 步骤
    1. 启动到 Try Ubuntu,挂载原系统的 /、/home、/boot(必要时也挂载 /boot/efi)。
    2. 打包(排除运行时目录,避免不一致与过大包):
      • 根分区:
        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
    3. 在新硬盘用 GParted 建分区(示例):
      • UEFI:ESP 512MB FAT32(flag: boot,esp),/boot 1GB ext4/ 剩余空间 ext4,/home 余下 ext4,swap 视内存创建。
      • Legacy:创建 1MB 未格式化分区(flag: bios_grub),其余同上。
    4. 将三份压缩包分别解压到新盘对应分区挂载点:
      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
    5. 复制 EFI 分区内容(若迁移自 UEFI 机器):
      sudo cp -a /mnt/old_efi/* /mnt/new_efi/
    6. 生成新分区的 UUID 映射:blkid,编辑新盘 /etc/fstab,将根、/boot、/home、swap 的 UUID 更新为新的。
    7. 修复引导(见下文)。
  • 说明
    • 可在迁移时调整分区大小与数量;适合“异构”迁移与跨平台。
    • 打包时排除的目录会在新系统首次启动时自动重建。

引导修复与常见问题处理

  • 一键修复(推荐)
    • 仅接新盘 → 进入 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 OperationRAID 改为 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/fstabGRUB,避免误挂载与启动项冲突。

0