Smartctl 脚本用于写入零

Smartctl 脚本用于写入零

我有一块有坏扇区的旧硬盘,我错误地使用以下脚本在 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 次,然后将其带到可以正确回收的地方。

相关内容