打包当前Ubuntu镜像 制作Ubuntu togo系统

我的系统的基本情况说明:

我原来的系统的具体型号如下:

bash 复制代码
uname -r
复制代码
Linux Engine 5.15.0-134-generic #145~20.04.1-Ubuntu SMP 
Mon Feb 17 13:27:16 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux

我原来的硬盘以及分区策略如下:

可以看到我的分区策略大致就是有两张固态,然后EFI/home单独挂载在了一块盘里,/swap挂载在了另外一块盘里

bash 复制代码
df -h
复制代码
Filesystem      Size  Used Avail Use% Mounted on
udev             31G     0   31G   0% /dev
tmpfs           6.2G  2.9M  6.2G   1% /run
/dev/nvme1n1p3  1.8T  922G  812G  54% /
tmpfs            31G  119M   31G   1% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs            31G     0   31G   0% /sys/fs/cgroup
/dev/loop0      128K  128K     0 100% /snap/bare/5
/dev/loop2      347M  347M     0 100% /snap/gnome-3-38-2004/119
···
/dev/nvme0n1p2  1.9T  642G  1.2T  37% /home
/dev/nvme0n1p1   96M  6.1M   90M   7% /boot/efi
tmpfs           6.2G  176K  6.2G   1% /run/user/1000

我现在希望的是可以把系统中的所有内容(除了数据集这种占用资源特别多的)都备份到一个单独的外接硬盘盒中,制作一个Ubuntu To Go的系统,在任何的电脑上都可以通过更改启动方式的方法启动我的系统。

以下是制作 Ubuntu To Go 系统的分步指南:


步骤 1:准备工作

  1. 备份数据

    操作前请备份重要数据,避免意外丢失。

  2. 准备外置硬盘

    • 我使用的是SSK10Gbps硬盘盒致钛1TB Ti600 Gen4 7000MB/s的固态硬盘
    • 硬盘盒的速度换算一下是1250MB/s,其实是达不到硬盘的上限的
    • 但是我的拯救者笔记本具有的接口是USB3.1的A口(5Gbps)和USB3.2的C口(10Gbps),所以我之前觉得短板可能也不在硬盘盒这里就没有买新的
    • 确保外置硬盘已插入电脑并识别(如 /dev/sdX,请替换为自己的设备路径)。
  3. 安装必要工具

    bash 复制代码
    sudo apt update && sudo apt install rsync grub2-efi parted

    这里这个grub2-efi我显示unable to locate,不过没事,不影响接下来的操作


步骤 2:分区与格式化外置硬盘

  1. 使用 parted 分区

    bash 复制代码
    sudo parted /dev/sdX
    • 输入 mklabel gpt 创建 GPT 分区表。

    • 创建 EFI 分区:

      plaintext 复制代码
      mkpart ESP fat32 1MiB 512MiB
      set 1 esp on
    • 创建根分区:

      bash 复制代码
      mkpart primary ext4 512MiB 100%
    • 退出:quit

    • 这里要注意没有swap分区,这个在我下一次优化的时候会补充,但是暂时是不影响使用的。

  2. 格式化分区

    bash 复制代码
    sudo mkfs.fat -F32 /dev/sdX1  # 格式化 EFI 分区
    sudo mkfs.ext4 /dev/sdX2      # 格式化根分区

步骤 3:复制系统文件

  1. 挂载分区

    bash 复制代码
    sudo mkdir /mnt/usb
    sudo mount /dev/sdX2 /mnt/usb        # 挂载根分区
    sudo mkdir -p /mnt/usb/boot/efi
    sudo mount /dev/sdX1 /mnt/usb/boot/efi  # 挂载 EFI 分区
  2. 使用 rsync 克隆系统

    bash 复制代码
    sudo rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found"} / /mnt/usb/

这里因为我的数据量比较大,所以clone同步的时间也很长,我clone了800G+的数据过去估计花了5-6个小时,这里我们可以同时看一下复制的进度watch -n 1 df -h,我们可以看到挂载的/dev/sdX1中使用的内容资源在逐渐增多,等到大致和挂载点\下的体积大体上相同就可以了。


步骤 4:配置启动引导(GRUB)

  1. Chroot 到外置硬盘系统

    bash 复制代码
    sudo mount --bind /dev /mnt/usb/dev
    sudo mount --bind /proc /mnt/usb/proc
    sudo mount --bind /sys /mnt/usb/sys
    sudo chroot /mnt/usb
  2. 更新文件系统 UUID

    • 查看外置硬盘根分区的 UUID:

      bash 复制代码
      blkid /dev/sdX2
    • 编辑 /etc/fstab

      bash 复制代码
      nano /etc/fstab

      替换原有根分区和 EFI 分区的 UUID 为外置硬盘的实际 UUID。

  3. 安装 GRUB 到外置硬盘

    bash 复制代码
    grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu --recheck
    update-grub
  4. 退出 Chroot

    bash 复制代码
    exit
    sudo umount /mnt/usb/{dev,proc,sys,boot/efi}
    sudo umount /mnt/usb

步骤 6:测试启动

  1. 在其他电脑上启动
    • 插入外置硬盘,开机时按 F12/Esc/Del 等键选择从外置硬盘启动。
    • 如果启动失败,检查 GRUB 安装步骤和 fstab UUID 是否正确。
    • Tips: 一般启动的选项里有两个,一个是进BIOS(F2),一个是弱化版的启动项选择(F12),一般来说用第二个就可以,对于拯救者电脑,第二个的界面是这样的,这里选择SSK固态硬盘启动

我这里的最终效果,在新的U盘启动的机器上,暂时验证效果如下:

  • 所有的gnome插件启动正常
  • 显卡驱动&cuda启动正常
  • App cache正常
  • 一些速度的测试要见我的下一篇文章进行具体的测试~

常见问题解决

  • 无法挂载根分区:检查外置硬盘分区是否损坏,重新格式化。
  • 黑屏/卡在启动界面 :尝试在 GRUB 启动时按 e 编辑启动参数,添加 nomodeset
  • 无法识别外置硬盘:确保 BIOS/UEFI 中已启用从 USB 启动。

希望可以帮到大家~

相关推荐
蜡笔小新星5 分钟前
DevOps实践:持续集成与持续部署完全指南
运维·开发语言·经验分享·ci/cd·devops
Hurry610 分钟前
编写Dockerfile制作tomcat镜像,生成镜像名为tomcat:v1,并推送到私有仓库。
运维·服务器
随风九天15 分钟前
使用 Nginx 进行前端灰度发布的策略与实践
运维·前端·nginx·前端灰度发布
wanhengidc15 分钟前
算力服务器主要是指什么?
运维·服务器
安全系统学习43 分钟前
网络安全就业形势
运维·计算机网络·安全·web安全·网络安全
hxdcxy1 小时前
搭建harbor仓库
linux·运维·服务器
时光旅人01号1 小时前
Ubuntu 常用指令手册
linux·运维·服务器·深度学习·神经网络·ubuntu
全栈若城1 小时前
77.HarmonyOS NEXT ImageViewerView 组件深度剖析: Swiper容器与懒加载深度解析
ubuntu·华为·harmonyos·harmonyos next
InnovatorX1 小时前
Linux 下 MySQL 8 搭建教程
linux·mysql·adb
程序猿本员2 小时前
Linux进程间通信(1)-管道、内存映射
linux·后端