Linux
 Computer >> コンピューター >  >> トラブルシューティング >> Linux

Linuxで不良ブロック(バッドセクタ)を修復する方法:実証済みのテクニック

Linuxで不良ブロックを修復する方法

LinuxとMicrosoft Windowsをデュアルブートしているユーザーは、どちらかのOSにより多くの空き容量を確保するために、パーティションの縮小や拡張を行うことがあります。その際、LinuxのGPartedやWindowsのchkdskから「不良セクタ(bad sector)」に関する警告が表示されることがあります。Linuxのみを利用しているユーザーでも、同様の警告を目にすることがあるでしょう。

実は、ユーザーが受け取る通知には、同じように見えて2種類の異なる不良セクタが存在します。1つは、ディスクプラッタの物理的な損傷やNANDメモリセルの故障を示す、従来型の不良セクタ通知です。多くの人が「不良ブロック」と呼ぶのはこちらですが、「セクタ」と「ブロック」には細かい技術的な違いがあります。ただし、マシンが健全なセクタを誤って不良と判定することはまれです。

もう一方は「ソフト的不良セクタ(ソフトウェア不良ブロック)」と呼ばれるもので、簡単なファイルシステム操作だけで修復できる場合があります。ただし、不良ブロックへの書き込みには危険が伴うため、内蔵ドライブを扱う場合は、まずSMARTデータの確認から調査を始めるのが安全です。これは非破壊的な操作であり、作業を進める前に物理的な問題を切り分けられます。リムーバブルメディアの場合は、次に紹介する方法から始めるとよいでしょう。

方法1:SMARTデータの確認

不良セクタが単なるソフトウェアエラーかどうかを確認する確実な方法があります。SMARTデータを使えば、ディスク自身のファームウェア情報を調べて判断できます。UnityのDash、Xfce4のWhiskerメニュー、LXDEのアクセサリメニュー、KDEのGNOMEアプリケーションメニューなどから「GNOME Disks(ディスク)ユーティリティ」を起動してください。ターミナルで gnome-disks と入力してEnterキーを押しても起動できます。左側の一覧でハードディスクを選択し、右側のウィンドウコントロールの隣にあるメニューボタンをクリックします。多くのGNU/Linux環境では、Disksユーティリティはデフォルトでプライマリハードディスクを表示します。

メニューから「SMARTデータとセルフテスト(SMART Data & Self-Tests)」を選択します(Ctrl+Sキーでも開けます)。ここにはドライブの現在の健康状態が表示されます。値が空白の場合は「セルフテストを開始」ボタンをクリックして、ディスクに自己診断を実行させましょう。上部の「全体的な評価(Overall Assessment)」行に、GNOME Disksによるドライブの総合評価が表示されます。

フルスクリーン表示でも、SMART属性はスクロールしないとすべて見えないことがあります。特に注目したいのが「再割り当て済みセクタ数(Reallocation Count)」です。これはすでに再割り当てされたセクタの数を示しています。不良セクタが多数ある場合は、ドライブが完全に故障する前に交換を検討した方がよいでしょう。

方法2:正しいスーパーブロックの確認

SMARTデータでは問題がないのに、特定のディスクユーティリティから「Bad Superblock(不正なスーパーブロック)」エラーが出ることがあります。SDカードやUSBメモリなどではSMARTデータを読み取れないため、エラーが出ても必ずしも物理的な問題とは限りません。これはソフトウェア上の問題である可能性が高いのです。

例えば、次のようなコマンドを実行した場合を考えてみましょう。

fsck.ext4 /dev/sda

このコマンドはおそらく「スーパーブロックが壊れている」という結果を返します。スーパーブロックとはファイルシステムのマスターブロックのことです。しかし、これはCLIのコマンド指定ミスによるもので、本当の不良ブロックではありません。/dev/sda はパーティションではなくドライブ全体を指すため、fsckはスーパーブロックが存在しない場所を探し、誤って問題があると判断してしまうのです。幸い、このコマンド自体は破壊的ではありません。代わりに次を実行してください。

sudo fsck.ext4 /dev/sda1

今度は「ファイルシステムはクリーンです」と表示されるはずです。ext の後ろの数字が、対象ボリュームのextバージョンと一致していることを必ず確認してください。

また、FAT12/16/32、NTFS、HFS/HFS+のボリュームに対してext2/3/4用のfsckを実行しても、同様のエラーが発生します。整合性チェッカーが混乱し、実際にはファイルシステムの種類が想定と一致していないだけなのに、何か異常があると判断してしまうのです。FATボリュームに対しては、ビット数に関係なく fsck.vfat または dosfsck を使用してください。これらのコマンド(Linuxのバージョンによっては fsck.msdos)に -t スイッチを付けると、読み取れないクラスタを不良ブロックとしてマークできます。

方法3:NTFSボリュームの不良ブロック確認

WindowsとLinuxをデュアルブートしており、NTFSボリュームでスーパーブロックなどの不良セクタエラーが出ている場合は、Windowsを再起動してコマンドラインから chkdsk /r c: を実行します(c: は対象のNTFSボリュームのドライブ文字に置き換えてください)。サーフェススキャンを完了するために、Windowsの再起動が必要になることが多いです。この処理には時間がかかるため、OSが応答していないように見えても、単に処理中であるだけの場合があります。「適切な権限がない」というエラーが出た場合は、スタートメニューでコマンドプロンプトを右クリックし、「管理者として実行」を選択してから進めてください。

NTFSボリュームをLinuxのみで運用している場合はchkdskが使えませんが、不良ブロックエラーが単なるファイルシステムタイプの不一致によるものであれば、修正する手段があります。sudo ntfsfix /dev/sdb1 を実行してください(/dev/sd の後ろの英数字は、実際のデバイス名とパーティション番号に置き換えます)。システムに接続されているすべてのボリューム名を確認するには、sudo fdisk -l を実行するか、インストールされていればGNOME Disksユーティリティを利用するとよいでしょう。ダーティビットをクリアしてもよいと確信できる場合は、sudo ntfsfix -d /dev/sdb1 として実行できます。

古いディスクの不良セクタを新しいボリュームにクローンした場合のように、NTFSボリュームの不良ブロックが物理的なハードウェアの問題ではなくソフト的不良ブロックだと確信できる場合は、sudo ntfsfix -bd /dev/sdb1 を実行しましょう。これにより不良ブロックマーカーのリストがリセットされます。

方法4:badblocksユーティリティの活用

Live ISO版のLinuxを起動するか、他の方法でext2/ext3/ext4ファイルシステムをアンマウントできれば、sudo fsck.ext4 -c /dev/sda1 を実行して、読み取り専用の不良ブロックスキャンを行えます。もちろん、/dev/sd の後ろには正しいボリューム識別子を、fsck.ext の後ろには正しいextバージョン番号を指定する必要があります。-cc と指定すると、より徹底的な非破壊の読み書きテストが実行されます。

これがbadblocksユーティリティの一般的な使い方ですが、単体でも使用できます。デバイス名を指定して sudo badblocks -n を実行すると、ターミナルに直接不良ブロックの報告が表示されます。-w オプションを付けると書き込みモードのテストになりますが、-n-w は相互に排他的なので、一緒に使わないでください。データのあるボリュームに対して -w オプションを使用すると、すべてのデータが完全に消去されるため、絶対に避けてください。データを保持したい場合は、低速でも -n オプションを使用しましょう。-w オプションは、消去しても構わないボリューム向けです。-v オプションはどちらとも組み合わせ可能で、詳細な出力が得られるため、データ破損の調査に役立ちます。さらに、-o オプションにテキストファイル名を指定すると、結果をファイルに書き出して後から確認できます。sudo badblocks -nv -o badblocks.log /dev/sdb1 のように実行すればスナップショットが取得でき、本物の不良ブロックが存在する場合は大量の情報が表示されるので注意してください。

著者について

Linuxで不良ブロック(バッドセクタ)を修復する方法:実証済みのテクニック

Kevin Arrows(ケビン・アローズ)

Kevin Arrowsは、10年以上の業界経験を持つベテランのテクノロジースペシャリストです。Microsoft Certified Technology Specialist(MCTS)認定資格を保有し、最新の技術動向を追い続けることに強い情熱を注いでいます。ソフトウェア開発、サイバーセキュリティ、クラウドコンピューティングなど、幅広い技術トピックについて執筆しており、複雑な技術的概念を明快かつ簡潔に説明する能力で、同業者からも高く評価されています。

  1. Windows 10へのアップグレード後に消えたUbuntuのGRUBブートメニューを復元する2つの方法

    1台のPCにWindowsとUbuntu(またはLubuntu、XubuntuなどのUbuntu系ディストリビューション)を別々のパーティションへインストールし、デュアルブート環境を構築しているユーザーは少なくありません。しかし、Windows 7からWindows 10へアップグレードした後、PCの起動時にGRUBブートメニューが表示されなくなり、そのままWindows 10が立ち上がってしまうトラブルが頻繁に報告されています。 原因は、Windows 10のインストーラーがGRUBメニューを更新する仕組みを持っておらず、Microsoft独自のブートローダーがLinuxと互換性がないことに

  2. wgetの-bフラグでバックグラウンドダウンロードの状態を確認する方法

    コマンドの末尾にアンパサンド(&)を付けてwgetをバックグラウンドで実行することも可能ですが、実用面では-bフラグを付けてコマンドを実行する方が便利です。例えば、DebianのCDインストールイメージをダウンロードしたいとしましょう。その場合、「wget -b https://cdimage.debian.org/mirror/cdimage/archive/8.7.1/i386/list-cd/debian-8.7.1-i386-CD-1.list.gz」のように実行すると、プロセスがバックグラウンドで継続していることが即座に通知され、さらにwgetがどのバックグラウンドプロセスで動作して