mkfs -c 是如何運作的

mkfs -c 是如何運作的

我的 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將被饋送到e2fsckmke2fs程序,則正確指定區塊大小非常重要,因為產生的區塊編號非常依賴檔案系統使用的區塊大小。因此,強烈建議使用者不要badblocks直接運行,而是使用和程式-c的選項。e2fsckmke2fs

它提到了e2fsck(又名fsck.ext4ext4 的情況),所以讓我們檢查一下man 8 e2fsck[強調我的]:

-c
此選項導致e2fsck使用badblocks(8)程式對裝置進行唯讀掃描,以查找任何壞區塊。如果發現任何壞塊,它們將被添加到壞塊 inode,以防止它們被分配到檔案或目錄。如果指定該選項兩次,則將使用非破壞性讀寫測試來完成壞區塊掃描。

由於mke2fse2fsck是同一個工具包的一部分,所以我預計 -cmke2fs同樣的方式工作,儘管它的描述沒有明確說明這一點。

然後檢查檔案系統知道的壞塊的使用情況dumpe2fs。從man 8 dumpe2fs

-b
列印檔案系統中保留為壞的區塊。

(歸功於這個答案)。

請注意,儲存資訊的是檔案系統。要將其用於將來的檔案系統,您需要在銷毀當前檔案系統之前保存它。如果您更改分割區表或為新檔案系統選擇不同的區塊大小,那麼您將需要重新計算數字。

相關內容