Filesystems

從 ext4 轉換後 Btrfs 強制只讀/損壞

  • February 26, 2017

我最近使用 btrfs-convert 將 lvm 卷上的 ext4 文件系統遷移到 btrfs。後來裝上之後,才發現它有一些問題。

一旦我做了一些涉及將數據寫入磁碟的事情,它就被強制只讀了,從dmesg. 我做了一些研究並執行scrub,它發現了兩個帶有 csum 錯誤的文件。不幸的是,其中之一是ext2_savedfor rollback。我認為刪除帶有 csum 錯誤的文件可以解決問題。所以我刪除了備份和其他文件。

重新啟動後,scrub 沒有發現任何錯誤。但是在安裝時,我現在收到以下消息:bdev /dev/mapper/my-volume errs: wr 0, rd 0, flush 0, corrupt 608, gen 0. 看來我現在可以寫入磁碟了(重命名文件有效,我還沒有做進一步的測試)。

這條消息應該讓我擔心還是可以忽略?甚至更好:我怎樣才能找到它的原因?擦洗甚至 btrfs check –repair 都沒有發現任何問題。


更新:

我執行了一個 Memtest 並檢查了壞塊。兩項測試結果都很乾淨。我還將我的核心更新為4.9.9-gentoo. 在編譯核心時,我發現我**CONFIG_BTRFS_FS_CHECK_INTEGRITY**啟用了該選項,也就是Btrfs with integrity check tool compiled in (DANGEROUS). 我現在禁用了這個選項。

在此之後,我嘗試啟動 Chrome - 這顯然在提到的磁碟上做了一些事情。在我在 dmesg 中讀到這樣的內容後不久:

*Some stacktrace*    
btrfs_finish_ordered_io:someline errno=-95 unknown
forced readonly

解除安裝給我留下了這條消息:

cleaner transaction attach returned -30

當我仍然有現在解決的校驗和錯誤時,我也有這些。現在我找不到他們的理由。

我再次執行了一次擦洗,結果為 0 個錯誤。執行時btrfs check --repair /dev/mapper/my-volume,它現在fixed discount file extents for some inodes,顯然是新出現的錯誤,與更新之前的相同命令沒有找到任何東西。

我可能不得不將數據以只讀方式移到另一個磁碟並格式化。

更新:

以只讀方式複制數據是可行的,不會失去數據,看起來如此。看起來從 ext4 到 btrfs 的轉換還不能完美地工作。


系統資訊:

Kernel: 4.4.39-gentoo; now: 4.9.9-gentoo
btrfs-progs v.4.9

btrfs 保留每個設備的統計資訊並將其永久儲存在磁碟上。您可以使用 手動列印它們btrfs device stats device|mountpoint。它們也列印在安裝上(至少如果它們中的任何一個不為零)。

因此,您所看到的只是告訴您過去已檢測到腐敗;您可以使用 -z 標誌清除計數器:btrfs device stats -z /dev/mapper/my-volume

當然,找出最初導致損壞的原因會很好——我不確定它是否是 btrfs 轉換錯誤,或者您是否有可能繼續導致損壞的東西(不可靠的硬體)。如果您不確定,我建議您進行記憶測試。

(而且,不言而喻,但要進行備份——尤其是在使用像 btrfs 這樣相對較新的文件系統時。)

引用自:https://unix.stackexchange.com/questions/344051