Linux

包含虛擬磁碟的 btrfs 上的 csum 錯誤

  • December 29, 2018

我有一個 btrfs 磁碟,由於硬體故障而遭受了一些損壞,並且在複製某些文件時會出現 i/o 錯誤。我執行了 btrfs scrub,當它報告 csum 錯誤時,我將其離線並執行了 a btrfs check --check-data-csum,它返回了以下幾十行:

mirror 0 bytenr 549766098944 csum 1874004453 expected csum 2335064354

據我所知,使用--backup有很好的機會解決這個問題,並且是修復文件系統的第一步。但是,這是我用於 qemu 的虛擬磁碟儲存,我擔心如果我這樣做會損害虛擬磁碟(尤其是 windows 磁碟)的內部一致性。

btrfs 手冊頁--init-csum-tree在其他危險命令旁邊提到了一個標誌。這是使用它的好藉口,還是我有其他選擇?

CentOS Linux 7,核心 3.10.0-514.26.2.el7.x86_64

btrfs-progs 版本 4.4.1 發布 1.el7

磁碟是WD紅6TB(5.5TiB)WD60EFRX,一個5.5TiB分區

虛擬磁碟為 .qcow2 格式

如果校驗和錯誤,則數據可能是錯誤的,並且清除校驗和樹(這是什麼--init-csum-tree)不會解決這個問題,它只會將錯誤數據直接暴露給使用者空間並防止檢測到舊數據中的任何其他位損壞在FS上。本質上,您在磁碟上只有一份數據副本,並且該副本已損壞,因此您不必擔心這些磁碟映像中的數據可能會損壞,因為幾乎可以肯定存在一些數據損壞。如果您只收到十幾個這樣的錯誤消息,那麼至少不會有太多損壞(每個應該對應於 4-16KiB 的數據,因為 BTRFS 在塊級別進行校驗和),所以這是一件好事.

在這種情況下,我實際上建議使用btrfs restore將文件從磁碟拉到不同的位置,或者從備份中恢復。如果您只有一個磁碟,因此沒有數據複製,那麼當您遇到校驗和錯誤而無法將已知的良好數據恢復到新位置時,您將無能為力。

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