我的系统的基本情况说明:
我原来的系统的具体型号如下:
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
挂载在了另外一块盘里
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:准备工作
-
备份数据
操作前请备份重要数据,避免意外丢失。 -
准备外置硬盘
- 我使用的是
SSK
的10Gbps硬盘盒
和致钛
的1TB Ti600 Gen4 7000MB/s
的固态硬盘 - 硬盘盒的速度换算一下是1250MB/s,其实是达不到硬盘的上限的
- 但是我的拯救者笔记本具有的接口是USB3.1的A口(5Gbps)和USB3.2的C口(10Gbps),所以我之前觉得短板可能也不在硬盘盒这里就没有买新的
- 确保外置硬盘已插入电脑并识别(如
/dev/sdX
,请替换为自己的设备路径)。
- 我使用的是
-
安装必要工具
sudo apt update && sudo apt install rsync grub2-efi parted
这里这个
grub2-efi
我显示unable to locate,不过没事,不影响接下来的操作
步骤 2:分区与格式化外置硬盘
-
使用
parted
分区sudo parted /dev/sdX
- 输入
mklabel gpt
创建 GPT 分区表。 - 创建 EFI 分区:
mkpart ESP fat32 1MiB 512MiB set 1 esp on
- 创建根分区:
mkpart primary ext4 512MiB 100%
- 退出:
quit
- 这里要注意没有
swap
分区,这个在我下一次优化的时候会补充,但是暂时是不影响使用的。
- 输入
-
格式化分区
sudo mkfs.fat -F32 /dev/sdX1 # 格式化 EFI 分区 sudo mkfs.ext4 /dev/sdX2 # 格式化根分区
步骤 3:复制系统文件
-
挂载分区
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 分区
-
使用
rsync
克隆系统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)
-
Chroot 到外置硬盘系统
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
-
更新文件系统 UUID
- 查看外置硬盘根分区的 UUID:
blkid /dev/sdX2
- 编辑
/etc/fstab
:
替换原有根分区和 EFI 分区的 UUID 为外置硬盘的实际 UUID。nano /etc/fstab
- 查看外置硬盘根分区的 UUID:
-
安装 GRUB 到外置硬盘
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu --recheck update-grub
-
退出 Chroot
exit sudo umount /mnt/usb/{dev,proc,sys,boot/efi} sudo umount /mnt/usb
步骤 6:测试启动
- 在其他电脑上启动
- 插入外置硬盘,开机时按
F12
/Esc
/Del
等键选择从外置硬盘启动。 - 如果启动失败,检查 GRUB 安装步骤和
fstab
UUID 是否正确。 - Tips: 一般启动的选项里有两个,一个是进BIOS(
F2
),一个是弱化版的启动项选择(F12
),一般来说用第二个就可以,对于拯救者电脑,第二个的界面是这样的,这里选择SSK固态硬盘启动
- 插入外置硬盘,开机时按
我这里的最终效果,在新的U盘启动的机器上,暂时验证效果如下:
- 所有的gnome插件启动正常
- 显卡驱动&cuda启动正常
- App cache正常
- 一些速度的测试要见我的下一篇文章进行具体的测试~
常见问题解决
- 无法挂载根分区:检查外置硬盘分区是否损坏,重新格式化。
- 黑屏/卡在启动界面:尝试在 GRUB 启动时按
e
编辑启动参数,添加nomodeset
。 - 无法识别外置硬盘:确保 BIOS/UEFI 中已启用从 USB 启动。
希望可以帮到大家~