Btrfs RAID10 + 攢垃圾組 NAS

看相要讀 8 分鐘 2022-08-30 發出嗰

原來我還有個博客

因為太窮所以撿垃圾組 NAS,過程比較曲折,權當聽個樂。

前言

年初,隨著老電腦(當半個 NAS 用的)的硬碟容量逐漸吃緊(500G SSD + 1T HDD),我逐漸萌生出想要買 NAS 的想法。於是打開了 Amazon,望著一堆天價成品 NAS 不知所措(草,您們成品 NAS 怎麼都幾百刀起步還不帶盤的)。

於是經好友建議,上 eBay 找找垃圾辦公用 PC,於是挑了個便宜的 DELL OptiPlex 7010 MT(US$69.99 + 運費 $19.79)購入,再在 Amazon 上買了個海門 IronWolf 4TB 盤作為存儲。

過了幾天,機器到了,當我滿懷欣喜地上電,開機的時候,壞事來了——這電腦集成顯卡似乎無法輸出,我根本無法操作,令人頭大。本來想退貨了,但是懶得跑郵局,於是另想辦法。

又經好友建議,買了個垃圾獨立顯卡 Radeon HD 5450。於是又等了幾天,插上顯示卡後接出 HDMI,終於看到了大大的 DELL 標誌。於是進 BIOS 開始改設置……然後就是喜聞樂見的手賤環節,我作死開了 Secure Boot……(別問我為啥,我也不知道,我這手怎麼就這麼賤呢)。結果就是現在顯卡接著也沒法顯示了。

過了幾個月(因為有點懶得搞了.webp),我從朋友那借了個 N 卡,用朋友機箱供電(因為 7010 這塊主機板沒有額外的供電),終於輸出了視訊。之後迅速把 Secure Boot 關閉,可以正式開始配置 NAS 了。

開始配置!

計劃如下:使用 Fedora Server 作系統,安裝至 PC 自帶的 500G HDD 上,隨後在 4T HDD 上建立 Btrfs 分區並劃分 databackup 子卷,安裝並為兩個子卷啟用 snapper 的定時 snapshot 功能用於防止手賤(別問為什麼不用 ZFS,問就是不熟 FBSD 和 ZFS,所以用靈車 Btrfs,再就是用 Btrfs 的話我主力機器上可以比較方便備份(btrfs send | btrfs receive))。

開始安裝。選用 Fedora Server 是因為比較喜歡 Fedora(?),相信應該還算穩。硬碟方面此時沒有做 RAID 冗餘,只能每天供奉 Btrfs 之神希望不要爆炸。

一路安裝好系統,接下來便是配置分割區和各種軟體。data 子卷我選擇掛載到 /data,並給資料夾設置 share 的組權限以便普通使用者和 Samba 訪問。backup 掛載到 /backup,無特殊操作。配置好 fstab,便開始配置 Samba,參考文檔為 Samba 建立了權限劃分,一切正常=w=。

看著 4T 能怎麼用呢,於是用 systemd timer 整了個五分鐘同步一次的本地 AOSC OS 鏡像源(雖然我也不知道為啥要搞,但是反正空間放在那邊不用白不用)。

腳本如下(從劉姥姥那邊抄的):

#!/bin/sh

rsync -avSHPAX --delete --exclude=aosc-repacks --exclude=aosc-os-abbs-snapshots --exclude=aosc-l10n --exclude=aosc-os --exclude=archives rsync://repo.aosc.io/anthon/ /path/to/destination

然後設置好 systemd 服務和計時,啟用 timer 即可。

還有自己的 Torrents,從老電腦 qBittorrent 上遷移過來,感覺比較麻煩,最後是先把所有數據遷移後在 qBittorrent 裡重新載入所有 .torrent 檔案讓它掃描(比較笨,我也不知道怎麼搞,嘗試替換 qBittorrent 數據內的路徑但似乎不工作)。

幾天後老電腦上的 MPD 音樂資料夾莫名被清空,嚇到我趕忙從各處拉備份到 NAS 上,於是 MPD 現在也跑在 NAS 上了。一開始是用的 NFS 作為音樂資料夾的數據共用(並且作大死映射到公網上),後來被嚇到,改成走 WireGuard 回家後訪問區域網域內的 NAS,改用 miniserve 直接 HTTP serve 整個音樂資料夾(懶.webp)。

RAID10

在某朋友家玩耍的時候看到他機櫃上四塊盤,好奇問了一下,是從他 NAS 上換下來的盤,於是免費撿了三塊(有一塊已經炸了)。這幾塊 HDD 也正好都是同款海門 IronWolf 4TB 的盤。

所以,誒這不是能組 RAID 了嘛。

Btrfs 印象中可以直接組 RAID,但是 RAID5/6 聽說不太穩,於是翻查資料後決定組 RAID10。組之前問了問 farseerfc 老師,受推薦決定資料 RAID10,元資料 RAID1C4。

流程參考 https://btrfs.wiki.kernel.org/index.php/Using_Btrfs_with_Multiple_Devices。我這邊是將非 RAID 的檔案系統轉換為 RAID 的操作。

在四塊盤都接入後,先為三塊撿來的盤重新建立 GPT 分割表,然後建立分割區(無需格式化至 Btrfs)。隨後將陣列第一塊磁碟的分割區(此處為 /dev/sdb1)掛載到任意處(如 /mnt)。

# mount /dev/sdb1 /mnt

之後使用 btrfs device add 將剩下的磁碟分割區(設備)加入已有的檔案系統。

# btrfs device add /dev/sdc1 /dev/sdd1 /dev/sde1 /mnt

然後執行 btrfs balance 的指令將檔案系統轉換為 RAID 陣列。此處為資料使用 RAID10 的平衡濾鏡(balance filter),為元資料使用 RAID1C4 的平衡濾鏡。

# btrfs balance start -dconvert=raid10 -mconvert=raid1c4 /mnt

可以在指令中添加 --bg 參數以在背景執行。使用 btrfs balance status /mnt 以查看平衡進度。這會耗費很長時間,如果關機,下次開機時會自動繼續平衡操作,不用擔心數據損毀。

總之現在我的 NAS 有更高可靠性了(如果 Btrfs 不靈車漂移的話)。

Label: none  uuid: (redacted)
        Total devices 4 FS bytes used 1.72TiB
        devid    1 size 3.64TiB used 905.03GiB path /dev/sdb1
        devid    2 size 3.64TiB used 905.03GiB path /dev/sdc1
        devid    3 size 3.64TiB used 905.03GiB path /dev/sdd1
        devid    4 size 3.64TiB used 905.03GiB path /dev/sde1