更新

更新

我在 Ubuntu 18.04 上遇到了硬碟問題,由於錯誤,系統隨機將我的根分割區 (/dev/sda4) 重新掛載為唯讀。

dmesg|grep 'I/O error'揭示了 sda4 的明顯問題。我現在沒有確切的輸出,因為盒子已成功重新啟動,目前沒有問題。

我的計劃是對檔案系統運行檔案系統檢查。我跟著這個答案本教程小心。在後一個教程中,我使用了標題為“的部分”使用 systemd 時如何在 Linux 上系統重新啟動後強制 fsck 檢查檔案系統

但是,重新引導後,不會檢查檔案系統,如下列命令的輸出所示:

tune2fs -l /dev/sda4 | grep checked             
Last checked:             Sat Nov 21 15:36:56 2020

我嘗試過 GRUB CMDLINE 的這些變體,但都沒有成功:

GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity fsck.mode=force"

GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity fsck.mode=force fsck.repair=yes"

是的,我確實跑了update-grub。我缺什麼?

輸出smartctl -a /dev/sda

Device Model:     Samsung SSD 860 EVO 250GB
Serial Number:    S59WNG0MA22770K
LU WWN Device Id: 5 002538 e70265a2a
Firmware Version: RVT03B6Q
User Capacity:    250,059,350,016 bytes [250 GB]
Sector Size:      512 bytes logical/physical
Rotation Rate:    Solid State Device
Form Factor:      2.5 inches
Device is:        Not in smartctl database [for details use: -P showall]
ATA Version is:   Unknown(0x09fc), ACS-4 T13/BSR INCITS 529 revision 5
SATA Version is:  SATA 3.2, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Wed May  3 11:35:14 2023 MST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

General SMART Values:
Offline data collection status:  (0x00) Offline data collection activity
                                        was never started.
                                        Auto Offline Data Collection: Disabled.
Self-test execution status:      (   0) The previous self-test routine completed
                                        without error or no self-test has ever 
                                        been run.
Total time to complete Offline 
data collection:                (    0) seconds.
Offline data collection
capabilities:                    (0x53) SMART execute Offline immediate.
                                        Auto Offline data collection on/off support.
                                        Suspend Offline collection upon new
                                        command.
                                        No Offline surface scan supported.
                                        Self-test supported.
                                        No Conveyance Self-test supported.
                                        Selective Self-test supported.
SMART capabilities:            (0x0003) Saves SMART data before entering
                                        power-saving mode.
                                        Supports SMART auto save timer.
Error logging capability:        (0x01) Error logging supported.
                                        General Purpose Logging supported.
Short self-test routine 
recommended polling time:        (   2) minutes.
Extended self-test routine
recommended polling time:        (  85) minutes.
SCT capabilities:              (0x003d) SCT Status supported.
                                        SCT Error Recovery Control supported.
                                        SCT Feature Control supported.
                                        SCT Data Table supported.

SMART Attributes Data Structure revision number: 1
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  5 Reallocated_Sector_Ct   0x0033   038   038   010    Pre-fail  Always       -       311
  9 Power_On_Hours          0x0032   095   095   000    Old_age   Always       -       21420
 12 Power_Cycle_Count       0x0032   099   099   000    Old_age   Always       -       14
177 Wear_Leveling_Count     0x0013   001   001   000    Pre-fail  Always       -       2041
179 Used_Rsvd_Blk_Cnt_Tot   0x0013   100   100   010    Pre-fail  Always       -       0
181 Program_Fail_Cnt_Total  0x0032   100   100   010    Old_age   Always       -       0
182 Erase_Fail_Count_Total  0x0032   100   100   010    Old_age   Always       -       0
183 Runtime_Bad_Block       0x0013   038   038   010    Pre-fail  Always       -       311
187 Reported_Uncorrect      0x0032   100   100   000    Old_age   Always       -       0
190 Airflow_Temperature_Cel 0x0032   067   065   000    Old_age   Always       -       33
195 Hardware_ECC_Recovered  0x001a   200   200   000    Old_age   Always       -       0
199 UDMA_CRC_Error_Count    0x003e   100   100   000    Old_age   Always       -       0
235 Unknown_Attribute       0x0012   099   099   000    Old_age   Always       -       10
241 Total_LBAs_Written      0x0032   099   099   000    Old_age   Always       -       166281511800

SMART Error Log Version: 1
No Errors Logged

SMART Self-test log structure revision number 1
No self-tests have been logged.  [To run self-tests, use: smartctl -t]

SMART Selective self-test log data structure revision number 1
 SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
    1        0        0  Not_testing
    2        0        0  Not_testing
    3        0        0  Not_testing
    4        0        0  Not_testing
    5        0        0  Not_testing
  256        0    65535  Read_scanning was never started
Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.

更新:

今天早上伺服器再次崩潰(它仍然正常運行,但/以唯讀方式安裝),這是我在 dmesg 中看到的內容:

dmesg |grep sda

[70547.166349] sd 0:0:0:0: [sda] tag#13 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[70547.166354] sd 0:0:0:0: [sda] tag#13 CDB: ATA command pass through(16) 85 06 2c 00 00 00 00 00 00 00 00 00 00 00 e5 00
[70948.441912] sd 0:0:0:0: [sda] tag#15 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[70948.441918] sd 0:0:0:0: [sda] tag#15 CDB: Read(10) 28 00 1a cb 1c 00 00 00 08 00
[70948.441922] print_req_error: I/O error, dev sda, sector 449518592
[70948.442312] sd 0:0:0:0: [sda] tag#16 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[70948.442315] sd 0:0:0:0: [sda] tag#16 CDB: Read(10) 28 00 1a cb 1c 00 00 00 08 00
[70948.442316] print_req_error: I/O error, dev sda, sector 449518592
[70948.442955] sd 0:0:0:0: [sda] tag#17 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[70948.442960] sd 0:0:0:0: [sda] tag#17 CDB: Read(10) 28 00 0e 0b 03 08 00 00 20 00
[70948.442962] print_req_error: I/O error, dev sda, sector 235602696
[70948.443389] sd 0:0:0:0: [sda] tag#18 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[70948.443393] sd 0:0:0:0: [sda] tag#18 CDB: Read(10) 28 00 0e 0b 03 08 00 00 08 00
[70948.443396] print_req_error: I/O error, dev sda, sector 235602696
[72347.211525] sd 0:0:0:0: [sda] tag#19 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[72347.211531] sd 0:0:0:0: [sda] tag#19 CDB: ATA command pass through(16) 85 06 2c 00 00 00 00 00 00 00 00 00 00 00 e5 00
[74147.255746] sd 0:0:0:0: [sda] tag#21 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[74147.255752] sd 0:0:0:0: [sda] tag#21 CDB: ATA command pass through(16) 85 06 2c 00 00 00 00 00 00 00 00 00 00 00 e5 00
[75947.299631] sd 0:0:0:0: [sda] tag#23 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[75947.299637] sd 0:0:0:0: [sda] tag#23 CDB: ATA command pass through(16) 85 06 2c 00 00 00 00 00 00 00 00 00 00 00 e5 00
[77747.345291] sd 0:0:0:0: [sda] tag#25 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[77747.345297] sd 0:0:0:0: [sda] tag#25 CDB: ATA command pass through(16) 85 06 2c 00 00 00 00 00 00 00 00 00 00 00 e5 00
[79547.389376] sd 0:0:0:0: [sda] tag#27 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[79547.389382] sd 0:0:0:0: [sda] tag#27 CDB: ATA command pass through(16) 85 06 2c 00 00 00 00 00 00 00 00 00 00 00 e5 00
[81347.432593] sd 0:0:0:0: [sda] tag#29 FAILED Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[81347.432598] sd 0:0:0:0: [sda] tag#29 CDB: ATA command pass through(16) 85 06 2c 00 00 00 00 00 00 00 00 00 00 00 e5 00

我確實意識到需要更換驅動器,但我的目標只是fsck在根分區上運行。

答案1

我不知道如何使用您正在嘗試的解決方案強制進行 fsck,但我可以建議一個替代解決方案:

使用tune2fs該值並將其限制為非常低的重新安裝次數和非常低的時間戳

# To see current settings
sudo tune2fs -l /dev/sda4
# To alter it
sudo tune2fs -c 1 -i 1d /dev/sda4 

這將強制每 1 次重新安裝或自上次檢查後每 1 天進行一次檢查,無論發生的時間是否早。

檢查智能

正如其他人所說,這只是解決硬體問題的創可貼。有時硬碟壞了,有時是無關的硬體問題(執行記憶體測試),有時只是 SATA 電纜鬆動(從兩端拔下並重新插入,如果不能解決問題,請嘗試另一條電纜) 。

請注意最壞的情況,即 PSU 發生故障並損壞硬體的其餘部分(在這種情況下,更換 HDD 只能暫時解決問題,因為隨著時間的推移,新的 HDD 將被 PSU 損壞)。檢查電壓是否在可接受的水平內。

發布智慧的輸出:

sudo smartctl -a /dev/sda

可以幫助診斷可能發生的情況。

更新

我不知道為什麼你也不能透過tune2fs運行fsck。

但我看到了你的聰明。根據它,您的磁碟正在老化,但看起來很健康。

問題可能出在其他地方,例如 SATA 電纜。

如果您無法使 fsck 工作,那麼我所能建議的就是從 liveUsb 啟動並手動執行命令。

更新2

好的,您發布了 dmseg 訊息。我們有來自 SMART 和 OS 的相互矛盾的訊息,所以我會詳細寫一下。

壞塊

SMART 表示您的磁碟機有壞塊。對任何 SSD 來說,這都是正常現象,因為它們會老化,磁碟機會將資料重新分配到備用區塊。一旦耗盡備用驅動器,就需要更換驅動器。

SMART 表示壞塊數量在「正常」範圍內:這裡最重要的屬性是Reallocated_Sector_CtRuntime_Bad_Block

它說它檢測到 311 個壞塊,並將 311 個重新分配到備用區塊中。這很好。如果有 311 個壞區塊,但只有 310 次重新分配,則表示其中一個區塊中的資料遺失。

重要的是“標準化”值(038)。這就是製造商告訴您他們認為正常的情況的方式。

一個值,其中 100 表示完美,0 表示非常糟糕。現在是 38,這意味著「情況越來越糟」;但製造商說只要該值高於 010(閾值)就可以。

這裡我們得到了第一個互相矛盾的訊息:Used_Rsvd_Blk_Cnt_Tot說保護區根本沒有被觸及,儘管有壞塊。它不相加。

但如果韌體儘管報告了該值但沒有追蹤該值,我也不會感到驚訝,因此我們暫時忽略它。

磨損均衡

這是閱讀時最有問題的屬性。Wear_Leveling_Count說它是 001。

這意味著它已經用完了備用塊。但存在韌體錯誤,該屬性會向後報告,值為 1 表示驅動器處於 99% 的運作狀況。

用一個總重量計算器我插入了您寫入的 LBA 數量 + 512 磁區大小,並發現您的磁碟機已寫入 77.43TiB。根據谷歌,你的模型應該有 150TBW 所以它應該仍然可以生存。

恐怕最好的解決方案是啟動 Windows 盒子並運行水晶磁碟資訊它解釋了這些韌體錯誤(使用內部資料庫),並將向您報告非常準確的健康評估。

鑑於你的 smart 說SMART overall-health self-assessment test result: PASSED我傾向於相信它想說的是 99%,而不是 1%。

但如果我錯了,我們可以到此為止,必須更換磁碟。

電纜問題/主機板問題

Linux dmesg 中的錯誤基本上表明它嘗試讀取扇區並獲取了錯誤資料。

核心甚至說它嘗試讀取扇區 235602696 兩次並得到不同的資料:

  • 28 00 0e 0b 03 08 00 002000
  • 28 00 0e 0b 03 08 00 000800.

如果磁碟顯示沒有錯誤,但作業系統顯示有錯誤;然後資料在傳輸過程中被損壞。通常這表示:

  • SATA 電纜鬆動
  • SATA 線損壞
  • 電源線插頭鬆動
  • 電源線損壞
  • 主機板總線故障
  • 電源故障
  • 記憶體故障

但這就是我們所擁有的我們的第二個相互矛盾的資訊來源: UDMA_CRC_Error_Count是 0。

這意味著磁碟從未偵測到由電纜損壞/鬆動或主機板匯流排損壞所引起的單一錯誤。

這是非常不可能的。 SMART 表示磁碟狀況良好,從作業系統到達磁碟的命令絕不會因接線不良而損壞;然而作業系統讀取同一扇區兩次並得到不同的位元組。

我能想到的唯一能讓這成為可能的事情是如果你的內存不好。或者是一種極不可能的電纜問題,其中進入磁碟的所有資料都不會損壞,但從磁碟中取出的資料確實會損壞。

行動方針

我的直覺告訴我磁碟壞了。但:

  1. 將所有資料備份到另一個磁碟。在 LiveUSB 運行中(以及足夠大的外部 USB 驅動器):
sudo apt install zstd

# To backup
sudo zstd -16v < /dev/sda > /media/external_disk/backup_file.zst

# To restore (don't do that on step 1, see step 5)
sudo zstdcat -v /media/external_disk/backup_file.zst > /dev/sda
  1. 再次備份數據,但這次僅使用常規副本文件(如果磁碟損壞,從簡單備份中恢復比嘗試循環掛載磁碟的壓縮 zstd 映像並從中讀取文件要容易得多)
  2. 重新啟動並執行記憶體測試以丟棄 RAM 錯誤
  3. 關機,打開機箱,然後重新拔除並插入 SATA 和電源(驅動器)電纜。檢查它們沒有損壞。可能會替換它們。
  4. 再次啟動 LiveUSB 磁碟機並執行磁碟安全性擦除。如果您的驅動器出現問題,也許這會將其重置回工作狀態(或者如果磁碟無法挽救,可能會導致它運行最後一個命令)。這應該需要幾分鐘:
sudo blkdiscard -s /dev/sda
  1. 如果到目前為止一切順利,請使用sudo zstdcat步驟 1 中的命令還原備份。

如果磁碟仍然有問題且 memtest 成功,那麼我個人會將磁碟判定為壞磁碟。

我們不能忽視 038 的價值意味著Reallocated_Sector_Ct情況正在變得糟糕,儘管製造商表示還沒有「那麼」糟糕。

啊!重要提示:如果在某個時候您將磁碟關閉超過 3 個月;這種情況很有可能發生。儘管人們普遍認為,NAND 單元如果長時間未通電(「太長時間」可能是 7 天到 7 年;但最常見的情況是 3 個月),可能會失去儲存能力。特別是如果他們老了。

如果您遇到這種情況,則只需執行上述步驟:備份資料、安全性清除磁碟、復原備份。

祝你好運。

相關內容