<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>資料校驗 on KnightLi的博客</title>
        <link>https://www.knightli.com/zh-tw/tags/%E8%B3%87%E6%96%99%E6%A0%A1%E9%A9%97/</link>
        <description>Recent content in 資料校驗 on KnightLi的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-tw</language>
        <lastBuildDate>Sat, 09 May 2026 07:11:01 +0800</lastBuildDate><atom:link href="https://www.knightli.com/zh-tw/tags/%E8%B3%87%E6%96%99%E6%A0%A1%E9%A9%97/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Btrfs Scrub 使用指南：資料校驗、自動修復與定期巡檢</title>
        <link>https://www.knightli.com/zh-tw/2026/05/09/btrfs-scrub-check-repair-guide/</link>
        <pubDate>Sat, 09 May 2026 07:11:01 +0800</pubDate>
        
        <guid>https://www.knightli.com/zh-tw/2026/05/09/btrfs-scrub-check-repair-guide/</guid>
        <description>&lt;p&gt;Btrfs scrub 是 Btrfs 日常維護裡最重要、也最容易被誤解的功能之一。它不是傳統意義上的 fsck，而是一種線上校驗流程：讀取檔案系統中的資料和 metadata，驗證校驗和、superblock、metadata block header 以及磁碟讀取錯誤，並在有可靠副本時嘗試修復損壞。&lt;/p&gt;
&lt;p&gt;如果你的 Btrfs 用在 NAS、家用伺服器、備份碟或多碟陣列上，scrub 應該成為定期巡檢的一部分。它的價值不是「等出事再修」，而是在磁碟還能讀、陣列還有好副本的時候，盡早發現靜默損壞。&lt;/p&gt;
&lt;h2 id=&#34;scrub-到底檢查什麼&#34;&gt;scrub 到底檢查什麼
&lt;/h2&gt;&lt;p&gt;根據 Btrfs 官方文件，scrub 會遍歷檔案系統資料和 metadata，主要檢查：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;資料區塊校驗和錯誤。&lt;/li&gt;
&lt;li&gt;基礎 super block 錯誤。&lt;/li&gt;
&lt;li&gt;基礎 metadata block header 錯誤。&lt;/li&gt;
&lt;li&gt;磁碟讀取錯誤。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在使用複製型 block group profile 的檔案系統上，例如 RAID1，讀寫掛載下的 scrub 可以自動修復部分損壞。修復方式不是「憑空恢復」，而是從另一個已驗證正確的副本複製好資料回來。&lt;/p&gt;
&lt;p&gt;這點很關鍵：scrub 的修復能力依賴「存在可用的好副本」。如果單碟上只有一份資料，scrub 可以發現校驗錯誤，但通常無法自行恢復原始內容。&lt;/p&gt;
&lt;h2 id=&#34;常用命令&#34;&gt;常用命令
&lt;/h2&gt;&lt;p&gt;對掛載點啟動 scrub：&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;sudo btrfs scrub start /
&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;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;sudo btrfs scrub start -B /
&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;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;sudo btrfs scrub status /
&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;取消正在執行的 scrub：&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;sudo btrfs scrub cancel /
&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;恢復被中斷的 scrub：&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;sudo btrfs scrub resume /
&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;如果指定的是 Btrfs 掛載路徑，Btrfs 會平行 scrub 該檔案系統裡的所有裝置。如果指定的是某個裝置，則只 scrub 該裝置；但當指定裝置上的副本讀取或校驗失敗時，Btrfs 仍會嘗試從其他裝置讀取好副本。&lt;/p&gt;
&lt;h2 id=&#34;scrub-不是-fsck&#34;&gt;scrub 不是 fsck
&lt;/h2&gt;&lt;p&gt;這是最容易踩坑的地方。scrub 不是 &lt;code&gt;btrfs check&lt;/code&gt;，也不是傳統意義上的檔案系統檢查器。&lt;/p&gt;
&lt;p&gt;scrub 能做的是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;利用校驗和發現資料或 metadata 損壞。&lt;/li&gt;
&lt;li&gt;在有其他可靠副本時自動修復。&lt;/li&gt;
&lt;li&gt;發現磁碟讀取錯誤和部分基礎結構錯誤。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;scrub 不能做的是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;重建沒有好副本的資料。&lt;/li&gt;
&lt;li&gt;替代離線檔案系統檢查。&lt;/li&gt;
&lt;li&gt;修復所有複雜的樹結構損壞。&lt;/li&gt;
&lt;li&gt;保證應用層檔案內容一定正確。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果檔案系統結構已經嚴重損壞，通常需要在專家指導下使用 &lt;code&gt;btrfs check&lt;/code&gt; 等工具。不要把 scrub 當成「萬能修復命令」。&lt;/p&gt;
&lt;h2 id=&#34;nocow-檔案的風險&#34;&gt;NOCOW 檔案的風險
&lt;/h2&gt;&lt;p&gt;Btrfs 官方文件特別提醒：對檔案設定 &lt;code&gt;NOCOW&lt;/code&gt; 屬性，也就是常見的 &lt;code&gt;chattr +C&lt;/code&gt;，目前實作中會隱式啟用 &lt;code&gt;NODATASUM&lt;/code&gt;。這意味著這些檔案的資料本身沒有校驗和。&lt;/p&gt;
&lt;p&gt;scrub 仍然可以校驗和修復這些檔案的 metadata，但不能校驗檔案資料內容。問題在多副本場景裡尤其明顯：如果某個 NOCOW 檔案的一個副本壞了，Btrfs 沒有資料校驗和判斷哪個副本是好的，就可能把壞內容返回給使用者空間工具。&lt;/p&gt;
&lt;p&gt;需要特別注意的是，一些軟體會預設使用 &lt;code&gt;+C&lt;/code&gt; 來提升效能。例如 systemd journal 和部分 libvirt 儲存池場景可能會設定 NOCOW。對於虛擬機映像、資料庫、日誌目錄，這種做法有效能理由，但也意味著你不能期待 scrub 像保護普通 COW 檔案那樣保護它們的資料內容。&lt;/p&gt;
&lt;h2 id=&#34;唯讀-scrub-也可能寫入&#34;&gt;唯讀 scrub 也可能寫入
&lt;/h2&gt;&lt;p&gt;另一個反直覺點是：在讀寫掛載的檔案系統上執行 read-only scrub，仍然可能導致一些寫入。&lt;/p&gt;
&lt;p&gt;官方文件說明，這是為了避免 block group 標記唯讀和寫回 block group items 之間的競態。換句話說，如果你希望 scrub 過程中完全沒有寫入，就需要在唯讀掛載的檔案系統上執行唯讀 scrub，而不是在讀寫掛載上加一個唯讀 scrub 選項就完事。&lt;/p&gt;
&lt;p&gt;對普通使用者來說，這意味著：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;日常線上 scrub 可以在讀寫掛載上執行。&lt;/li&gt;
&lt;li&gt;如果你在做取證、故障分析或極度保守的唯讀檢查，要先明確掛載狀態。&lt;/li&gt;
&lt;li&gt;不要把 read-only scrub 誤解成絕對零寫入。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;中斷與恢復&#34;&gt;中斷與恢復
&lt;/h2&gt;&lt;p&gt;新內核中，scrub 可能被多種事件中斷，例如系統掛起/休眠、檔案系統凍結、cgroup freezing、pending signals 等。被中斷後，正在執行的 scrub 會取消，但可以透過 &lt;code&gt;btrfs scrub resume&lt;/code&gt; 從保存的位置繼續。&lt;/p&gt;
&lt;p&gt;scrub 狀態會記錄在：&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;/var/lib/btrfs/
&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;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-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;scrub.status.UUID
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;scrub.progress.UUID
&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;狀態檔案會定期更新。恢復 scrub 時，會從最後保存的位置繼續，而不是完全從頭再來。&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;家用 NAS：每月一次。&lt;/li&gt;
&lt;li&gt;備份碟：每次長期接入後或每月一次。&lt;/li&gt;
&lt;li&gt;重要多碟陣列：每月一次，必要時更頻繁。&lt;/li&gt;
&lt;li&gt;新碟遷移或懷疑壞碟：遷移後立即跑一次。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;scrub 在空閒檔案系統上的裝置頻寬利用率可能接近 80%，所以不要在業務高峰期跑。對機械碟陣列，scrub 期間延遲可能明顯升高；對 SSD，也會增加讀放大和後台壓力。&lt;/p&gt;
&lt;h2 id=&#34;限制-scrub-頻寬&#34;&gt;限制 scrub 頻寬
&lt;/h2&gt;&lt;p&gt;過去可以用 &lt;code&gt;ionice&lt;/code&gt; 嘗試降低 scrub 對前台 I/O 的影響，但官方文件提醒，並不是所有 I/O 調度器都支援這種方式。CFQ 已經不再是主流；BFQ 支援相關優先級，但使用前應先理解其行為。對 &lt;code&gt;mq-deadline&lt;/code&gt; 等常見調度器，更推薦使用 cgroup2 I/O controller 或 Btrfs 自帶的限速介面。&lt;/p&gt;
&lt;p&gt;使用 systemd 限制讀取頻寬的例子：&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;sudo systemd-run -p &lt;span class=&#34;s2&#34;&gt;&amp;#34;IOReadBandwidthMax=/dev/sdx 10M&amp;#34;&lt;/span&gt; btrfs scrub start -B /
&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;Linux 5.14 以後，可以透過 Btrfs 專用 sysfs 介面設定每裝置 scrub 限速：&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; 100m &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /sys/fs/btrfs/FSID/devinfo/DEVID/scrub_speed_max
&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;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;sudo btrfs scrub limit /
&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;FSID&lt;/code&gt; 和 &lt;code&gt;DEVID&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;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;sudo btrfs filesystem show /
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls /sys/fs/btrfs/
&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;h2 id=&#34;實用維護流程&#34;&gt;實用維護流程
&lt;/h2&gt;&lt;p&gt;一個比較穩妥的 Btrfs 巡檢流程可以是：&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;span class=&#34;lnt&#34;&gt;4
&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;sudo btrfs scrub start -B /
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo btrfs scrub status /
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo btrfs device stats /
&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;btrfs|checksum|i/o error|read 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;如果 scrub 報告有 corrected errors，說明已經從好副本修復過資料，但這不代表可以忽略。你應該繼續檢查磁碟 SMART、線材、電源、控制器和 Btrfs device stats。&lt;/p&gt;
&lt;p&gt;如果 scrub 報告 uncorrectable errors，說明 Btrfs 找不到可用好副本，必須盡快備份仍能讀取的資料，定位具體檔案或裝置，並根據情況替換硬碟或從備份恢復。&lt;/p&gt;
&lt;h2 id=&#34;總結&#34;&gt;總結
&lt;/h2&gt;&lt;p&gt;Btrfs scrub 的定位很明確：它是線上資料巡檢和副本修復工具，不是 fsck，也不是備份。&lt;/p&gt;
&lt;p&gt;它最適合用在有校驗和、有冗餘副本的 Btrfs 檔案系統上，定期發現靜默損壞並自動從好副本恢復。它不能保護沒有校驗和的 NOCOW 檔案資料，也不能在沒有好副本時憑空恢復損壞內容。&lt;/p&gt;
&lt;p&gt;如果你使用 Btrfs 存重要資料，建議每月跑一次 scrub，配合 SMART、device stats、備份和告警一起使用。真正可靠的資料安全，永遠是校驗、冗餘、監控和備份一起工作，而不是只依賴某一個命令。&lt;/p&gt;
&lt;p&gt;參考連結：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://btrfs.readthedocs.io/en/latest/Scrub.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Btrfs 官方文件：Scrub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
