MrN*_*orm 17 ubuntu badblocks sata hard-disk fsck
我的 Ubuntu 13.10 系统在过去一天左右的时间里表现非常糟糕。查看内核日志,似乎小于 1 年的 3TB SATA 磁盘的特定扇区存在问题:
Nov 4 20:54:04 mediaserver kernel: [10893.039180] ata4.01: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
Nov 4 20:54:04 mediaserver kernel: [10893.039187] ata4.01: BMDMA stat 0x65
Nov 4 20:54:04 mediaserver kernel: [10893.039193] ata4.01: failed command: READ DMA EXT
Nov 4 20:54:04 mediaserver kernel: [10893.039202] ata4.01: cmd 25/00:08:f8:3f:83/00:00:af:00:00/f0 tag 0 dma 4096 in
Nov 4 20:54:04 mediaserver kernel: [10893.039202] res 51/40:00:f8:3f:83/40:00:af:00:00/10 Emask 0x9 (media error)
Nov 4 20:54:04 mediaserver kernel: [10893.039207] ata4.01: status: { DRDY ERR }
Nov 4 20:54:04 mediaserver kernel: [10893.039211] ata4.01: error: { UNC }
Nov 4 20:54:04 mediaserver kernel: [10893.148527] ata4.00: configured for UDMA/133
Nov 4 20:54:04 mediaserver kernel: [10893.180322] ata4.01: configured for UDMA/133
Nov 4 20:54:04 mediaserver kernel: [10893.180345] sd 3:0:1:0: [sdc] Unhandled sense code
Nov 4 20:54:04 mediaserver kernel: [10893.180349] sd 3:0:1:0: [sdc]
Nov 4 20:54:04 mediaserver kernel: [10893.180353] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
Nov 4 20:54:04 mediaserver kernel: [10893.180356] sd 3:0:1:0: [sdc]
Nov 4 20:54:04 mediaserver kernel: [10893.180359] Sense Key : Medium Error [current] [descriptor]
Nov 4 20:54:04 mediaserver kernel: [10893.180371] Descriptor sense data with sense descriptors (in hex):
Nov 4 20:54:04 mediaserver kernel: [10893.180373] 72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00
Nov 4 20:54:04 mediaserver kernel: [10893.180384] af 83 3f f8
Nov 4 20:54:04 mediaserver kernel: [10893.180389] sd 3:0:1:0: [sdc]
Nov 4 20:54:04 mediaserver kernel: [10893.180393] Add. Sense: Unrecovered read error - auto reallocate failed
Nov 4 20:54:04 mediaserver kernel: [10893.180396] sd 3:0:1:0: [sdc] CDB:
Nov 4 20:54:04 mediaserver kernel: [10893.180398] Read(16): 88 00 00 00 00 00 af 83 3f f8 00 00 00 08 00 00
Nov 4 20:54:04 mediaserver kernel: [10893.180412] end_request: I/O error, dev sdc, sector 2944614392
Nov 4 20:54:04 mediaserver kernel: [10893.180431] ata4: EH complete
Run Code Online (Sandbox Code Playgroud)
该kern.log文件大约 33MB,其中大部分都是重复出现的上述错误,并且该扇区在重复消息中似乎没有任何不同。
我目前正在现在卸载的磁盘上运行以下命令来测试并尝试解决磁盘可能存在的任何问题。我大约需要 12 小时,并且由于磁盘太大,预计还需要 24/48 小时:
e2fsck -c -c -p -v /dev/sdc1
Run Code Online (Sandbox Code Playgroud)
我的问题是:此驱动器是否出现故障,还是我在这里查看了一个常见问题?我想知道修复或忽略坏扇区是否对我有任何意义,以及是否应该在保修期内更换磁盘。我对上述命令的了解有些欠缺,所以我怀疑它是否会有所帮助。
快速更新!
e2fsck 终于在 2 天后完成了很多“inode 中的多重声明块”。尝试挂载文件系统导致错误,迫使其回退为只读:
Nov 11 08:29:05 mediaserver kernel: [211822.287758] EXT4-fs (sdc1): warning: mounting fs with errors, running e2fsck is recommended
Nov 11 08:29:05 mediaserver kernel: [211822.301699] EXT4-fs (sdc1): mounted filesystem with ordered data mode. Opts: errors=remount-ro
Run Code Online (Sandbox Code Playgroud)
尝试手动读取扇区:
sudo dd count=1 if=/dev/sdc of=/dev/null skip=2944614392
dd: reading ‘/dev/sdc’: Input/output error
0+0 records in
0+0 records out
0 bytes (0 B) copied, 5.73077 s, 0.0 kB/s
Run Code Online (Sandbox Code Playgroud)
尝试写信给它:
sudo dd count=1 if=/dev/zero of=/dev/sdc seek=2944614392
dd: writing to ‘/dev/sdc’: Input/output error
1+0 records in
0+0 records out
0 bytes (0 B) copied, 2.87869 s, 0.0 kB/s
Run Code Online (Sandbox Code Playgroud)
在这两个方面,Reallocated_Sector_Ct仍然是 0。
驱动器确实经常进入睡眠状态。我现在想这可能是文件系统问题?我不是 100%。
fro*_*utz 18
坏扇区总是表明 HDD 出现故障,事实上,当您看到这样的 I/O 错误时,您可能已经丢失/损坏了一些数据。如果您还没有备份,请进行备份,运行自检smartctl -t long /dev/disk并检查 SMART 数据smartctl -a /dev/disk。可以的话换一个。
坏扇区无法修复,只能由保留扇区替换,这会损害 HDD 性能,因为它们每次访问时都需要对保留扇区进行额外的查找。在文件系统层将这些扇区标记为坏扇区会有所帮助,因为它们将永远不会被访问;但是很难确定磁盘已经重新分配了哪些扇区,因此文件系统很可能不知道避开受影响的区域。
Ant*_*ala 12
要使驱动器重新分配扇区,通常需要向其中写入一些内容。然而,dd(d ISK d estroyer)并不总是工作,是非常不安全的:如果你混淆skip和seek选项,您可以轻松地搬起石头砸自己的脚skip平的N的第一块/dev/zero,写从“偏移”块过硬盘的 0 扇区。
如果您真的知道要强制用零覆盖扇区,则应使用hdparm:
% sudo hdparm --read-sector 833192656 /dev/sda
/dev/sda:
reading sector 833192656: FAILED: Input/output error
Run Code Online (Sandbox Code Playgroud)
是的,833192656 扇区在智能测试中也失败了。要将零写入它,请使用--write-sector:
% sudo hdparm --write-sector 833192656 /dev/sda
/dev/sda:
Use of --write-sector is VERY DANGEROUS.
You are trying to deliberately overwrite a low-level sector on the media.
This is a BAD idea, and can easily result in total data loss.
Please supply the --yes-i-know-what-i-am-doing flag if you really want this.
Program aborted.
Run Code Online (Sandbox Code Playgroud)
作为一种保护措施,hdparm除非您将--yes-i-know-what-i-am-doing开关传递给hdparm:
% sudo hdparm --yes-i-know-what-i-am-doing --write-sector 833192656 /dev/sda
/dev/sda:
re-writing sector 833192656: succeeded
% sudo hdparm --read-sector 833192656 /dev/sda
/dev/sda:
reading sector 833192656: succeeded
0000 0000 0000 0000 0000 0000 0000 0000
[ ... more zeroes here... ]
0000 0000 0000 0000 0000 0000 0000 0000
%
Run Code Online (Sandbox Code Playgroud)
不,坏扇区并不总是表示驱动器出现故障。有时,如果在断电时正在进行写入,则扇区中的数据会损坏,从而导致尝试读取时出错。尝试将新数据写入扇区可能会正常工作,因为它在物理上没有任何问题。
您可以badblocks -n在驱动器上运行以读取和重写每个扇区,或者在您的情况下,因为您已经知道相关扇区的编号,您可以使用dd它向其写入零。您可以使用smartctl -a. 您应该看到挂起的重新分配计数表明有多少扇区无法读取,并且在尝试写入扇区后,此计数将下降。重新分配的扇区数可能会增加,在这种情况下,它在物理上已损坏并已重新映射到备用池,这可能表明驱动器即将退出。如果没有,那么它只是被炒了,现在应该没问题了。
首先尝试读取扇区:
dd count=1 if=/dev/sda of=/dev/null skip=nnnn
Run Code Online (Sandbox Code Playgroud)
如果失败,那么您的数字是正确的,然后您可以使用以下方法将其归零:
dd count=1 if=/dev/zero of=/dev/sda seek=nnnn
Run Code Online (Sandbox Code Playgroud)
在按 Enter 之前仔细检查您是否准确键入了命令。
| 归档时间: |
|
| 查看次数: |
20867 次 |
| 最近记录: |