我的Ubuntu13.10系统在过去的一天里表现很差。查看内核日志,看起来<1r旧的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 completekern.log文件大约为33 of,其中大部分是重复出现的上述错误,并且重复消息中的扇区似乎没有任何不同。
我目前正在现在卸载的磁盘上运行以下命令,以测试和尝试解决磁盘可能存在的任何问题。我大约在12小时内,预计还需要24/48小时,因为磁盘太大了:
e2fsck -c -c -p -v /dev/sdc1我的问题是:这是驱动器失败,还是我在这里寻找一个共同的问题?我想知道我是否有必要修理或忽略坏的部分,我是否应该在保修期内更换磁盘。我对上面的命令不太了解,所以我怀疑它是否有用。
e2fsck最终在两天后完成了大量的“在inode的多重索赔块(S)”。试图挂载文件系统会导致一个错误,迫使它回到只读状态:
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。
驱动器确实经常进入睡眠状态。我现在认为这可能是一个文件系统问题?我不是百分之百。
发布于 2013-11-09 12:22:14
坏扇区总是显示HDD失败,事实上,当您看到这样的I/O错误时,您可能已经丢失/损坏了一些数据。如果您还没有备份,运行一个自测试smartctl -t long /dev/disk并检查智能数据smartctl -a /dev/disk。如果可以的话找个替代者。
坏扇区无法修复,只能被后备扇区取代,这会损害HDD性能,因为每次访问备用扇区时,它们都需要额外的搜索。将这些扇区标记为文件系统层上的坏扇区会有所帮助,因为这些扇区将永远不会被访问;但是很难确定哪些扇区已经被磁盘重新分配了,因此文件系统可能不知道如何避免受影响的区域。
发布于 2015-09-06 07:55:30
要使驱动器重新分配扇区,通常需要在它们中写入一些东西。但是,dd (磁盘销毁者)并不总是有效的,而且非常不安全:如果您混淆了skip和seek选项,那么您可以很容易地通过skip__ping N first块/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交换机传递给hdparm,否则--yes-i-know-what-i-am-doing不会真正编写任何内容:
% 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
%发布于 2013-11-10 00:19:21
不,不好的行业并不总是表现出一种失败的势头。有时,如果在电源故障时正在写入,则扇区中的数据将被损坏,当您试图读取数据时会导致错误。试图向该部门写入新数据可能会很好,因为它并没有物理上的问题。
您可以在驱动器上运行badblocks -n来读取和重写每个扇区,或者在您的情况下,由于您已经知道了该扇区的数目,所以可以使用dd向其写入零。您可以使用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之前,再检查一下是否准确地输入了命令。
https://unix.stackexchange.com/questions/99553
复制相似问题