用hdparm修复磁盘坏道

前几年写过一篇用dd在线修复硬盘坏扇区的文章,今天发现有个硬盘坏道, 无法用dd进行修复。

研究了一下hdparm 发现,用dd重写不能修复的硬盘坏扇区,可以用hdparm的--write-sector 参数,进行修复。
参数是lba扇区数, 跟smartctl -a 报告出来的相同,   每次修复一个512的扇区,
不过因为现在的磁盘都是4096字节的扇区, 所以要分别执行8次, 才能真正修复一个扇区:
假设 smartctl -a 报出221147150有错误,:
 
NumTest_Description    StatusRemainingLifeTime(hours)LBA_of_first_error
# 1Short offline        Completed: read failure 90%5503221147150

用dd命令, 定位一下, 一共有8个LBA扇区读错误:
dd if=/dev/sdb  skip=221147143 bs=512 count=1 of=/tmp/221147143
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.0128338 秒,39.9 kB/秒
dd if=/dev/sdb  skip=221147144 bs=512 count=1 of=/tmp/221147144
dd: 正在读入"/dev/sdb": 输入/输出错误
记录了0+0 的读入
记录了0+0 的写出
0字节(0 B)已复制,21.1198 秒,0.0 kB/秒
dd if=/dev/sdb  skip=221147144 bs=512 count=1 of=/tmp/221147144
dd: 正在读入"/dev/sdb": 输入/输出错误
记录了0+0 的读入
记录了0+0 的写出
0字节(0 B)已复制,21.1198 秒,0.0 kB/秒
....
....
....
221147144-221147151 一个8个扇区错误。
用hdparm 修复:
hdparm --yes-i-know-what-i-am-doing --write-sector  221147144    /dev/sdb
hdparm --yes-i-know-what-i-am-doing --write-sector  221147145    /dev/sdb
hdparm --yes-i-know-what-i-am-doing --write-sector  221147146    /dev/sdb
hdparm --yes-i-know-what-i-am-doing --write-sector  221147147    /dev/sdb
hdparm --yes-i-know-what-i-am-doing --write-sector  221147148    /dev/sdb
hdparm --yes-i-know-what-i-am-doing --write-sector  221147149    /dev/sdb
hdparm --yes-i-know-what-i-am-doing --write-sector  221147150    /dev/sdb
hdparm --yes-i-know-what-i-am-doing --write-sector  221147151    /dev/sdb

/dev/sdf:
re-writing sector  221147151: succeeded

现在再检测一下:
root@bak1:~# dd if=/dev/sdb of=/tmp/221147144 count=8 bs=512 skip=221147144
记录了8+0 的读入
记录了8+0 的写出
4096字节(4.1 kB)已复制,0.000288426 秒,14.2 MB/秒 已经修复。

 要得到坏扇区列表, 可以用badblock命令:
badblocks -b 512 /dev/sdb  -o /sdb.bad
然后根据文件 /sdb.bad 进行修复。


你可能感兴趣的:(文章,count,在线,修复,failure)