FSCK 报告文件系统仍然有错误

Css*_*liv 9 boot fsck

我正在即时学习一些知识fsck,但到目前为止我发现的内容在我应用它时似乎并没有太大作用。这个提示的下一步是修复我在启动时遇到的错误?

fsck 报告文件系统仍然有错误 - 需要手动 fsck

sud*_*dus 12

HDD和SSD的SMART信息

检查 SMART 信息。gnome-disks根据此链接使用磁盘别名很容易,

在恶意软件损坏引导扇区后重新格式化硬盘 - 向下滚动到“可能磁盘硬件已损坏”

通过 (1) 处的按钮选择 SMART 并在 (2) 处检查整体评估。

在此处输入图片说明

fsckext4文件系统上运行

当我fsckext4文件系统上使用时,我从另一个驱动器启动并卸载文件系统。

sudo e2fsck -f /dev/sdxn
Run Code Online (Sandbox Code Playgroud)

其中 x 是设备字母,n 是分区号,在您的情况下,/dev/sda1根据屏幕截图。

有时,运行此命令两次会有所帮助。有时文件系统损坏无法修复。

有时会有坏扇区(驱动器上的硬件缺陷)。然后您可以使用以下命令标记坏扇区(并使系统避免它们)

sudo e2fsck -cfk /dev/sdxn
Run Code Online (Sandbox Code Playgroud)

看说明书

man e2fsck
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,以及有关修复文件系统的更多提示的以下链接,

修复U盘分区表和文件系统

  • 当坏块驱动器时,最好使用`sudo e2fsck -cfk /dev/sdxn`将新坏块添加到**现有**坏块表...但我会先检查SMART信息。 (2认同)

Evg*_*nuk 7

恐怕您的硬盘有坏块或已失效。您是否看到此消息:blk_update_request: I/O error, dev sda, sector 2048?这意味着无法从物理设备读取该扇区。

您需要从 LiveCD 启动并检查您的驱动器:

$ sudo smartctl -HA /dev/sda
Run Code Online (Sandbox Code Playgroud)

并检查该行 SMART overall-health self-assessment test result: PASSED ,该行Reallocated_Sector_Ct应包含0RAW_VALUE字段中。

如果是 SMART 自检,PASSED您可以尝试使用badblocks工具“重新映射”坏块:

$ sudo badblocks -svo ~/msg.log /dev/sda
Run Code Online (Sandbox Code Playgroud)

并在之后运行 fsck:

$ sudo fsck -a /dev/sda1
Run Code Online (Sandbox Code Playgroud)

如果是 SMART 自检,则FAILED需要更换硬盘。

PS:您应该从 LiveCD 会话中执行所有这些步骤。你必须更换/dev/sda到你的驱动器。

更新 [11.11.2017]: 所以我检查了我的一个旧 HHD,badblocks我在我的syslog:

Nov 10 13:46:55 router kernel: [  121.339691] ata2.01: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
Nov 10 13:46:55 router kernel: [  121.339702] ata2.01: BMDMA stat 0x64
Nov 10 13:46:55 router kernel: [  121.339711] ata2.01: failed command: READ DMA
Nov 10 13:46:55 router kernel: [  121.339726] ata2.01: cmd c8/00:08:58:64:00/00:00:00:00:00/f0 tag 0 dma 4096 in
Nov 10 13:46:55 router kernel: [  121.339726]          res 51/40:00:5b:64:00/00:00:00:00:00/f0 Emask 0x9 (media error)
Nov 10 13:46:55 router kernel: [  121.339733] ata2.01: status: { DRDY ERR }
Nov 10 13:46:55 router kernel: [  121.339738] ata2.01: error: { UNC }
Nov 10 13:46:55 router kernel: [  121.364282] ata2.00: configured for UDMA/100
Nov 10 13:46:55 router kernel: [  121.380287] ata2.01: configured for UDMA/100
Nov 10 13:46:55 router kernel: [  121.380327] sd 1:0:1:0: [sdb] tag#0 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
Nov 10 13:46:55 router kernel: [  121.380337] sd 1:0:1:0: [sdb] tag#0 Sense Key : Medium Error [current] [descriptor] 
Nov 10 13:46:55 router kernel: [  121.380346] sd 1:0:1:0: [sdb] tag#0 Add. Sense: Unrecovered read error - auto reallocate failed
Nov 10 13:46:55 router kernel: [  121.380355] sd 1:0:1:0: [sdb] tag#0 CDB: Read(10) 28 00 00 00 64 58 00 00 08 00
Nov 10 13:46:55 router kernel: [  121.380361] blk_update_request: I/O error, dev sdb, sector 25691
Nov 10 13:46:55 router kernel: [  121.380369] Buffer I/O error on dev sdb, logical block 3211, async page read
Nov 10 13:46:55 router kernel: [  121.380410] ata2: EH complete
Run Code Online (Sandbox Code Playgroud)

因此,所有有关 I/O 错误的消息都来自内核。我发现最有趣的事情是在这一行:

Nov 10 13:46:55 router kernel: [  121.380346] sd 1:0:1:0: [sdb] tag#0 Add. Sense: Unrecovered read error - auto reallocate failed
Run Code Online (Sandbox Code Playgroud)

据我了解,这是来自磁盘固件的解码消息。固件似乎发现读取错误并尝试重新分配扇区并失败。因此,在我们的例子中badblocks,除了读取所有扇区之外什么都不做,我们可以用dd if=/dev/sdX of=/dev/null.

现在我对sudodus. 最合适的解决方案是:

sudo e2fsck -cfk /dev/sdxn
Run Code Online (Sandbox Code Playgroud)

  • 你没有明白。每个 HDD 和 SSD 都有“保留”区域。如果磁盘的“固件”检测到写入扇区的尝试失败,它可以将该扇区重新映射到保留区域中的一个扇区。因此,当您尝试访问该扇区时,您会从重新映射的扇区中获取数据。所以除了固件,没有人知道这个部门。也许这篇 [文章](https://superuser.com/questions/384095/how-to-force-a-remap-of-sectors-reported-in-smart-c5-current-pending-sector#688764) 会清除话题。 (2认同)