ハードディスクのエラーの修正に取り組んでいます。手動で修正することは可能ですが、数時間かかる場合があります。
このコマンドを入力した後Sudo badblocks -b 512 /dev/sda
、何百もの結果が得られました。手動で修正することは避けたいです。
私のエラーの詳細は here で見つけることができます
エラーを修正するために使用できるツールはありますか?または、シェルスクリプトの記述を手伝っていただけませんか。
まあ、いくつかのケースがあります:
echo 'repair' > /sys/block/md0/md/sync_action
。データを失うことなく問題を解決しました。 (これはあなたには当てはまらないと思いますが、実際にそれを変更することを検討する必要があります。)cat /dev/zero > tempfile
を使用して、空き領域をゼロで埋めます。これをrootとして実行します(root専用にスペースが予約されています)。おそらくシングルユーザーモードで実行してください(スペース不足による障害はありません)。スペースが足りなくなったら、ファイル(rm tempfile
)を削除します。fsck -fc
(ファイルシステムをマウント解除して実行、またはルートファイルシステムの場合、初期ブート中に読み取り専用で最悪の場合)により、どのファイルかがわかります。バックアップから交換してください。アンマウントファイルシステムでonlyを実行する必要があるbadblocks -n
によって、再マップが強制される可能性もあります。データは失われません(すでに失われている不良ブロックにあったもの以外)。
Badblocksの出力(これはは安全ではないであり、サイレント破損が発生します)に基づいてスクリプトを作成する場合は、かなり簡単です。 badblocks出力の各行には、ブロックサイズ(例では512)に基づいてブロック番号が表示されます。 ddのbs
には同じブロックサイズを使用します。ブロック番号はddのseek
です。 count
は1(行にいくつかの不良ブロックがある場合はそれ以上)です。 of
は、badblockを実行したパーティション(またはディスク)です。良いif
は/dev/zero
です。
e2fsck -c -c
はブロックサイズ保険で同じことをしているようです。
シングルユーザーモードに入り、fsck -yvf /dev/sda
まるでfsckが必要なようです。
インターネットでスクリプトソリューションを見たことがあるため、1つのコマンドでこれを実行できるかどうかはわかりません。
以下のスクリプトは、不良セクターを検出し、不良ブロックの結果をテキストファイルに入れます。次に、テキストファイルのサイズがゼロと異なる場合、e2fsckは不良セクターをマークします(したがって、これらのマークされたセクターはオペレーティングシステムで使用されません) )。
#!/bin/sh
target=/tmp/bad-blocks.txt
for disc in `fdisk -l | grep '^/' | awk '{ print $1 }'`; do
badblocks -v $disc > $target
if [ -s $target ]; then
echo "badblock(s) found on $disc"
e2fsck -l $target $disc
else
echo "no badblocks on $disc"
fi
done