我的 3 Tb 驅動器有故障。有很多壞塊,但它仍然有大約 2.6 Tb 的可用空間,我想用它來存儲垃圾(音樂、視頻等)。他將磁碟分成幾個分割區,然後製作 JBOD(只是一堆磁碟)RAID(如果您有興趣,有一個連結(俄語): https://habr.com/ru/post/252211)。但該文章的評論中有人提到,mkfs 本身可以使用「-c」鍵來完成相同的操作。現在我想知道它是如何運作的?是的,有一個手冊頁,它告訴我們:
-c 在建立檔案系統之前檢查設備是否有壞塊。如果指定此選項兩次,則使用較慢的讀寫測試而不是快速的唯讀測試。
有一篇 arch wiki 文章講述了幾乎相同的內容。它檢查設備是否有壞塊,然後呢?網路上到處都有人說它標記了壞塊並且作業系統不使用它們。我怎樣才能檢查它?是否有任何實用程式可以顯示標記的區塊以供進一步使用(可能是將來建立分區)?
答案1
您所引用的內容是正確的man mkfs.ext4
( ):man 8 mke2fs
-c
在建立檔案系統之前檢查設備是否有壞塊。如果指定此選項兩次,則使用較慢的讀寫測試而不是快速的唯讀測試。
但還有-l
:
-l filename
從檔案名稱中讀取壞區塊列表。請注意,壞區塊清單中的區塊編號必須使用與 所使用的區塊大小相同的區塊大小來產生mke2fs
。因此,該-c
選項mke2fs
是一種更簡單且不易出錯的方法,可在格式化磁碟之前檢查磁碟是否有壞區塊,並且mke2fs
會自動將正確的參數傳遞給badblocks
程式。
那麼讓我們調查一下man 8 badblocks
:
重要提示:如果 的輸出
badblocks
將被饋送到e2fsck
或mke2fs
程序,則正確指定區塊大小非常重要,因為產生的區塊編號非常依賴檔案系統使用的區塊大小。因此,強烈建議使用者不要badblocks
直接運行,而是使用和程式-c
的選項。e2fsck
mke2fs
它提到了e2fsck
(又名fsck.ext4
ext4 的情況),所以讓我們檢查一下man 8 e2fsck
[強調我的]:
-c
此選項導致e2fsck
使用badblocks(8)
程式對裝置進行唯讀掃描,以查找任何壞區塊。如果發現任何壞塊,它們將被添加到壞塊 inode,以防止它們被分配到檔案或目錄。如果指定該選項兩次,則將使用非破壞性讀寫測試來完成壞區塊掃描。
由於mke2fs
和e2fsck
是同一個工具包的一部分,所以我預計 -c
以mke2fs
同樣的方式工作,儘管它的描述沒有明確說明這一點。
然後檢查檔案系統知道的壞塊的使用情況dumpe2fs
。從man 8 dumpe2fs
:
-b
列印檔案系統中保留為壞的區塊。
(歸功於這個答案)。
請注意,儲存資訊的是檔案系統。要將其用於將來的檔案系統,您需要在銷毀當前檔案系統之前保存它。如果您更改分割區表或為新檔案系統選擇不同的區塊大小,那麼您將需要重新計算數字。