<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>SMR硬碟 on KnightLi的博客</title>
        <link>https://www.knightli.com/zh-tw/tags/smr%E7%A1%AC%E7%A2%9F/</link>
        <description>Recent content in SMR硬碟 on KnightLi的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-tw</language>
        <lastBuildDate>Fri, 08 May 2026 22:34:39 +0800</lastBuildDate><atom:link href="https://www.knightli.com/zh-tw/tags/smr%E7%A1%AC%E7%A2%9F/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>F2FS 導致 HC620 疊瓦碟卡死？Linux SMR 硬碟排障指南</title>
        <link>https://www.knightli.com/zh-tw/2026/05/08/hc620-smr-f2fs-io-wait-freeze/</link>
        <pubDate>Fri, 08 May 2026 22:34:39 +0800</pubDate>
        
        <guid>https://www.knightli.com/zh-tw/2026/05/08/hc620-smr-f2fs-io-wait-freeze/</guid>
        <description>&lt;p&gt;HC620 這類氦氣封裝疊瓦碟配合 F2FS 使用時，如果出現系統卡住、應用程式無回應、&lt;code&gt;iowait&lt;/code&gt; 長時間飆高，通常不是單一參數沒調好，而是裝置特性和檔案系統策略撞在了一起。&lt;/p&gt;
&lt;p&gt;Western Digital Ultrastar DC HC620 屬於 Host-managed SMR。它更適合順序寫、分區化寫入和明確知道底層約束的軟體棧。F2FS 則是為快閃記憶體設計的日誌結構檔案系統，雖然能把很多隨機寫組織成順序寫，但在空間緊張、垃圾回收頻繁或 metadata 更新密集時，仍然可能把機械疊瓦碟拖進很長的內部整理週期。&lt;/p&gt;
&lt;h2 id=&#34;先確認是不是這類問題&#34;&gt;先確認是不是這類問題
&lt;/h2&gt;&lt;p&gt;建議先看三個現象：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iostat -x &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iotop -oPa
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dmesg -T &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -Ei &lt;span class=&#34;s2&#34;&gt;&amp;#34;f2fs|blk|zoned|reset|timeout|I/O error&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果能看到磁碟 &lt;code&gt;%util&lt;/code&gt; 長時間接近 100%，&lt;code&gt;await&lt;/code&gt; 很高，系統裡大量行程卡在 &lt;code&gt;D&lt;/code&gt; 狀態，基本可以判斷瓶頸在區塊裝置 I/O。&lt;/p&gt;
&lt;p&gt;再確認硬碟是否以 zoned 裝置暴露：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lsblk -o NAME,MODEL,SIZE,ROTA,ZONED,SCHED,MOUNTPOINTS
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat /sys/block/sdX/queue/zoned
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果是 Host-managed SMR，普通檔案系統和普通隨機寫負載都可能表現很差。它不像常見的桌面 SMR 碟那樣完全由硬碟韌體隱藏複雜度，而是更依賴主機端軟體理解寫入規則。&lt;/p&gt;
&lt;h2 id=&#34;為什麼-f2fs-容易把卡頓放大&#34;&gt;為什麼 F2FS 容易把卡頓放大
&lt;/h2&gt;&lt;p&gt;SMR 的問題在於寫入不是任意覆蓋那麼簡單。疊瓦磁軌為了提高容量，會讓相鄰磁軌部分重疊；當寫入模式偏隨機、覆蓋頻繁或快取耗盡時，硬碟需要做額外的資料搬運和整理。&lt;/p&gt;
&lt;p&gt;F2FS 的問題在於它本來面向 NAND flash。它採用日誌結構寫入，並透過 segment cleaning 和 garbage collection 回收空間。這個設計在 SSD 上通常很自然，因為 SSD 沒有機械尋道；但在機械硬碟上，尤其是 SMR 碟上，GC 產生的讀寫搬運可能變成明顯的長尾延遲。&lt;/p&gt;
&lt;p&gt;當 F2FS 後台 GC、前台寫入、checkpoint、metadata 更新和硬碟自身的 SMR 整理疊在一起時，I/O 佇列會被持續占滿。表現到使用者層，就是複製檔案、刪除目錄、跑下載、解壓縮或資料庫寫入時系統像「凍住」一樣。&lt;/p&gt;
&lt;h2 id=&#34;掛載參數先這樣保守調整&#34;&gt;掛載參數先這樣保守調整
&lt;/h2&gt;&lt;p&gt;如果暫時不能遷移檔案系統，可以先從 &lt;code&gt;/etc/fstab&lt;/code&gt; 的掛載參數下手：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;UUID=xxxx  /data  f2fs  defaults,nodiscard,active_logs=2,gc_merge,flush_merge,lazytime  0  0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;幾個參數的含義：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;nodiscard&lt;/code&gt;：關閉即時 discard。機械硬碟通常不需要像 SSD 那樣頻繁發送 TRIM/discard，保守關閉更穩。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;active_logs=2&lt;/code&gt;：F2FS 支援 2、4、6 個 active logs，預設通常是 6。降到 2 可以減少日誌並發帶來的尋道壓力。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gc_merge&lt;/code&gt;：讓後台 GC 執行緒處理部分前台 GC 請求，降低前台行程直接觸發慢 GC 時的卡頓。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;flush_merge&lt;/code&gt;：合併 cache flush 請求，底層裝置處理 flush 很慢時可能有幫助。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lazytime&lt;/code&gt;：減少部分存取時間更新帶來的 metadata 寫入。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;checkpoint=disable&lt;/code&gt; 不建議作為常規方案。它確實可能減少 checkpoint 壓力，但在異常斷電或崩潰後風險更高，而且內核文件也提醒，停用 checkpoint 後檔案系統仍需要 GC 來確保可用空間。除非你非常清楚代價，否則不要把它當成「效能開關」長期使用。&lt;/p&gt;
&lt;h2 id=&#34;調整-io-調度器&#34;&gt;調整 I/O 調度器
&lt;/h2&gt;&lt;p&gt;機械碟和 SMR 碟通常更需要請求合併與延遲控制。可以先查看目前調度器：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat /sys/block/sdX/queue/scheduler
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;可嘗試切換到 &lt;code&gt;mq-deadline&lt;/code&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; mq-deadline &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /sys/block/sdX/queue/scheduler
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;如果系統用於桌面互動，也可以測試 &lt;code&gt;bfq&lt;/code&gt;。不要只看順序吞吐，重點觀察卡頓是否減少、&lt;code&gt;await&lt;/code&gt; 是否下降、互動是否更穩定。&lt;/p&gt;
&lt;h2 id=&#34;限制-f2fs-後台-gc&#34;&gt;限制 F2FS 後台 GC
&lt;/h2&gt;&lt;p&gt;F2FS 的 sysfs 路徑以實際裝置名為準，先確認：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls /sys/fs/f2fs/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;然後針對對應掛載裝置調整 GC 間隔，例如：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;60000&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /sys/fs/f2fs/sdX/gc_min_sleep_time
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;120000&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /sys/fs/f2fs/sdX/gc_max_sleep_time
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;這裡的 &lt;code&gt;sdX&lt;/code&gt; 只是示例，實際可能是 &lt;code&gt;sda1&lt;/code&gt;、&lt;code&gt;dm-0&lt;/code&gt; 或其他名稱。調大 GC sleep time 的作用是降低後台 GC 搶占 I/O 的頻率，但代價是空間回收更慢。磁碟空間越接近滿碟，越容易再次觸發前台 GC，所以還要留出足夠空閒空間。&lt;/p&gt;
&lt;h2 id=&#34;更推薦的長期方案&#34;&gt;更推薦的長期方案
&lt;/h2&gt;&lt;p&gt;如果這塊碟存重要資料，最穩妥的方案是備份後換檔案系統，或者換更適合的硬碟。&lt;/p&gt;
&lt;p&gt;對大容量機械硬碟，優先考慮：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;XFS：適合大檔案、備份碟、媒體庫、歸檔和順序寫負載。&lt;/li&gt;
&lt;li&gt;EXT4：相容性強，行為穩定，排障資料多。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果是 Host-managed SMR，還要確認你的內核、控制器、檔案系統和應用是否真正支援 zoned block device 的使用方式。否則，把它當成普通隨機寫硬碟用，很容易遇到不可預測的長時間卡頓。&lt;/p&gt;
&lt;h2 id=&#34;實用建議&#34;&gt;實用建議
&lt;/h2&gt;&lt;p&gt;這類碟更適合冷資料、歸檔、備份、媒體檔案和順序寫入，不適合下載快取、容器映像、虛擬機磁碟、資料庫、頻繁解壓縮目錄或小檔案隨機寫。&lt;/p&gt;
&lt;p&gt;如果必須繼續用 F2FS，建議至少做到：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;關閉即時 discard。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;active_logs=2&lt;/code&gt;，減少並發日誌。&lt;/li&gt;
&lt;li&gt;開啟 &lt;code&gt;gc_merge&lt;/code&gt; 和 &lt;code&gt;flush_merge&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;保持較高空閒空間，不要接近滿碟。&lt;/li&gt;
&lt;li&gt;避免把下載目錄、資料庫、虛擬機映像放在這塊碟上。&lt;/li&gt;
&lt;li&gt;定期觀察 &lt;code&gt;iostat -x 1&lt;/code&gt;，不要只看平均速度。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;總結一下：HC620 + F2FS 卡死，本質上是 SMR 寫入約束、F2FS GC 和機械碟長尾延遲疊加後的結果。臨時方案是調掛載參數、調調度器、限制後台 GC；長期方案是遷移到 XFS/EXT4，或者把這類 SMR 碟放回更適合它的順序寫歸檔場景。&lt;/p&gt;
&lt;p&gt;參考連結：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.kernel.org/filesystems/f2fs.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Linux Kernel Documentation：F2FS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://documents.westerndigital.com/content/dam/doc-library/en_us/assets/public/western-digital/product/data-center-drives/ultrastar-dc-hc600-series/data-sheet-ultrastar-dc-hc620.pdf&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Western Digital Ultrastar DC HC620 Data Sheet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
