我有一块有坏扇区的旧硬盘,我错误地使用以下脚本在 smartctl 发现的坏扇区中写入零。问题是这是否有助于解决读/写错误,还是毫无用处?
脚本(顺便说一句,第一次写的脚本如有冒犯之处请多包涵):
a="$(smartctl -l selftest /dev/sdb | grep '# 1' | awk '{print $9}')"
smartctl -t short /dev/sdb
clear
echo $a
b="$(smartctl -l selftest /dev/sdb | grep '# 1' | awk '{print $5}')"
echo $b
until [[ $a = 0 ]];do
if [[ $b == *Compl* && $a == 0% ]]
then
exit
else
if [[ $b == *Compl* ]]
then
echo writting zeros
X="$(smartctl -l selftest /dev/sdb | grep 'read failure'| grep '# 1' | awk '{print $10}')"
Y=$((X / 8))
Z=${Y%.*}
echo $Y
dd if=/dev/zero of=/dev/sdb conv=sync bs=4096 count=1 seek=$Y
smartctl -t short /dev/sdb
fi
sleep 10
c="$(smartctl -l selftest /dev/sdb | grep '# 1' | awk '{print $9}')"
d="$(smartctl -l selftest /dev/sdb | grep '# 1' | awk '{print $5}')"
until [[ $c != $a ]] || [[ $d != $b ]];do
sleep 10
c="$(smartctl -l selftest /dev/sdb | grep '# 1' | awk '{print $9}')"
d="$(smartctl -l selftest /dev/sdb | grep '# 1' | awk '{print $5}')"
clear
echo $c
echo $d
echo ZZZZzzzzzZZZZ
done
clear
echo wake up time $(date +"%H:%M:%S")
a=$c
b=$d
echo $a
echo $b
fi
done
echo done
答案1
这基本上是徒劳的。它可能在短时间内有所帮助,但如果您的磁盘有坏扇区,那么随着时间的推移,它只会得到更多的坏扇区。最好购买新磁盘,并且/或者如果在保修期内,请更换该磁盘。如果它不在保修期内,则将好数据备份到好磁盘,将 0 写入坏磁盘至少 10 次,然后将其带到可以正确回收的地方。