不良セクタの解消
BadBlockHowToを参考に、不良セクタの解消を試みる。coreutilsのバージョンが比較的新しいVineSeedで実施したため、smartctlのバージョンは古いが、動作には問題ないと思われる。
まずは現状の確認から。
# smartctl -l selftest /dev/hda smartctl version 5.33 [i686-pc-linux-gnu] Copyright (C) 2002-4 Bruce Allen Home page is http://smartmontools.sourceforge.net/ === START OF READ SMART DATA SECTION === SMART Self-test log structure revision number 1 Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error # 1 Extended offline Completed: read failure 20% 712 202706820 # 2 Short offline Completed without error 00% 712 - # 3 Short offline Completed without error 00% 0 -
このL=202706820が不良ブロックのLBA番号。続いて197 Current_Pending_Sectorのチェック。
# smartctl -A /dev/hda smartctl version 5.33 [i686-pc-linux-gnu] Copyright (C) 2002-4 Bruce Allen Home page is http://smartmontools.sourceforge.net/ === START OF READ SMART DATA SECTION === SMART Attributes Data Structure revision number: 16 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x000b 200 200 051 Pre-fail Always - 0 3 Spin_Up_Time 0x0007 097 094 021 Pre-fail Always - 5925 4 Start_Stop_Count 0x0032 099 099 040 Old_age Always - 1724 5 Reallocated_Sector_Ct 0x0033 198 198 140 Pre-fail Always - 32 7 Seek_Error_Rate 0x000b 200 200 051 Pre-fail Always - 0 9 Power_On_Hours 0x0032 098 098 000 Old_age Always - 1809 10 Spin_Retry_Count 0x0013 100 100 051 Pre-fail Always - 0 11 Calibration_Retry_Count 0x0013 100 100 051 Pre-fail Always - 0 12 Power_Cycle_Count 0x0032 099 099 000 Old_age Always - 1724 196 Reallocated_Event_Count 0x0032 181 181 000 Old_age Always - 19 197 Current_Pending_Sector 0x0012 200 200 000 Old_age Always - 1 198 Offline_Uncorrectable 0x0012 200 200 000 Old_age Always - 1 199 UDMA_CRC_Error_Count 0x000a 200 253 000 Old_age Always - 0 200 Multi_Zone_Error_Rate 0x0009 200 200 051 Pre-fail Offline - 0
ふむ。1セクタが怪しいというのは先日から変化なし。
まず、L=202706820がどのパーティションにあるのか調査。
# fdisk -lu /dev/hda Disk /dev/hda: 120.0 GB, 120034123776 bytes 255 heads, 63 sectors/track, 14593 cylinders, total 234441648 sectors Units = セクタ数 of 1 * 512 = 512 bytes デバイス Boot Start End Blocks Id System /dev/hda1 * 63 20482874 10241406 7 HPFS/NTFS /dev/hda2 20482875 234372284 106944705 f W95 Ext'd (LBA) /dev/hda5 20482938 40965749 10241406 b W95 FAT32 /dev/hda6 40965813 71682029 15358108+ 83 Linux /dev/hda7 71682093 92164904 10241406 83 Linux /dev/hda8 92164968 92695049 265041 82 Linux swap / Solaris /dev/hda9 92695113 123411329 15358108+ 83 Linux
…えー、ディスクの未使用領域(パーティションさえ切っていない部分)にあるようです(わら
仕方ないので一時的に(?)パーティション作成。
# fdisk /dev/hda
残り全部を新しい/dev/hda10としてパーティション作成。Idは83(Linux)とする。ioctlのエラーでカーネルが新しいパーティションテーブルを読めないようなので、いったんリブート。
# reboot
リブート後、ext3パーティションを作成。Read-onlyのチェックつきで。
# mke2fs -j -c /dev/hda10
不良ブロック周辺でHDDから異音がした(汁
しばらく待っていたら、いちおうフォーマットが終了した模様。再度パーティションを確認。
# fdisk -lu /dev/hda Disk /dev/hda: 120.0 GB, 120034123776 bytes 255 heads, 63 sectors/track, 14593 cylinders, total 234441648 sectors Units = セクタ数 of 1 * 512 = 512 bytes デバイス Boot Start End Blocks Id System /dev/hda1 * 63 20482874 10241406 7 HPFS/NTFS /dev/hda2 20482875 234372284 106944705 f W95 Ext'd (LBA) /dev/hda5 20482938 40965749 10241406 b W95 FAT32 /dev/hda6 40965813 71682029 15358108+ 83 Linux /dev/hda7 71682093 92164904 10241406 83 Linux /dev/hda8 92164968 92695049 265041 82 Linux swap / Solaris /dev/hda9 92695113 123411329 15358108+ 83 Linux /dev/hda10 123411393 234372284 55480446 83 Linux
/dev/hda10の開始LBA位置はS=123411393。ブロックサイズはmke2fsの際に出ていたが、いちおう再確認。
# tune2fs -l /dev/hda10|grep Block Block count: 13870111 Block size: 4096 Blocks per group: 32768
B=1ブロック=4096バイト。というわけで、上書きすべきブロックは次のように求められる。
(L - S) * 512 / B = (202706820 - 123411393) * 512 / 4096 = 9911928.375
フォーマットしたばかりなのでinode番号などあるわけもないが、いちおう確認。
# debugfs debugfs 1.38 (30-Jun-2005) debugfs: open /dev/hda10 debugfs: icheck 9911928 Block Inode number 9911928 <block not found> debugfs: quit
ないね。もしinode番号があったら、ncheck [inode番号]でファイル名を確認できる。要らなければ消しちゃっていいし、要るならあきらめる。どっちみちあきらめるしかない。じゃあこのブロックを上書きしよう。
# dd if=/dev/zero of=/dev/hda10 bs=4096 count=1 seek=9911928 1+0 records in 1+0 records out 4096 bytes (4.1 kB) copied, 0.000237 seconds, 17.3 MB/s
S.M.A.R.T情報を見てみる。
# smartctl -A /dev/hda smartctl version 5.33 [i686-pc-linux-gnu] Copyright (C) 2002-4 Bruce Allen Home page is http://smartmontools.sourceforge.net/ === START OF READ SMART DATA SECTION === SMART Attributes Data Structure revision number: 16 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x000b 193 192 051 Pre-fail Always - 73 3 Spin_Up_Time 0x0007 097 094 021 Pre-fail Always - 5925 4 Start_Stop_Count 0x0032 099 099 040 Old_age Always - 1724 5 Reallocated_Sector_Ct 0x0033 197 197 140 Pre-fail Always - 33 7 Seek_Error_Rate 0x000b 200 200 051 Pre-fail Always - 0 9 Power_On_Hours 0x0032 098 098 000 Old_age Always - 1811 10 Spin_Retry_Count 0x0013 100 100 051 Pre-fail Always - 0 11 Calibration_Retry_Count 0x0013 100 100 051 Pre-fail Always - 0 12 Power_Cycle_Count 0x0032 099 099 000 Old_age Always - 1724 196 Reallocated_Event_Count 0x0032 181 181 000 Old_age Always - 19 197 Current_Pending_Sector 0x0012 200 200 000 Old_age Always - 0 198 Offline_Uncorrectable 0x0012 200 200 000 Old_age Always - 1 199 UDMA_CRC_Error_Count 0x000a 200 253 000 Old_age Always - 0 200 Multi_Zone_Error_Rate 0x0009 200 200 051 Pre-fail Offline - 0
をを、197 Current_Pending_Sectorが消えたよ!
198 Offline_Uncorrectableも消すには、long testをやればいいとのこと。
# smartctl -t long /dev/hda # smartctl -A -l selftest /dev/hda smartctl version 5.33 [i686-pc-linux-gnu] Copyright (C) 2002-4 Bruce Allen Home page is http://smartmontools.sourceforge.net/ === START OF READ SMART DATA SECTION === SMART Attributes Data Structure revision number: 16 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x000b 198 192 051 Pre-fail Always - 73 3 Spin_Up_Time 0x0007 097 094 021 Pre-fail Always - 5925 4 Start_Stop_Count 0x0032 099 099 040 Old_age Always - 1724 5 Reallocated_Sector_Ct 0x0033 197 197 140 Pre-fail Always - 34 7 Seek_Error_Rate 0x000b 200 200 051 Pre-fail Always - 0 9 Power_On_Hours 0x0032 098 098 000 Old_age Always - 1815 10 Spin_Retry_Count 0x0013 100 100 051 Pre-fail Always - 0 11 Calibration_Retry_Count 0x0013 100 100 051 Pre-fail Always - 0 12 Power_Cycle_Count 0x0032 099 099 000 Old_age Always - 1724 196 Reallocated_Event_Count 0x0032 181 181 000 Old_age Always - 19 197 Current_Pending_Sector 0x0012 200 200 000 Old_age Always - 0 198 Offline_Uncorrectable 0x0012 200 200 000 Old_age Always - 1 199 UDMA_CRC_Error_Count 0x000a 200 253 000 Old_age Always - 0 200 Multi_Zone_Error_Rate 0x0009 200 200 051 Pre-fail Offline - 0 SMART Self-test log structure revision number 1 Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error # 1 Extended offline Completed without error 00% 721 - # 2 Extended offline Completed: read failure 20% 712 202706820 # 3 Short offline Completed without error 00% 712 - # 4 Short offline Completed without error 00% 0 -
ありゃ?消えないよ。なんでかな。要調査だな。でもlong testでread failureが出なくなったから、状況は昨日よりも改善したとみていいでしょう。
とりあえず今日はここまで。