坏扇区是否表示磁盘出现故障?


16

我的Ubuntu 13.10系统在过去大约一天的时间里一直表现很差。查看内核日志,看来<1yr旧的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

kern.log文件约为33MB,其中大部分充满了上述重复的错误,并且在重复的消息中扇区似乎没有任何不同。

我目前正在现在卸下的磁盘上运行以下命令,以测试并尝试找出磁盘可能存在的所有问题。我大约需要12个小时,并且由于磁盘很大,预计还要花24/48个小时:

e2fsck -c -c -p -v /dev/sdc1

我的问题是:该驱动器是否出现故障,还是我在这里看到一个常见问题?我想知道我是否有必要修理或忽略坏扇区,是否仍应在保修期内更换处于保修期内的磁盘。我对上述命令的知识有些欠缺,因此我对它是否会有所帮助表示怀疑。

快速更新!

e2fsck在两天后终于完成,并带有许多“ 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

尝试手动读取扇区:

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

尝试写:

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

在这两个方面,Reallocated_Sector_Ct其余均为0。

驱动器确实经常进入睡眠状态。我现在认为这可能是文件系统问题?我不是100%。


4
确保您的备份正确无误,然后再检查硬件,几乎/肯定是/一个标志。
Shadur 2013年

嗯 他们有点过时了,但是无论如何他们都在那里。非常令人沮丧,因为该驱动器替换了另一个故障驱动器。
MrNorm

磁盘出现故障,请参阅我已介绍如何进行操作的以下问答
slm

2
...如果此驱动器替换了故障驱动器,则可能是控制器而不是驱动器。
Shadur 2013年

Answers:


17

坏扇区始终表示硬盘故障,实际上,当您看到诸如此类的I / O错误时,您可能已经丢失/损坏了某些数据。如果尚未备份,请进行自我测试smartctl -t long /dev/disk并检查SMART数据smartctl -a /dev/disk。如果可以的话,请寻求替代。

坏扇区无法修复,只能由备用扇区替代,这会损害HDD的性能,因为它们每次访问时都需要对备用扇区进行额外的搜索。在文件系统层上将这些扇区标记为坏扇区会有所帮助,因为届时将永远无法访问它们。但是,很难确定磁盘已重新分配了哪些扇区,因此文件系统很可能不知道如何避免受影响的区域。


谢谢。知道这对我真的很有帮助,因为它一直是我的灰色地带。我将驱动器归零并送回,因为它在保修范围内。
MrNorm

1
不是这样 坏扇区只是表明该扇区的流量很高。在大多数情况下,它确实表示磁盘出现故障。您可以调整搜索速度,以将较慢的响应标记为不良。
RobotHumans 2013年

2
对于由于某种原因大于实际磁盘的文件系统,也可能会看到读取错误。
托尔比约恩Ravn的安徒生

@frostschutz是什么意思Get a replacement if you can.?你是说更换磁盘?
飞机

10

为了使驱动器重新分配扇区,通常需要在其中写入一些内容。但是,ddD isk D estroyer)并不总是有效,并且非常不安全:如果您将skipseek选项混淆,则可以通过skippingN第一个块/dev/zero并在该“偏移” 写一个块来轻松地使自己陷入困境。硬盘的扇区0

如果您确实知道要强制使用零覆盖该扇区,则应使用hdparm

% sudo hdparm --read-sector 833192656 /dev/sda
/dev/sda:
reading sector 833192656: FAILED: Input/output error

是的,部门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.

为了安全起见,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

%

尽管这是一个古老的问题,但我真的想知道“ dd并不总是有效”的意思。您是否建议它可能无法按照指示写入数据?它并没有做任何特别容易出错的事情,只是在复制数据。使用几乎任何编程语言的两行代码,您都可以得到相同的结果。
TooTea

7

不,坏扇区并不总是表明驱动器出现故障。有时,如果在电源故障时正在进行写入操作,则扇区中的数据将被破坏,从而导致在尝试读取数据时出错。尝试将新数据写入该行业可能会很好,因为在物理上没有任何问题。

您可以badblocks -n在驱动器上运行以读取和重写每个扇区,或者,由于您已经知道相关扇区的编号,因此可以dd在其中写入零。您可以使用来检查SMART统计信息smartctl -a。您应该看到挂起的重新分配计数指示有多少个扇区读取失败,并且在尝试写入该扇区之后,该计数将下降。重新分配的扇区数可能会增加,在这种情况下,它的物理状况很差并且已重新映射到备用池,这可能表明驱动器即将退出。如果没有,那么它只是被打乱了,现在应该可以了。

尝试先阅读该行业:

dd count=1 if=/dev/sda of=/dev/null skip=nnnn

如果失败,则您拥有正确的数字,然后可以使用以下方法将其归零:

dd count=1 if=/dev/zero of=/dev/sda seek=nnnn

在按Enter键之前,请仔细检查您是否键入了命令。


您说的很有趣,因为在您执行命令后,我得到了一些有趣的信息。我已经在上面修正了我的问题。
MrNorm

您的驱动器是否由于某些原因不支持SMART,或者为什么还没有检查?
frostschutz 2013年

1
@frostschutz “在这两个方面,Reallocated_Sector_Ct都保持为0。” 似乎OP 检查SMART。
CVn

@MrNorm,请将完整smartctl -a输出添加到您的问题中。
psusi 2013年

2
请不要使用它(它甚至不总是起作用),如果您将跳过和查找混淆了,则会改写您的MBR。见我的回答
Antti Haapala 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.