巡星人
天文行动派

制作Ubuntu To Go的过程

1)下载ubuntu 22版本的iso镜像:

https://releases.ubuntu.com/jammy/里面:

https://releases.ubuntu.com/jammy/ubuntu-22.04.5-desktop-amd64.iso

2)下载rufus:

http://rufus.ie/en/#download

https://github.com/pbatard/rufus/releases/download/v4.12/rufus-4.12p.exe

制作ubuntu启动盘。

3)插入另外的U盘或者USB硬盘(128G以上),修改BIOS为ubuntu启动盘启动。

4)安装ubuntu系统,注意选择正确的目标盘,引导区要选择为目标盘。

- EFI分区:600M

- 交换区:内存x2,16G内存就选32G

- 其他为ext4。

时区选择上海,一路next安装。

5)关键:安装完成之后,拔掉Ubuntu启动盘重启,这时经常出现一个错误是屏幕上光标闪烁,无法重启。这是由于EFI没有正确写入目标盘的问题。可以强制关机,用ubuntu启动盘引导,选择try模式,运行如下命令:

1. 识别系统盘U盘的分区
sudo fdisk -l
找到你的系统盘U盘(通常是 /dev/sdb ,也有可能是/dev/sda,一定要确认好),确认:

◦ EFI分区:/dev/sdb1(大小约512MB,类型为EFI System)

◦ 根分区:/dev/sdb3(最大的分区,类型为Linux filesystem)

2. 挂载系统盘的分区
# 挂载根分区
sudo mount /dev/sdb3 /mnt
# 挂载EFI分区
sudo mount /dev/sdb1 /mnt/boot/efi
3. 绑定必要的系统目录(为chroot做准备)
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
4. 切换到系统盘的根目录(chroot)
sudo chroot /mnt
执行后,终端提示符会变为 root@ubuntu:/#,表示你已进入系统盘的Ubuntu环境。

5. 在chroot环境下修复引导
# 重新安装GRUB到系统盘U盘
grub-install --efi-directory=/boot/efi /dev/sdb
# 更新GRUB配置
update-grub
6. 退出chroot并重启
exit
sudo reboot
重启前,务必移除安装盘,仅保留系统盘U盘。
执行完这些步骤后,你的系统盘U盘就能独立引导了。

7.启动失败修复;

查看当前磁盘分区信息:

lsblk -f

记录每个分区的 UUID 和挂载点。

打开 /etc/fstab 文件进行编辑

nano /etc/fstab

将文件中记录的 UUID 与 lsblk -f 输出的实际 UUID 对比,删除或注释掉无效 / 不匹配的挂载行(在行首加 #),或者修改错误的UUID

保存退出:ctl+o 回车

需要安装的程序:

1)修改为阿里云镜像:

找到"软件和更新"(Software & Updates)
选择下载服务器
  • 在"Ubuntu软件"选项卡中,点击"下载自"旁边的下拉菜单
  • 选择"其他..." → 在列表中找到"China" → 选择"mirrors.aliyun.com"
  • 点击"选择服务器",输入密码确认
更新缓存:关闭窗口时会提示更新软件列表,点击"重新载入"完成

2)Tailscale:

sudo apt install curl

sudo apt-get install apt-transport-https

curl -fsSL https://pkgs.tailscale.com/stable/raspbian/bullseye.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg > /dev/null
curl -fsSL https://pkgs.tailscale.com/stable/raspbian/bullseye.tailscale-keyring.list | sudo tee /etc/apt/sources.list.d/tailscale.list

sudo apt-get update
sudo apt-get install tailscale

sudo tailscale up --authkey=XXX
sudo tailscale up --exit-node=XXX

3)安装下载加速软件:

sudo apt install axel

4)安装Chrome:

axel https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb

sudo dpkg -i google-chrome-stable_current_amd64.deb

5)tailscale设置exit-node模式,chrome下载switchy插件

6)安装npm, node, claude和vscode

# node清理并重新安装
sudo apt clean
sudo apt update

curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -

sudo apt-get install -y nodejs

# npm清理并重新安装

npm cache clean --force

尝试不同的国内镜像源

虽然淘宝镜像 (registry.npmmirror.com) 在国内访问很快,但从海外服务器访问可能路径不是最优。你可以尝试换成其他国内主流镜像源,特别是腾讯云自家的内网镜像,可能对海外节点有优化

腾讯云内网镜像:这应该是你的首选,同云厂商的内网地址通常速度最快

npm config set registry http://mirrors.cloud.tencent.com/npm/
华为云镜像:作为备选方案尝试
npm config set registry https://mirrors.huaweicloud.com/repository/npm/
官方源:有时候,从海外服务器直接连接官方源的速度反而比绕道国内镜像要快,值得一试
npm config set registry https://registry.npmjs.org/
每切换一个源后,都可以用 npm install -g openclaw@latest测试一下速度。

# 1. vscode下载最新版 .deb 包
wget -O code.deb "https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-x64"

# 2. 安装
sudo apt install ./code.deb

claude-code:

sudo npm install -g @anthropic-ai/claude-code

echo 'export ANTHROPIC_AUTH_TOKEN="sk-xxx"' >> ~/.bashrc
echo 'export ANTHROPIC_BASE_URL="https://hone.vvvv.ee"' >> ~/.bashrc
source ~/.bashrc

然后打开 ~/.bashrc文件进行修改。

然后 claude运行,ctrl+c退出。

nano .claude.json

增加:

"hasCompletedOnboarding": true

7)安装Nvidia驱动:

# 移除所有 NVIDIA 相关包

sudo apt purge nvidia* libnvidia*

sudo apt autoremove

sudo apt autoclean

2. 检查系统是否识别到 NVIDIA 显卡

bash
lspci | grep -i nvidia

如果能看到 RTX 3050,继续下一步。

01:00.0 3D controller: NVIDIA Corporation GA107M [GeForce RTX 3050 Mobile] (rev a1)

3. 安装推荐的 NVIDIA 驱动

方法一:使用 ubuntu-drivers(推荐)

# 检测推荐的驱动
ubuntu-drivers devices

# 自动安装推荐驱动
sudo ubuntu-drivers autoinstall

配置 PRIME(双显卡切换)

# 安装 NVIDIA Prime
sudo apt install nvidia-prime

# 查看当前使用的 GPU
prime-select query

# 切换到 NVIDIA 显卡
sudo prime-select nvidia

# 或切换到集成显卡省电
sudo prime-select intel  # 如果是 AMD+NVIDIA 可能是 on-demand

重启系统

sudo reboot

验证安装

# 查看 NVIDIA 驱动状态
nvidia-smi

# 查看当前使用的显卡
glxinfo | grep "OpenGL renderer"

安装cuda:

1. 检查 NVIDIA 驱动版本

nvidia-smi

查看右上角的 CUDA Version,这是驱动支持的最高 CUDA 版本。

2. 选择安装方法

使用 Ubuntu 仓库安装(推荐,简单)

#下载 CUDA 仓库配置包
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb

# 更新包列表
sudo apt update

# 安装 CUDA 12.6 Toolkit
sudo apt install cuda-toolkit-12-6

配置环境变量

# 编辑 bashrc
nano ~/.bashrc

添加以下内容到文件末尾:

# CUDA 环境变量
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda

配置生效:

source ~/.bashrc

验证安装

# 查看 CUDA 版本
nvcc --version

# 查看 GPU 信息
nvidia-smi

# 安装cuDNN 

sudo apt install libcudnn9-cuda-12 libcudnn9-dev-cuda-12

检查 cuDNN 库文件

# 方法1: 查找 cuDNN 库文件
ls -la /usr/lib/x86_64-linux-gnu/libcudnn*

# 方法2: 使用 ldconfig 查找
ldconfig -p | grep cudnn

# 方法3: 查找所有 cuDNN 相关文件
find /usr -name "libcudnn*" 2>/dev/null

WiFi连不上的解决办法:

1)修改了路由器的模式,把最新的ax模式去掉了:

问题找到了!MT7921 在 Ubuntu 22.04 的驱动对 WiFi 6 (AX) 模式的兼容性确实有问题,特别是在较旧的内核和固件版本上。关掉 AX 模式回退到 AC/N 就正常了。

2)Wifi 2.4G可以连接,但是5G连不上:

检查DNS设置,不要手动输入,自动获取即可,删除不必要的DNS的IP地址。


升级WiFi网卡固件:

升级Media Tek MT7961WiFI网卡固件:

# 下载最新固件

cd /tmp

git clone --depth 1 https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git

# 备份旧固件

sudo cp /lib/firmware/mediatek/WIFI_MT7961_patch_mcu_1_2_hdr.bin /lib/firmware/mediatek/WIFI_MT7961_patch_mcu_1_2_hdr.bin.bak

sudo cp /lib/firmware/mediatek/WIFI_RAM_CODE_MT7961_1.bin /lib/firmware/mediatek/WIFI_RAM_CODE_MT7961_1.bin.bak

# 覆盖安装

sudo cp /tmp/WIFI_MT7961_patch_mcu_1_2_hdr.bin /lib/firmware/mediatek/

sudo cp /tmp/WIFI_RAM_CODE_MT7961_1.bin /lib/firmware/mediatek/

# 确认文件大小对了

ls -la /lib/firmware/mediatek/WIFI_MT7961*

ls -la /lib/firmware/mediatek/WIFI_RAM_CODE_MT7961*

# 重启(重载驱动不一定够,固件更新建议重启)

sudo update-initramfs -u # 需要验证

sudo reboot

升级Intel AX210 WiFI蓝牙网卡固件:

要用Git Clone的目录的文件,/intel/iwlwifi目录下找到最新的

iwlwifi-ty-a0-gf-a0-86.ucode (ubuntu 22最高支持版本)和 iwlwifi-ty-a0-gf-a0.pnvm

find /lib/firmware -name "iwlwifi-ty-a0-gf-a0*" -ls #找到firmware

#更新firmware文件

sudo cp iwlwifi-ty-a0-gf-a0* /lib/firmware/

# 重启(重载驱动不一定够,固件更新建议重启)

sudo update-initramfs -u # 需要验证

sudo reboot

#查看加载的情况

dmesg | grep iwlwifi


制作备份盘的方法:

核心思路是:克隆 Ubuntu to Go 到另一个 U 盘,然后修复引导

建议的正确流程

准备阶段:用 Ubuntu 启动盘(Live USB)启动,同时插上 Ubuntu to Go 移动硬盘和目标 U 盘 2。

第一步:给 U 盘 2 分区

gdiskparted 对 U 盘 2 建立 GPT 分区表,创建三个分区:EFI(约 512MB,类型 EF00,格式化为 FAT32)、swap(按需,类型 8200)、系统分区(剩余空间,格式化为 ext4(这样才能保留文件的权限))。

第二步:复制数据

这一步很关键,不要用普通的 cp,建议用 rsync 保留权限和特殊属性:

# 假设 Ubuntu to Go 系统分区是 /dev/sda3,U盘2 系统分区是 /dev/sdb3

sudo mkdir /mnt/source
sudo mkdir /mnt/target

sudo mount /dev/sda3 /mnt/source
sudo mount /dev/sdb3 /mnt/target

sudo rsync -aAXvP --info=progress2 --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/lost+found"} /mnt/source/ /mnt/target/ 
#(加-P,兼顾进度 + 断点续传) sudo rsync -aAXH --whole-file --inplace --no-inc-recursive --info=progress2 \ --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/lost+found","/swapfile"} \ /mnt/source/ /mnt/target/ #

改动说明:

  • -H 保留硬链接
  • --whole-file 本地复制跳过增量算法,更快
  • --inplace 直接写入,减少磁盘操作
  • -vP 改成 --info=progress2 显示整体进度,避免刷屏
  • 排除里加上 /swapfile(如果有的话)
  • --no-inc-recursive,先扫描完再传输,进度显示更准确。

EFI 分区也需要复制:

sudo mkdir /mnt/source_efi
sudo mkdir /mnt/target_efi
sudo mount /dev/sda1 /mnt/source_efi
sudo mount /dev/sdb1 /mnt/target_efi
sudo rsync -av /mnt/source_efi/ /mnt/target_efi/

第三步:修改 fstab

先用 blkid 查看 U 盘 2各分区的新 UUID:

sudo lsblk -f /dev/sdc

然后编辑 U 盘 2 系统分区上的 fstab:

sudo nano /mnt/target/etc/fstab

把里面所有 UUID 替换成 U 盘 2 对应分区的 UUID。这一步遗漏的话系统会无法启动。

第四步:chroot 并修复引导

# 挂载目标系统
sudo mount /dev/sdb3 /mnt
sudo mount /dev/sdb1 /mnt/boot/efi

# 绑定系统目录
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo mount --bind /run /mnt/run     # EFI相关操作需要它

# chroot
sudo chroot /mnt

# 在 chroot 内
grub-install --efi-directory=/boot/efi /dev/sdb
update-grub

exit

先复制数据、改 fstab,最后再 chroot 修复引导。


U盘/硬盘分区过程:

1. 确认 U 盘设备名

插入 U 盘后,运行:

sudo lsblk -f  #输出UUID,方便编写fstab文件
#或者
sudo blkid

找到你的 U 盘(假设是 /dev/sdb,根据实际情况替换)。务必确认设备名,操作错误会丢失数据。

2. 启动 fdisk

sudo fdisk /dev/sdb
```

进入 fdisk 交互界面后,按以下步骤操作。

---

## 3. 创建 GPT 分区表

fdisk 提示符下输入:
```
g
```
这会创建一个新的 GPT 分区表(会清除 U 盘上所有数据)。
---

## 4. 创建第一个分区(EFI, 600M)
```
n           ← 新建分区
```
- Partition number: 直接回车(默认 1- First sector: 直接回车(默认)
- Last sector: 输入 `+600M`

然后修改分区类型:
```
t           ← 修改类型
```
- Partition number: 直接回车(默认 1- Partition type or alias: 输入 `1`(即 EFI System)

---

## 5. 创建第二个分区(swap, 32G)
```
n           ← 新建分区
```
- Partition number: 直接回车(默认 2- First sector: 直接回车(默认)
- Last sector: 输入 `+32G`

修改分区类型:
```
t           ← 修改类型
```
- Partition number: 输入 `2`
- Partition type or alias: 输入 `19`(即 Linux swap)

---

## 6. 创建第三个分区(ext4,剩余空间)
```
n           ← 新建分区
```
- Partition number: 直接回车(默认 3- First sector: 直接回车(默认)
- Last sector: 直接回车(默认,占用全部剩余空间)

类型默认就是 `Linux filesystem`,无需修改。

---

## 7. 确认并写入
```
p           ← 查看分区表,确认无误
w           ← 写入并退出

8. 格式化各分区

# EFI 分区格式化为 FAT32
sudo mkfs.vfat -F 32 /dev/sdb1

# swap 分区
sudo mkswap /dev/sdb2

# ext4 分区
sudo mkfs.ext4 /dev/sdb3

9. 验证结果

lsblk -f /dev/sdb
```

输出应类似:
```
sdb
├─sdb1  vfat        600M
├─sdb2  swap         32G
└─sdb3  ext4        剩余

sudo swapon /dev/sdb2  #启用 swap

调整ubuntu系统ext4分区大小

安装gparted工具: sudo apt install gparted exfat-fuse exfatprogs

运行: sudo gparted 选择对应的硬盘,调整分区,注意要从后向前拖动,保证分区的起始位置不变。

如果分区前面有一个钥匙图标🔑,这表示该分区当前已挂载。 GParted 无法调整已挂载分区的大小。

解决方法: sudo umount /dev/sdb3

解决开机速度慢的问题:

Gave up waiting for suspend/resume device /dev/sda3: Clean, 294094/13066240 files, 10103907/52235008 blocks 39.110651] Bluetooth: hcio: No dsm support to set reset delay 39.561180] NVRM: Loading NVIDIA UNIX x86_64 Kernel Module* 590.48.01 Mon Dec 8 11:22:45 UTC 2025

直接禁用 resume(不用休眠)

echo "RESUME=none" | sudo tee /etc/initramfs-tools/conf.d/resume

sudo update-initramfs -u

原因: 没有 resume 配置文件时,initramfs 会自动猜测 resume 设备,它猜错了,把 sda3 当成了 resume 设备。创建这个文件后就不会再猜了,重启后就好了。

未经允许不得转载:巡星人 » 制作Ubuntu To Go的过程

分享到:

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  页面加载59次查询,加载时间0.059秒