linux – 如何使用hdparm来修复挂起的扇区?

linux – 如何使用hdparm来修复挂起的扇区?,第1张

概述SMART正在说明我服务器硬盘上的一个待处理扇区.我已经阅读了许多文章,建议使用hdparm“轻松”强制磁盘重新定位坏扇区,但我找不到正确的方法来使用它. 我的“smartctl”中的一些信息: Error 95 occurred at disk power-on lifetime: 20184 hours (841 days + 0 hours) When the command that SMART正在说明我服务器硬盘上的一个待处理扇区.我已经阅读了许多文章,建议使用hdparm“轻松”强制磁盘重新定位坏扇区,但我找不到正确的方法来使用它.

我的“smartctl”中的一些信息:

Error 95 occurred at disk power-on lifetime: 20184 hours (841 days + 0 hours)  When the command that caused the error occurred,the device was active or IDle.  After command completion occurred,registers were:  ER ST SC SN CL CH DH  -- -- -- -- -- -- --  40 51 00 d7 55 dd 02  Error: UNC at LBA = 0x02dd55d7 = 48059863  Commands leading to the command that caused the error were:  CR FR SC SN CL CH DH DC   Powered_Up_Time  Command/Feature_name  -- -- -- -- -- -- -- --  ----------------  --------------------  c8 00 08 d6 55 dd e2 00  18d+05:13:42.421  READ DMA  27 00 00 00 00 00 e0 00  18d+05:13:42.392  READ NATIVE MAX ADDRESS EXT  ec 00 00 00 00 00 a0 02  18d+05:13:42.378  IDENTIFY DEVICE  ef 03 46 00 00 00 a0 02  18d+05:13:42.355  SET FEATURES [Set transfer mode]  27 00 00 00 00 00 e0 00  18d+05:13:42.327  READ NATIVE MAX ADDRESS EXT SMART Self-test log structure revision number 1 Num  Test_Description    Status                  Remaining  lifeTime(hours)        LBA_of_first_error # 1  Extended offline    Completed: read failure       90%     20194         48059863 # 2  Short offline       Completed without error       00%     15161         -

有了“糟糕的LBA”(48059863),我该如何使用hdparm?参数“–read-sector”和“–write-sector”应该具有哪种类型的地址?

如果我发出命令hdparm –read-sector 48095863 / dev / sda,它会读取并转储数据.如果这个命令是正确的,我应该期待一个I / O错误,对吗?

相反,它转储数据:

$./hdparm --read-sector 48059863 /dev/sda/dev/sda:reading sector 48059863: succeeded4b50 5d1b 7563 a932 618d 1f81 4514 23438a16 3342 5e36 2591 3b4e 762a 4dd7 037f6a32 6996 816f 573f eee1 bc24 eed4 206e(...)
解决方法 如果出于某种原因,您希望尝试清除这些坏扇区,并且您不关心驱动器的现有内容,则下面的shell代码段可能有所帮助.我在一款较旧的希捷barracuda硬盘上测试了这款产品,该产品远远超过了它的保修期.它可能不适用于其他驱动器型号或制造商,但如果您必须编写脚本,它应该让您走上正确的道路.它会破坏驱动器上的所有内容.

您可能更喜欢运行badblocks,hdparm安全擦除(SE)(https://wiki.archlinux.org/index.php/Securely_wipe_disk)或其他一些实际为此设计的工具.甚至制造商也提供像SeaTools这样的工具(有一个32位的linux’企业’版本,谷歌它).

在执行此 *** 作之前,请确保有问题的驱动器完全未使用/未安装.另外,我知道,虽然循环,没有任何借口.这是一个黑客,你可以让它变得更好……

baddrive=/dev/sdbbadsect=1while true; do  echo Testing from LBA $badsect  smartctl -t select,${badsect}-max ${baddrive} 2>&1 >> /dev/null  echo "Waiting for test to stop (each dot is 5 sec)"  while [ "$(smartctl -l selective ${baddrive} | awk '/^ *1/{print substr(,1,9)}')" != "Completed" ]; do    echo -n .    sleep 5  done  echo  badsect=$(smartctl -l selective ${baddrive} | awk '/# 1  Selective offline   Completed: read failure/ {print }')  [ $badsect = "-" ] && exit 0  echo Attempting to fix sector $badsect on $baddrive  hdparm --repair-sector ${badsect} --yes-i-kNow-what-i-am-doing $baddrive  echo Continuning testdone

使用’selftest’方法的一个优点是负载由驱动器固件处理,因此它连接的PC不像dd或badblock那样被加载.

注意:对不起,我犯了一个错误,正确的条件是这样的:

while [ "$(smartctl -l selective ${baddrive} | awk '/^ *1/{print }')" = "Self_test_in_progess" ]; do

并且脚本的退出条件变为:

[ $badsect = "-" ] || [ "$badsect" = "" ] && exit 0
总结

以上是内存溢出为你收集整理的linux – 如何使用hdparm来修复挂起的扇区?全部内容,希望文章能够帮你解决linux – 如何使用hdparm来修复挂起的扇区?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1038727.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存