ordinarykuma的blog

Debian + btrfs安裝指南(Windows雙系統指南)

爲何我現在來分享Debian + btrfs?其實我是有打算使用btrfs這個檔案系統,但是Debian的配置太麻煩,因此我先選擇對於btffs支持比較好的Fedora來實作,直到我大致了解btrfs的實作方式、簡單原理,我才抱持資料丟失的風險遷移到Debian,說實在話我還是偏好apt系列的套件管理器以及Debian系列對於源(Source)的管理方式(我在之後講解媒體編解碼器或許會再分享)。在這篇文章最大的差別就在於掛載點的分配(關於掛載點分配,可以參考〈Fedora安裝教學 + 配置btrfs硬碟分割 + btrfs淺談〉),只要解決好fstab、子卷和掛載點,其他都和一般安裝Debian(可以參考〈Debian + KDE Plasma 安裝教程與我的KDE桌面美化〉)沒有甚麼不同。
這裡我就想要小小分享我對於Debian對btrfs支持度的問題,雖然Fedora和openSUSE在「安裝程式」上對於btrfs有較好的支援度,而Debian和Ubuntu則沒有,這在一開始我頗有微詞,但經過上手實際操作了一番,我發現Debian的這個劣勢反而是件優勢,因爲強大的shell(Busybox)使我更有彈性的分配掛載點和參數,這是Fedora圖形安裝器無法比擬的(這我在下文會說明一番)。

本文主要是安裝教學,其餘詳細的配置不是重點。推薦閱讀Fedora安裝教學 + 配置btrfs硬碟分割 + btrfs淺談〉。

  1. 用USB開機,我是用Ventoy。我推薦下載包含完整桌面環境的iso安裝檔,因爲要是使用網路安裝,安裝速度會取決於你的網路速度,並且要是網路連線不穩定則容易導致安裝失敗。請到:https://www.debian.org/CD/http-ftp/#stable下載。

  2. 前期作業:請參考〈Fedora安裝教學 + 配置btrfs硬碟分割 + btrfs淺談〉 的〈Fedora的安裝(以目前最新的Fedora Workstation 43爲例)〉一節的第2.步(圖5~7關於如何在Windows下進行硬碟分割)。

  3. 選取對應的安裝鏡像。這就不得不說Ventoy的優點,就是一個隨身碟可以塞入多個系統iso。我的隨身碟依序是debian網路安裝、debian離線安裝(不含Live CD,內有多個桌面環境)、Fedora 43、memtest(記憶體測試)、Ubuntu 25.10。因爲我不打算連網下載龐大的桌面環境套件,因此我選第二個(debian離線安裝(不含Live CD,內有多個桌面環境))。再來就是選normal模式進入即可,debian支援secure boot,因此可以不用關閉secure boot也可以正常開機。

  4. 我們這次需要使用「專家模式」安裝debian。使用上下方向鍵向下選擇,接下來的設定,就依序一個一個完成即可。

  5. 選擇語言地區之類的 註:而「配置其他的locales」這一步,什麼都不用選,直接「繼續」即可,除非有其他特殊需求。

  6. 「Access the installer using a Braille display」和「設定語音合成器的聲音」在我這裡是不起作用的,因此直接略過也是可以的,不影響安裝。我們設定一下鍵盤。

  7. 再來就是載入安裝媒體和安裝程式

  8. 設定網路。如果你是使用WiFi且有密碼,那就選擇「WPA/WPA2 PSK」加密,其他設定就保持預設(按Enter鍵跳過即可),如果你是用博通網卡,可能會遇到韌體問題,跳過即可。

  9. 分區設定(針對新安裝,並且跳過第10.步。如果是已經在舊有系統建立好btrfs子卷,且有打算沿用舊有子卷的,請直接跳至第10.步) 先執行「偵測磁碟」 再執行「磁碟分割」。依照Debian + KDE Plasma 安裝教程與我的KDE桌面美化的第22步,只要建立一個檔案系統為btrfs、掛載點為根目錄的分區即可。當然,可以留一小塊作為交換分區(虛擬記憶體)

  10. 分區設定(針對「已經在舊有系統建立好btrfs子卷,且有打算沿用舊有子卷的」。如果是新安裝,請直接跳至第9.步,並且跳過第10.步) 先執行「偵測磁碟」 再執行「磁碟分割」 選擇btrfs所在的那一個分區,設為根目錄。務必確認「格式化此分區」的選項是「否,保留現有資料」,否則之前舊有的子卷也會被格式化而消失

  11. 建立置換空間(swap),類似windows的pagefile,可作爲虛擬記憶體。如果記憶體偏小(一般來說是小於8GB),則推薦先在這裡建立swap分區,以免安裝過程因爲記憶體不足而報錯。(以下步驟是承第9.步,如果是已經有swap空間的,可以參考,下面會給出對應的解套方式)。如果你是使用zRAM、zSWAP或是使用swap檔案來做置換空間的,這部分可以自行參考ArchWiki《Btrfs》的4.1節,總之,務必記得「若未建立置換空間,進入系統務必手動建立一個置換空間」,以免系統不穩定。 空間一般建議是實體記憶體的2~3倍,或是像我一樣直接把剩下的空間都拿來做置換空間。以我這臺筆電來說,實體記憶體有4GB,因此就設8GB左右。 設定用途。如果你是已經有swap分區的,就把用途設爲「置換空間」即可

  12. 我們將變化寫入
    配置範例 若你是有子卷的,且沒有格式化btrfs分區,會有這一個提示,只要你保證你的根目錄子卷不叫做「@rootfs」即可。倘若,你不幸子卷叫做@rootfs,那麼你需要先刪掉這一個子卷或是改名,你可以參考接下來子卷改名的步驟,先將舊的根目錄子卷改名或刪掉。

  13. 進入shell。Debian提供的shell是Busybox 輸入「exit」就可以退出Busybox

  14. 配置掛載點(針對新建分區的,如果是沿用舊有分區的,跳過第14.步,直接跳到第15.步)。我會先在下面統一放上指令,以便做對照。

#查看當前磁碟的分區和掛載點。一般來說,debian會把前面配置的分區掛載在/target目錄下方  
df -h

#依序卸載「/boot/efi」和「/」分區  
umount /target/boot/efi  
umount /target  

#將分區掛載在「/mnt」目錄下,我的根目錄分區是在/dev/nvme0n1p6  
mount /dev/nvme0n1p6 /mnt*[![](Picture)](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtp2Koa_d3jNvDMIY__Xjmc7clkapUi95aR4x_h5-QD5M3PEmjsXBjUAwfOJn67IB0cQMiqpW467Jz70aaO802lO8CGlxqOx-Ui-t8q8HmLMz3UcuyDU3iDUic5KjC9RCdd3dbsEYnRSGRPnTFpfKQEIpgTodQuhXDAl4jpyGiEYp2UOiZaLZUTbCaT8I/s3806/IMG_20251231_164740.jpg)  
#進入mnt目錄  
cd mnt  

#列出子卷。有趣的是,子卷類似一個資料夾,因此可以用「ls」語法來查看。會發現Debian在變更完分區後會建立一個名爲「@rootfs」的子卷。  
ls

#更改根目錄子卷名稱,將@rootfs改爲@  
mv @rootfs @  

#建立給「/home」的子卷和給「/opt」的子卷。「btrfs」是針對btrfs這個檔案系統的語法,「su」是「subvolume」的縮寫,「cr」是「create」的縮寫。  
btrfs su cr @home  
btrfs su cr @opt  
#在target目錄下建立home資料夾和opt資料夾,以便子卷可以掛載上去、安裝程序可以正確的處理目錄(因爲安裝程式是識別路徑(例如資料夾),而不是子卷)。我們得要先掛載根目錄的子卷,再建立資料夾,因爲我們要把其他目錄(所對應的子卷)掛載在這個根目錄子卷下。
mount -o noatime,ssd,compress=zstd:3,subvol=@ /dev/nvme0n1p6 /target*  
mkdir -p /target/home  
mkdir -p  /target/opt  

#將檔案系統掛載回去對應的目錄。noatime就是寫入硬碟時不寫入讀取時間,減少讀寫次數;ssd是針對ssd硬碟優化的意思,可選可不選,因爲btrfs針對ssd已有不小的優化;compress=zstd是指壓縮率,數值愈大,寫入的檔案就會愈小(因爲有事先壓縮),建議值是3,預設是1,如果電腦性能不好的,可以設爲「compress=zstd」(這樣就預設值1),我是設爲3。
mount -o noatime,ssd,compress=zstd:3,subvol=@home /dev/nvme0n1p6 /target/home**mount -o noatime,ssd,compress=zstd:3,subvol=@opt /dev/nvme0n1p6 /target/opt*#來處理boot相關(mount的-t參數是用來指定分區的檔案系統類型)
mkdir -p /target/boot/efi  
mount -t vfat /dev/mvme0n1p1 /target/boot/efi  

#接着修改fstab  
nano /target/etc/fstab*

依照下圖所示修改fstab 這裡面比較值得一提的是dump和pass值,分別是「提醒這個分區是否要備份(0是不要,1是要)」和「假如電腦不正常關機的檢查順序(0是不檢查,1,2,...是檢查順序)」。使用快捷鍵「Ctrl + O」,接着輸入「Enter」保存,再使用快捷鍵「Ctrl + X」退出nano編輯器 輸入「exit」離開Busybox

  1. 配置掛載點(針對沿用舊有分區的,如果是新建分區的,跳過第15.步,直接跳到第14.步)。我會先在下面統一放上指令,以便做對照。
#查看當前磁碟的分區和掛載點。一般來說,debian會把前面配置的分區掛載在/atrget目錄下方  
df -h

#依序卸載「/boot/efi」和「/」分區  
umount /target/boot/efi  
umount /target  

#將分區掛載在「/mnt」目錄下,我的根目錄分區是在/dev/nvme0n1p6  
mount /dev/nvme0n1p6 /mnt**#進入mnt目錄  
cd mnt  

#列出子卷。有趣的是,子卷類似一個資料夾,因此可以用「ls」語法來查看。會發現Debian在變更完分區後會建立一個名爲「@rootfs」的子卷,以及你之前已經有的子卷  
ls
#更改根目錄子卷名稱,將@rootfs改爲@  
mv @rootfs @  

#在target目錄下建立home資料夾和opt資料夾,以便子卷可以掛載上去、安裝程序可以正確的處理目錄(因爲安裝程式是識別路徑(例如資料夾),而不是子卷)**我們得要先掛載根目錄的子卷,再建立資料夾,因爲我們要把其他目錄(所對應的子卷)掛載在這個根目錄子卷下。**mount -o noatime,ssd,compress=zstd:3,subvol=@rootfs /dev/nvme0n1p6 /target*  
mkdir -p /target/home  
mkdir -p  /target/opt*#來處理boot相關(mkdir的-t參數是用來指定分區的檔案系統類型) *mkdir -p /target/boot/efi  
mount -t vfat /dev/mvme0n1p1 /target/boot/efi*  
#將檔案系統掛載回去對應的目錄。noatime就是寫入硬碟時不寫入讀取時間,減少讀寫次數;ssd是針對ssd硬碟優化的意思,可選可不選,因爲btrfs針對ssd已有不小的優化;compress=zstd是指壓縮率,數值愈大,寫入的檔案就會愈小(因爲有事先壓縮),建議值是3,預設是1,如果電腦性能不好的,可以設爲「compress=zstd」(這樣就預設值1),我是設爲3。注意,「subvol=」後面的值就填入你對應的子卷名稱,並且自行掛載到對應的目錄*  
mount -o noatime,ssd,compress=zstd:3,subvol=home /dev/nvme0n1p6 /target/home**mount -o noatime,ssd,compress=zstd:3,subvol=opt /dev/nvme0n1p6 /target/opt  

#接着修改fstab  
nano /target/etc/fstab*

這裡面比較值得一提的是dump和pass值,分別是「提醒這個分區是否要備份(0是不要,1是要)」和「假如電腦不正常關機的檢查順序(0是不檢查,1,2,...是檢查順序)」。使用快捷鍵「Ctrl + O」,接着輸入「Enter」保存,再使用快捷鍵「Ctrl + X」退出nano編輯器 輸入「exit」離開Busybox

  1. 完成剩下安裝 如果你的子卷裡面已經有資料,則會出現這個提示,我們可以選「是」,然後強迫安裝,但一般建議是建立一個新的根目錄的子卷。 Kernel就保持預設的「Linux-image-amd64」。 initrd就選擇「一般:包含所有可用的驅動程式」。 「backport」建議勾上,這是因爲有些驅動支持新版的Linux核心,而這些驅動可能被開發者移植使其可以安裝在舊版的Linux核心,這類的軟體、驅動就是backport。 「流行軟體調查」可選可不選,相較於商業公司,我更加信賴開源社群、也願意貢獻一點個資,所以我選「是」 | 至於選擇桌面環境,因爲我這臺電腦是會給家人使用的,因此我選擇KDE Plasma,我自己用是選擇GNOME。 | 17.安裝開機引導程式,推薦選擇grub,因爲最成熟、穩定,且和debian結合度較好。如果選擇systemd-boot,則需要在debian升級Linux核心後手動更新systemd-boot,否則無法加載新版的Linux核心 這一步是指要不要讓uefi以爲這個操作系統(debian)是安裝在隨身碟上的,因爲有些uefi會避免除了windows以外的系統安裝在硬碟並且被開機(微軟的陰謀)或是可能有些uefi會有不可預期的bug。建議先選「否」,grub安裝失敗再選「是」。如果提示失敗也可以考慮強制寫入uefi,使uefi可以認得debian這個操作系統,但有風險,我也不敢試,在此不展示。 這是問說要不要讓電腦的開機預設選項的第一項改爲debian,是或否看個人,我選否,因爲我還要確認windows是否安好,打算之後再改。 因爲我要裝雙系統,因此我打算利用debian的grub來偵測windows,這樣子我在開機進入grub選單就可以選擇操作系統,而不用修改uefi的開機選項

18.UTC時間。如果你是windows雙系統,我推薦選「否」,否則選「是」。主要是因爲windows的時間是和uefi上的時間同步,而Linux偏好uefi的時間是格林威治時間然後系統再根據時區做加減。如果選「是」且是和windows做雙系統,那會導致windows的時間是格林威治時間,而Linux的時間是正確的時間。

  1. 第一步,進入終端,在對應目錄打開nano編輯器,輸入密碼
sudo nano /etc/apt/source.list.d/debian.sources*
  1. 第二步,貼上以下內容。
#如果你是用Debian 13(或是Debian Trixie)的,貼上下列10行文字內容,上半段是一般更新以及軟體倉庫,下半段是安全性更新。  
Types: deb deb-src  
URIs: http://deb.debian.org/debian/  
Suites: trixie trixie-updates  
Components: main non-free-firmware contrib non-free**Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg*  
Types: deb deb-src  
URIs: http://security.debian.org/debian-security  
Suites: trixie-security  
Components: main non-free-firmware contrib non-free**Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg*
#如果你是用Debian Testing的,貼上下列5行內容  
Types: deb deb-src  
URIs: http://ftp.tw.debian.org/debian/  
Suites: testing testing-updates  
Components: main non-free-firmware non-free contrib  
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg*

其實我覺得最麻煩的是掛載點分配,祈禱各位讀者可以成功地安裝好debian + btrfs。這裡我要分享Ubuntu對於btrfs的安裝處理,是不建立根目錄的子卷直接一個目錄一個子卷,這很神奇就是了。

參考資料:

#Debian #Linux