軟體

別讓SMR硬碟拖垮你的NAS!檔案系統終極設定指南

剛入手大容量硬碟,NAS 卻慢如牛?你可能踩到 SMR 硬碟的地雷了。本篇將帶你深入了解 SMR 的效能陷阱,並提供 ZFS 與 Btrfs 的設定教學,拯救你的儲存體驗。

一個現代化的家庭辦公室,桌上放著電腦螢幕與鍵盤,旁邊可能就藏著一台NAS。
在這個數位時代,一個順暢的個人雲端儲存空間,是提升生活品質的關鍵。Source: Lộc Nguyễn / unsplash

嘿,各位熱愛數位生活的朋友們,大家好。

你是否也曾有過這樣的經驗?看準了特價,興高采烈地買了幾顆大容量硬碟,準備為家裡的 NAS 升級,想像著從此擁有海量的儲存空間。結果裝上去之後,卻發現整個系統慢得像烏龜在爬。抄寫檔案時好時壞,有時甚至會卡住不動,整個 NAS 的反應都變得遲鈍。那種從天堂掉到地獄的感覺,真的會讓人很崩潰。

老實說,這段心路歷程我完全走過。一開始我也百思不得其解,直到我深入研究,才發現自己踩到了一個隱藏的大地雷——SMR 硬碟。這不是你的錯,也不是 NAS 廠商的問題,而是硬碟技術本身的一個「特性」,在特定的使用情境下,會成為效能的致命傷。今天,我想以一個過來人的身份,跟大家聊聊 SMR 硬碟,以及如果你真的「不幸」買到了,該如何透過調整檔案系統來做最大程度的補救。

SMR 的「原罪」:為什麼它在 NAS 上水土不服?

首先,我們得搞懂 SMR 到底是什麼。SMR 的全名是「疊瓦式磁記錄」(Shingled Magnetic Recording)。你可以把它想像成屋頂上的瓦片,為了在有限的空間裡塞進更多瓦片,後一片會部分覆蓋前一片。SMR 硬碟也是用類似的原理,將資料磁軌部分重疊,來達到更高的儲存密度。這也解釋了為什麼 SMR 硬碟通常更大、更便宜。

聽起來很美好,對吧?但問題就出在這個「覆蓋」的動作上。傳統的 CMR(Conventional Magnetic Recording)硬碟,磁軌之間是獨立的,像是一排排獨立的書架,你要改哪本書,直接抽換就好。但在 SMR 硬碟上,因為磁軌重疊了,當你要修改其中一塊「瓦片」上的資料時,你不能只動那一片,你必須把那一片以及被它覆蓋的周遭瓦片全部「掀起來」,換上新的,再把其他的鋪回去。這個過程,我們稱之為「寫入放大」(Write Amplification)。

在一般的電腦使用上,這種延遲可能不明顯。但在 NAS 環境中,這簡直是災難。NAS 系統需要 24/7 全天候運作,背景會不斷有小檔案讀寫,例如系統日誌、檔案索引、多用戶同時存取等。更致命的是在 RAID 陣列中,當你更換故障硬碟進行「重建」(Rebuild)時,SMR 的弱點會被徹底暴露。重建過程需要大量且密集的隨機寫入,一個 4TB 的 CMR 硬碟可能十幾個小時就完成了,但換成 SMR 硬碟,可能要花上超過一個星期。在這漫長的重建過程中,你的資料都處於高風險的降級狀態,只要再壞一顆硬碟,就全毀了。

一顆拆開外殼的硬碟,可以看見內部的碟盤與讀寫頭等精密結構。
硬碟的內部世界就像一個精密儀器,SMR 與 CMR 技術的根本差異,決定了它在不同情境下的效能表現。Source: Glen Carrie / unsplash

檔案系統的抉擇:ZFS、Btrfs 還是傳統 ext4?

既然硬體有其天限,我們就得從軟體,也就是「檔案系統」層面來想辦法。不同的檔案系統,管理資料的方式不同,對 SMR 硬碟的友善程度也天差地遠。

ZFS:極致穩定,但對 SMR 極不友善

ZFS 是許多進階玩家心中的神級檔案系統,以其強大的資料完整性保護和穩定性著稱。但很遺憾,ZFS 和 SMR 硬碟是天生的敵人。ZFS 對於硬碟的反應時間有非常嚴格的要求,當 SMR 硬碟因為內部資料整理而暫時「卡住」無回應時,ZFS 很可能會直接判定它「故障」,然後無情地將它踢出儲存池(Pool)。這在 RAIDZ 環境下會引發一連串的麻煩,甚至可能導致整個儲存池崩潰。所以,我的建議是:無論如何,都不要在 ZFS 環境中使用 SMR 硬碟。

ext4:中規中矩,但無法發揮 SMR 優勢

ext4 是 Linux 系統中最常見的檔案系統,穩定且可靠。然而,它的設計是基於傳統的「就地覆寫」模式,這正好與 SMR 的運作機制背道而馳。當 ext4 嘗試在原地修改資料時,會觸發 SMR 硬碟大量的內部資料搬移,導致效能低落。這也是為什麼很多人在 Synology 或 QNAP 的預設 ext4 格式上使用 SMR 硬碟會感覺特別卡頓的原因。

Btrfs:最有潛力的「救星」

相較之下,Btrfs(B-tree File System)可能是 SMR 硬碟最好的夥伴。Btrfs 的核心機制是「寫入時複製」(Copy-on-Write, CoW)。簡單來說,當你修改檔案時,它不會在原地覆寫,而是把修改後的新資料寫到一塊新的空白區域,然後再更新檔案系統的指標。這種「永遠寫入新位置」的特性,恰好順應了 SMR 硬碟喜歡循序寫入的脾氣,大幅減少了觸發「寫入放大」的機率。這讓 Btrfs 在 SMR 硬碟上的表現,通常會比 ext4 來得順暢。

終極求生指南:如何設定 Btrfs 來「駕馭」SMR 硬碟

如果你已經買了 SMR 硬碟,退貨無門,那麼將檔案系統轉換為 Btrfs,並進行適當的優化,是你最好的選擇。這套方法無法讓 SMR 變成 CMR,但至少能讓你的 NAS 從「幾乎不可用」提升到「堪用」的程度。

步驟一:認清現實,選擇合適的工作負載

這是最重要的一步。你必須接受 SMR 硬碟的物理限制。它只適合「寫入一次,讀取多次」的應用。把它當作冷資料的歸檔倉庫、影音庫、或不常變動的備份目的地。絕對不要在上面跑虛擬機、資料庫或任何需要頻繁隨機寫入的應用。

步驟二:掛載選項的藝術

在建立 Btrfs 檔案系統時,我們可以透過一些掛載選項(mount options)來進行優化。如果你是透過 Unraid, TrueNAS 或其他客製化系統來設定,通常可以在設定介面找到這些選項。

  • compress=zstd:這是最重要的選項。啟用 zstd 壓縮。現代 CPU 的運算速度遠快於硬碟寫入速度,在寫入前壓縮資料,可以大幅減少實際寫入硬碟的資料量,這對 SMR 硬碟來說是巨大的福音。
  • noatime:關閉檔案的「最後存取時間」記錄。每次讀取檔案都更新這個時間戳,會產生不必要的寫入,關閉它可以減少硬碟負擔。
  • space_cache=v2:這是 Btrfs 預設的空間快取機制,能讓檔案系統更快地找到可用空間,對於 CoW 系統來說很重要。
  • autodefrag:自動進行背景碎片整理。雖然會增加一點點寫入負擔,但對於保持長期效能穩定有正面幫助。

一個完整的掛載選項範例可能長這樣:rw,relatime,compress=zstd:3,space_cache=v2,autodefrag

步驟三:定期維護,不可或缺的儀式

Btrfs 不像 ZFS 那樣全自動,它需要你偶爾手動進行維護。

  • Balance(空間平衡):當你刪除大量檔案後,Btrfs 的空間可能會變得零碎。定期(例如每幾個月)執行一次 btrfs balance 可以重新整理空間分配。你可以用 btrfs balance start -dusage=50 /path/to/your/nas 來只平衡那些使用率超過 50% 的區塊,以節省時間。
  • Scrub(資料刷洗):這是 Btrfs 的資料完整性檢查工具。它會檢查所有資料的校驗和,確保沒有發生「位元腐敗」(bit rot)。建議每個月執行一次 btrfs scrub start /path/to/your/nas,為你的寶貴資料多加一層保險。

結語:做出明智的選擇

科技的世界充滿了各種權衡。SMR 硬碟用效能換取了容量和價格的優勢,但這個代價在 NAS 環境中往往是我們難以承受的。

我的最終建議依然是:為了你的資料安全和精神健康,請盡可能為你的 NAS 選擇 CMR 硬碟。 Western Digital 的 Red Plus/Pro、Seagate 的 IronWolf/IronWolf Pro 都是明確標示為 CMR 的 NAS 專用碟。多花一點錢,換來的是長期的穩定與安心。

而如果你已經身陷 SMR 的泥潭,希望這篇 Btrfs 的設定指南能成為你的救命稻草。它雖然不是萬靈丹,但確實能讓你的設備從一個昂貴的磚塊,變回一個雖然有點慢、但至少能正常運作的數位管家。願我們都能在數位化的道路上,走得更順遂,更安心。