badblocks 實用程式會不斷報告“最後一個區塊無效”

badblocks 實用程式會不斷報告“最後一個區塊無效”

badblocks我正在嘗試在具有單一分割區的磁碟機上運行。此磁碟機上包含 FreeBSD 檔案系統。

我使用 Linux live USB 驅動器啟動。驅動器已卸載。的輸出fdisk -l是:

   Device  Boot     Start          End    Id     System
/dev/sda1     *        63   976773167+    a5     FreeBSD

所以我跑:

# badblocks -v /dev/sda1

它說:

badblocks: invalid last block - /dev/sda1

我找不到任何關於此的有用資訊。我badblocks在這裡正確使用該實用程式嗎?或者這是否表示驅動器出現問題?

答案1

不,這並不表示驅動器出現問題。您收到此錯誤是因為 badblocks 接受 /dev/sda1 作為最後一個區塊參數,而不是接受它作為裝置。

你問題中的文法對我來說看起來是正確的。嘗試在設備後面指定最後一個區塊參數:
badblocks -v /dev/sda1 976773167

如果這不起作用,請嘗試將第一個區塊也添加到其中:
badblocks -v /dev/sda1 976773167 63

只是為了向您保證,這並不表明您的驅動器有問題,這是我添加無效的最後一個塊參數“nope”時的輸出:

sudo badblocks -v /dev/sdb1 nope
badblocks:最後一個區塊無效 - 不


以下是我上次使用 badblocks 的 bash 歷史記錄中的一個範例(需要 sudo 存取權限才能存取我的系統上的這些磁碟機):
sudo badblocks -v /dev/sdb1

輸出:

檢查區塊 0 到 976751967
檢查壞區塊(唯讀測試):

如果我在一段時間後使用 Ctrl+C 取消該過程,則輸出為:

在區塊 7470720 處中斷

以下是恢復該進程的語法(請參閱man badblocks):
badblocks -v 設備 [ 最後一個塊 ] [ 第一個塊 ]

「最後一個區塊」是裝置上要讀取的最後一個區塊,「第一個區塊」是它應該開始讀取的位置。例子:
sudo badblocks -v /dev/sdb1 976751967 7470720

輸出:

檢查區塊 7470720 至 976751967 檢查壞區塊(唯讀測試):

答案2

如今,現代磁碟機硬體上的 badblocks 指令幾乎不值得付出努力。這是因為驅動器控制器板在內部識別壞塊並從最初分配的“備用”塊中進行替換以進行自動替換。如果您用完了這些備用塊並且遇到壞塊問題,我強烈建議更換磁碟,因為硬體正在變壞。

如果您想了解磁碟機的運作狀況,大多數現代磁碟機都支援 SMART 磁碟機介面來報告磁碟運作狀況。有許多實用程式可以顯示磁碟運行狀況的狀態並提供有關磁碟運行狀況的資訊。嘗試其中之一。

答案3

您從網頁複製了指令。 -v 中的破折號被替換為一些不同的破折號字元。 (比普通破折號稍長)鍵入命令或以某種方式修復它。

答案4

如果儘管使用正確的語法但您仍收到此錯誤,並且您使用的是大磁碟(例如幾 TB)和小塊大小(例如 512 位元組),那麼您可能會遇到badblocks使用32 位元區塊編號的限制。

作為解決方法,您可以使用更大的區塊。要找到badblocks可以使用的最小區塊大小,您只需badblocks使用不同的值(有-b或沒有開始/結束區塊)運行即可。如果你收到這樣的錯誤

badblocks:值對於定義的資料類型太大無效結束區塊:必須是 32 位元值

然後嘗試增加區塊大小(例如-b 512增加到-b 1024-b 2048)直到它起作用。有了這個,你可以使用一些解決方案,但總比沒有好。

您也可以ddrescue此時使用,或聯絡維護人員來badblocks修復下一個版本中的問題。

相關內容