使用U盤製作一個便攜的私人Linux系統

使用U盤製作一個便攜的私人Linux系統

前置條件

  • 垃圾U盤(懶得偵別是U盤、接口還是HUB問題,總之:)讀寫速度只有大概 40Mb/s,共64G。

  • 正常可用的一部電腦。 Windows可以用Rufus一步到位。Linux/Mc 詳見後面。

  • Debian13-Mate-Live 鏡像。或者其他鏡像,我用過一些其他的鏡像,我覺得Deb13很好。


展開工作

Windows可以用Rufus一步到位。Linux/Mac 詳見後面。


使用 Windows 的 Rufus 一步到位

Rufus 燒錄工具(文章選取202610月最新的(2026.06.30)4.15(p)便攜版)

燒錄鏡像(Windows)

在Windows下,打開 Rufus-4.15p 開始我們的工作。它會問你是否允許它聯網檢查更新,是與否都不影響。我選擇了「否」。

之後選擇如下圖(請選擇鏡像-選擇鏡像(不要亂選那個複選框),直接選鏡像就好):

1.00

我的U盤有64G,留20G給系統就好,所以我選擇40G的持久空間。apt 等安裝,Home 數據都會在(40G)持久分區內。

它問你是否允許它上網下支援文件,選擇「是」。

1.00

1.00

1.00

進入U盤

我省略了這一段。這並非技術傲慢,而是如果你連如何進入U盤引導都不清楚,我建議你先不要往下讀。你可以先去了解「PE維護系統安裝Windows」的教學。否則你的「Linux/搞機」之旅會相當折磨,甚至乎會對你的「愛好心」產生嚴重打擊。

啟動時,選擇:「Live Mode」

進入到U盤Linux後的工作

照理來說。Rufus 不需要做更多的事,燒錄完畢,重啟入U盤。在桌面創建一個文件,重啟看看是否還在。當然你也可以看 lsblk,或者安裝一個 apt install fastfetch 試試,重啟看看它是否可以正常喚出使用。

重啟看到還在,證明是沒問題的。

1.00

1.00

重置(創建)root的密碼

如果你有 ssh 的需求,請用下面命令創建一個 root 的密碼

sudo passwd root

Linux/Mac 系統

你可以通過 BalenaEtcher APP 燒錄鏡像入U盤,也可以用 DD命令 成為老一輩藝術家。
前者是傻瓜式操作,所以我們專注於後者。

燒錄鏡像(Linux/Mac)

Mac 好像沒有 lsblk 命令的,並且為了避免DD出現問題,Mac 用戶還是乖乖用 BalenaEtcher APP 吧。讓我們保持 kiss 原則。

DD 命令(Linux/Mac用BE App跳過)

我們輸入下面的命令,就可以看到類似的輸出

lsblk

# 輸出如下
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda           8:0    1  58.6G  0 disk
└─sda1        8:1    1  58.6G  0 part
nvme0n1     259:0    0 238.5G  0 disk
├─nvme0n1p1 259:1    0   300M  0 part
├─nvme0n1p2 259:2    0    16M  0 part
├─nvme0n1p3 259:3    0 188.5G  0 part
├─nvme0n1p4 259:4    0     2G  0 part /efi
└─nvme0n1p5 259:5    0  47.7G  0 part /

每個人的電腦,因為存儲介質的不同,上面的輸出都會不盡相同。我們要記住的是 NAME 這一項。而我只有一個 64G 的U盤設備,所以很好分辨。如果你恰巧有兩個同樣大小同樣介質(都是U盤)的設備,你可以通過 拔掉/插入 兩次的 lsblk 來找到誰是誰。

而我的設備,很明顯,是 sda 。記住,在Linux下,無論你是 sda、adb、sdd 還是什麼,在我們輸入命令時,都是通過 /dev/sd某個英文 來區分的,前面有一個 /dev 。它是 Device 的縮寫。是Linux約定的。Mac則是 Volumes。扯遠了。

注意:

  • /dev/sda 是整隻 U 盤。(我們要選這個)

  • /dev/sda1 是 U 盤的一個分區而已。

  • 燒錄 ISO 時,目標應該是整隻裝置 /dev/sda,而不是 /dev/sda1。

並且!你必須按自己電腦的實際輸出判斷,不能直接照抄 /dev/sda。以你自己 lsblk 輸出的內容為準。 下面內容有幾次修訂,最終Shell Return以中文譯文呈現。

1. 先取消掛載

可以看到我的 MOUNPOINTS 項是空的,證明設備是沒有掛載的,但是我帶你們走一趟流程:

sudo umount /dev/sda1

我的因為沒掛載,所以直接返回了

umount: /dev/sda1: 未挂载.

如果你的沒有返回,估計是成功 取消掛載 了 輸入 lsblk 看看設備的 MOUNTPOINTS 項是不是空了

2. 使用 DD 命令寫入鏡像到U盤

假設 Debian ISO 放在 ~/Downloads/debian-live.iso

之後執行下面命令來寫入鏡像。/dev/sdx 不要跟填我的:

sudo dd if=~/Downloads/debian-live.iso of=/dev/sda bs=4M status=progress conv=fsync

輸出

1287651328 字节 (1.3 GB, 1.2 GiB) 已复制,16 s,35.5 MB/s
下面是完成後
输入了 945+1 块记录
输出了 945+1 块记录
3964551168 字节 (4.0 GB, 3.7 GiB) 已复制,266.019 s,14.9 MB/s

擴展DD命令知識:

參數意義
if=輸入檔案,即 ISO
of=輸出目標,即整隻 U 盤
bs=4M每次讀寫 4 MiB
status=progress顯示進度
conv=fsync完成前將資料同步到裝置

寫入完成後再執行下面命令來同步一下操作(類似安全推出,但我們不推出):

sync

DD 完成後,建立持久分區

使用 fdisk 創建新分區

sudo fdisk /dev/sda

進入交互界面後,依次輸入以下字母(其實默認過一次就好了):

  • 輸入 n (新建分區)

  • 輸入 p (創建主分区,如有提示,直接確認)

  • 分區編號:會自動分配為下一個可用數字(例如 3),直接確認

  • 起始扇區:直接確認(使用默認的剩餘起始位置)

  • 結束扇區:直接確認(默認使用剩餘的所有空間)

  • 輸入 w (保存配置並退出 fdisk)

輸出大致如下:

欢迎使用 fdisk (util-linux 2.42.2)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

设备已包含一个 'iso9660' 签名,写入命令会将其移除。请参见 fdisk(8) 的手册页和 --wipe 选项以了解更多细节。

命令(输入 m 获取帮助):n
分区类型
   p   主分区 (2个主分区,0个扩展分区,2空闲)
   e   扩展分区 (逻辑分区容器)
选择 (默认 p):

将使用默认回应 p。
分区号 (3,4, 默认  3):
第一个扇区 (7743264-122879999, 默认 7743488):
最后一个扇区,+/-sectors 或 +size{K,M,G,T,P} (7743488-122879999, 默
认 122879999):

创建了一个新分区 3,类型为“Linux”,大小为 54.9 GiB。
分区 #3 包含一个 ext4 签名。

您想移除该签名吗?是[Y]/否[N]:Y

写入命令将移除该签名。

命令(输入 m 获取帮助):w
分区表已调整。
将调用 ioctl() 来重新读分区表。
正在同步磁盘。

[root@dinmi-pc ~]#

格式化新分區並命名

格式化並且掛上「persistence」的標籤。

sudo mkfs.ext4 -L persistence /dev/sda3

Ubuntu有所不同,好像是 casper-rw ,具體請查閱 Official Docs。

它應該會返回

mke2fs 1.47.4 (6-Mar-2025)
创建含有 14392064 个块(每块 4k)和 3604480 个 inode 的文件系统
文件系统 UUID:c9391316-1870-4387-add7-aafef2685275
超级块的备份存储于下列块:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000, 7962624, 11239424

正在分配组表:完成
正在写入 inode表:完成
创建日志(65536 个块):完成 (這裡需要一些時間,請等等)
写入超级块和文件系统账户统计信息:已完成

只有標籤還不行,Debian 要求你必須在該分區的根目錄下建立一個規則文件,告訴系統哪些目錄需要被持久化保存。

sudo mount /dev/sda3 /mnt
# 寫入全局保存規則(把整個根目錄下的修改都持久化)
echo "/ union" | sudo tee /mnt/persistence.conf
sudo umount /mnt

注意:基本上做完這一步,你已經無法正常引導到你DD完畢的U盤下的 Debian Boot 選單了。後面說

固定啟動參數 (GG)

sudo mkdir -p /tmp/usb_boot
sudo mount /dev/sdb1 /tmp/usb_boot

# 修改 GRUB 配置文件
# 使用 sed 命令在引導參數(boot=live 後面)追加 persistence 關鍵字
sudo sed -i 's/boot=live/boot=live persistence/g' /tmp/usb_boot/boot/grub/grub.cfg

但是,不出意外的話,應該會返回:

mount: /tmp/usb_boot: 警告:设备写保护,使用只读方式挂载.
sed: 无法打开临时文件 /tmp/usb_boot/boot/grub/sedm2rvAI: 只读文件系统

這是因為,dd 燒錄出來的 Debian 鏡像分區格式是 ISO9660(光盤文件系統)它唯讀 XD

DD.. 很神奇吧。但是到了這裡,恭喜你學會了使用 dd、fdisk 等命令。

而且,你DD的U盤,在完成 echo "/ union" 後,估計也進不去 Debian Boot Menu 了,而是會直接進入 GNU GRUB 的維護介面。剛剛改一些東西改壞了。

所以,剛剛不應該改那麼多,應該是 DD 完畢後。每次開機進 GRUB 時按 e 鍵來編輯 Debian Boot Grub Configuration,手動加一次 persistence

1.00


人生苦短,為什麼不用工具?

DD 的坑,粗心的坑,還有千千萬萬個莫名其妙的小問題。本文已經修訂了3次有餘。所以我,真诚建议直接上 Ventoy 或者用 Rufus(Windows下)/ Mkusb(Linux下)来做持久化,能省去无数排查 Bug 的时间。

1.00