linuxにてディスクの不良セクタを修復する

新しくlinuxサーバ機に取り付けたディスク(HDDやSSD)は必ずsmartctlのセルフテストを行ってから使っているのですが、過去に不良セクタが出て外していたディスクを一時的に再利用する機会があったので、不良セクタの修復を行ってみました。

[html]
# smartctl --test=long /dev/sda
[/html]

にての結果が

[html]
# smartctl -l selftest /dev/sda
smartctl 6.4 2014-10-07 r4002 [i686-linux-3.16.0-4-686-pae] (local build)
Copyright (C) 2002-14, Bruce Allen, Christian Franke,
www.smartmontools.org
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       90%     20372         2063521237
[/html]

こんな感じだったりします。
もちろんのことCurrent_Pending_Sectorも

[html]
# smartctl -a /dev/sda
.....(略)
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
197 Current_Pending_Sector  0x0032   200   200   000    Old_age   Always       -       11
.....(略)
[/html]

の様にカウントがあります。
幸いにもまっさらにしたディスクでしたので不良セクタを潰してしまう事にしました。
selftestの結果からもLBA:2063521237が引っかかっているのが分かっておりますので、ここを潰してしまいましょう。

[html]
# tune2fs -l /dev/sda | grep Block
Block count: 488378646
Block size: 4096
Blocks per group: 32768
[/html]

これよりBlock sizeが4096と分かりましたので、該当のブロック番号を求めましょう。
2063521237 × 512 ÷ 4096 = 257940154.625
端数は切り捨ててブロック番号は257940154が求められました。
では実際に潰す作業に入ります。

[html]
# dd if=/dev/zero of=/dev/sda bs=4096 count=1 seek=257940154
1+0 レコード入力
1+0 レコード出力
4096 バイト (4.1 kB) コピーされました、 0.000574828 秒、 7.1 MB/秒
# sync
[/html]

最後のsyncまででワンセットです。
では、再度Current_Pending_Sectorの値を見てみましょう。

[html]
# smartctl -a /dev/sda
.....(略)
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
197 Current_Pending_Sector  0x0032   200   200   000    Old_age   Always       -       10
.....(略)
[/html]

先ほど11だったものが10に減りました。
あと10回繰り返せば無事に0になります。
最終的にselftestにて

[html]
# smartctl -l selftest /dev/sda
smartctl 6.4 2014-10-07 r4002 [i686-linux-3.16.0-4-686-pae] (local build)
Copyright (C) 2002-14, Bruce Allen, Christian Franke,
www.smartmontools.org
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%     20372         -
# 2  Extended offline    Completed: read failure       90%     20372         3739365679
# 3  Extended offline    Completed: read failure       90%     20372         3624092793
# 4  Extended offline    Completed: read failure       90%     20372         3426810975
# 5  Extended offline    Completed: read failure       90%     20372         3164456058
......(略)
[/html]

Completed without errorとなれば完了です。

linux,PC,健忘録

Posted by ysn