web-dev-qa-db-ja.com

どのパーティションにbadblockがあるかを判断する方法は?

私は次のデバイスを持っています:

モデルファミリ:Western Digital Caviar Green(AF)
デバイスモデル:WDC WD15EARS-00MVWB0 
シリアル番号:WD-WCAZA3607921 
 LU WWNデバイスID:5 0014ee 2b01eac3e 
ファームウェアバージョン:51.0AB51 
ユーザー容量:1,500,301,910,016バイト[1.50 TB] 
セクターサイズ:512バイト論理/物理
デバイス:smartctlデータベース[詳細な使用:- P show] 
 ATAバージョン:ATA8-ACS(マイナーリビジョンは示されていません)
 SATAバージョン:SATA 2.6、3.0 Gb/s 
現地時間:Thu Nov 21 00 :08:20 2013 CET 
 SMARTサポート:利用可能-デバイスにはSMART機能。
 SMARTサポート:有効

そして最近、このディスクの表面を読んでいるときにエラーが発生しました。これはエラーです:

完全なエラーログ:
 SMARTエラーログバージョン:1 
 ATAエラーカウント:25(デバイスログには最新の5つのエラーのみが含まれます)
 CR =コマンドレジスタ[HEX] 
 FR =機能レジスタ[HEX] 
 SC=セクターカウントレジスタ[HEX] 
 SN =セクター番号レジスタ[HEX] 
 CL =シリンダー低レジスター[HEX] 
 CH =シリンダー高レジスター[HEX] 
 DH =デバイス/ヘッドレジスター[HEX] 
 DC =デバイスコマンドレジスタ[HEX] 
 ER =エラーレジスタ[HEX] 
 ST =ステータスレジスタ[HEX] 
 Powered_Up_Timeは電源投入から測定され、[.____として出力されます。 ] DDd + hh:mm:SS.sssここで、DD =日、hh =時間、mm =分、
 SS =秒、sss =millisec。49。710日後に「ラップ」します。
 
ディスクの電源投入時の有効期間でエラー25が発生しました:18798時間(783日+ 6時間)
エラーの原因となったコマンドが発生したとき、デバイスはアクティブまたはアイドル状態でした。
 
コマンドの完了が発生した後、ギスターは次のとおりです。
 ER ST SC SN CL CH DH 
 ------ --- ------ 
 40 51 08 00 40 37 e6エラー:LBA = 0x06374000のUNC8セクター= 104284160 
 
エラーの原因となったコマンドにつながるコマンドは次のとおりです。
 CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name 
 ------ ------ --- --- ------- --------- -------------------- 
 c8 00 08 00 40 37 e6 08 08:54:35.771 READ DMA 
 ec 00 00 00 00 00 a0 08 08:54:35.763デバイスの識別
 ef 03 46 00 00 00 a0 08 08:54:35.763機能の設定[転送モードの設定]

これは25番目のエラーですが、以前のエラーはまったく同じです。

スマートレポートは次のとおりです。

SMART属性データ構造リビジョン番号:16 
ベンダー固有SMARTしきい値のある属性:
 ID#ATTRIBUTE_NAMEフラグ値最悪のスレッシュタイプが更新されたときにRAW_VALUE 
 1 Raw_Read_Error_Rate 0x002f 200 200005事前失敗常に-1 
 3 Spin_Up_Time 0x0027 253 189021事前失敗常に-2066 
 4 Start_Stop_Count 0x0032 099 099 000Old_age常に-1118 
 5 Reallocated_Sector_Ct 0x0033 200200140 Pre-fail Always-0 
 7 Seek_Error_Rate 0x002e 200 200 000 Old_age Always-0 
 9 Power_On_Hours 0x0032 075 075 000 Old_age Always --18833 
 10 Spin_Retry_Count 0x 100 000Old_age常に-0 
 11キャリブレーション_Retry_Count0x0032100 100 000Old_age常に-0 
 12 Power_Cycle_Count 0x0032 099 099 000 Old_age Always --1101 
 192 Power-Off_Retract_Count 0x0032 200 200 000 Old_age Always --277 
 193 Load_Cycle_Count 0x0032 085 085 000 Old_age Always --346753 [.___ ] 194 Temperature_Celsius 0x0022 122 109 000 Old_age Always-28 
 196 Reallocated_Event_Count 0x0032 200 200 000 Old_age Always-0 
 197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always-1 
 198オフライン_修正不可0x0030200 200 000Old_ageオフライン-2 
 199 UDMA_CRC_Error_Count 0x0032 200 196 000Old_age常に-11 
 200 Multi_Zone_Error_Rate 0x0008 200 200 000Old_ageオフライン-1

ですから、まだ不良セクタではありませんが、そうなると思います。

そのドライブに7つのパーティションがありますが、問題は、ディスクの先頭から、セクターがどこにあるか、どのパーティションまたは/およびどのMiB、KiBなどかがわからないことです。それを理解する方法はありますか?

3

私はそれを行う方法を見つけました。スマートレポートの次の行は、LBAを決定します。

40 51 08 00 40 37 e6エラー:LBAでのUNC8セクター= 0x06374000 = 104284160

つまり、104284160です。それがわかっている場合は、どのパーティションが関係しているかもわかります。

root:〜#fdisk -lu /dev/sda
Device Boot Start End Blocks Id System 
 ... 
/dev/sda3 99610624 1466798079 683593728 83 Linux

3番目のパーティションの正確な場所を特定するには:

104284160-99610624 = 4673536

ブロックサイズも知っておく必要があります。

#tune2fs -l/dev/mapper/crypt_data | grepブロック
ブロック数:170897920 
ブロックサイズ:4096 
グループあたりのブロック数:32768

これで、次の式を使用して、このLBAが含まれているファイルシステムブロックを特定できます。

   b =(int)((LS)* 512/B)
ここで:
 b =ファイルシステムのブロック番号
 B =ファイルシステムのブロックサイズ(バイト単位)
 L =不良セクタのLBA 
 S = fdisk -lu 
で示されるパーティションの開始セクタ。(int)は整数部分を示します。

私の場合、それは次のようになります。

b =(int)((104284160-99610624)* 512/4096 
 b = 584192

次に、そこにファイルがあるかどうかを確認する必要があります。

#debugfs 
 debugfs 1.42.8(20-Jun-2013)
 debugfs:open /dev/mapper/crypt_data
debugfs:testb 584192 
ブロック584192でマークuse 
 debugfs:icheck 584192 
 Block Inode number 
 584192 37486656 
 debugfs:ncheck 37486656 
 Inode Pathname 
 37486656/some /ファイル

そしてそれは基本的にそれです。次に、セクターを手動で再割り当てする必要があります。それを行う方法の詳細については、 ここで見つける

2