Fedora Silverblue 如何新增硬碟到 Btrfs 陣列

我目前的主力電腦是一台 2020 年購入的 System76 的 Lemur Pro (lemp9),前陣子無線網路卡掛點,自己換了新的 Intel AX210 模組。

今天有感於最初設定的規格 500 GB 的 SSD 儲存空間有點不夠用了,想要加裝新的 SSD 來擴增容量。lemp9 內部有兩個 M.2 NVMe 的空間,所以我還有一個空位可以用。

原本內裝的是 Samsung 的 970 EVO Plus 500 GB,所以這次就添購了同樣是 Samsung 的 970 EVO Plus 2 TB,一次加好加滿。

我大約半年前把主力作業系統換成 Fedora 並且裝了 Fedora Silverblue 這個版本,是一種新型的 immutable 作業系統安裝方式,安裝基底系統後,額外的軟體都是用 Flatpak 或是 container 的形式疊加上去的。

有如其他 Fedora Workstation 系統,Silverblue 已經預設使用 Btrfs 為主要檔案系統。這次我要新增一個 SSD 並且加到硬碟陣列中。主要的一個問題是我有用 LUKS 形式的全硬碟加密,增加了新的 SSD 之後要改些設定讓他在開機的時候會自動解鎖。

1. 安裝新的 SSD

按照 System76 網站上的維修手冊就可以輕鬆安裝。

2. 格式化新的 SSD

使用 GNOME 內建的 Disks 工具軟體,幫新的 SSD 建立 GPT 分割表,然後產生一個分割區,不要建立檔案系統但是要加密。

3. 新增到 Btrfs 陣列

參考這篇詳細的說明,首先把解鎖後的裝置加入

sudo btrfs device add /dev/mapper/luks-d56dd585-059c-45b7-8eab-4e1df1e3d769 /mnt/btr_pool/

然後把 metadata 轉成 RAID1

sudo btrfs balance start -mconvert=raid1 /mnt/btr_pool/

接下來就可以確定新增完成:

sudo btrfs fi usage /
Overall:
    Device size:		   2.27TiB
    Device allocated:		 432.07GiB
    Device unallocated:		   1.85TiB
    Device missing:		     0.00B
    Device slack:		     0.00B
    Used:			 287.40GiB
    Free (estimated):		   1.99TiB	(min: 1.06TiB)
    Free (statfs, df):		   1.99TiB
    Data ratio:			      1.00
    Metadata ratio:		      2.00
    Global reserve:		 512.00MiB	(used: 0.00B)
    Multiple profiles:		        no

Data,single: Size:416.01GiB, Used:274.19GiB (65.91%)
   /dev/mapper/luks-4845f8f9-cfdf-4488-9611-68a7789869dd	 416.01GiB

Metadata,RAID1: Size:8.00GiB, Used:6.60GiB (82.56%)
   /dev/mapper/luks-4845f8f9-cfdf-4488-9611-68a7789869dd	   8.00GiB
   /dev/mapper/luks-d56dd585-059c-45b7-8eab-4e1df1e3d769	   8.00GiB

System,RAID1: Size:32.00MiB, Used:80.00KiB (0.24%)
   /dev/mapper/luks-4845f8f9-cfdf-4488-9611-68a7789869dd	  32.00MiB
   /dev/mapper/luks-d56dd585-059c-45b7-8eab-4e1df1e3d769	  32.00MiB

Unallocated:
   /dev/mapper/luks-4845f8f9-cfdf-4488-9611-68a7789869dd	  40.12GiB
   /dev/mapper/luks-d56dd585-059c-45b7-8eab-4e1df1e3d769	   1.81TiB

4. 修改開機參數

為了要在開機的時候自動解鎖兩個 SSD 一定要記得修改開機參數,不然開機後只有一個硬碟解鎖,會卡在開機掛載系統分割區。

在 Silverblue 可以用 rpm-ostree 指令管理開機參數:

rpm-ostree kargs --append=rd.luks.uuid=luks-d56dd585-059c-45b7-8eab-4e1df1e3d769

重新開機後就可以驗證宜一切都設定好了!