用hdparm修复磁盘坏道
2013-06-09    刘世伟   
打印自: 安恒公司
地址: HTTP://vi.anheng.com.cn/news/article.php?articleid=2456
用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 进行修复。
责任编辑: admin