このリマッピングはHDD内部のファームウェアで行われ、OSは一旦リマップされたセクタを意識することはないが、SMARTで報告されるのはセクタの読み込みエラーで、エラーを起こした不良セクタをリマップするためにはそのセクタに書き込む必要がある。エラーがOSのインストール時などに発生すれば自動的に書込み→読出しエラー→リマップとなるが、インストール後にデータ領域でないセクタで発生(検出)した場合は、そのセクタに書込みが行われるまで読出しエラーが継続して報告される。
読出しエラーが検出されたセクタに書き込めばそのセクタはリマップされるが、当然のことながらそのセクタに記録されていた情報を回復することはできない。したがって、一般的にはそのセクタを含むデータをバックアップから回復することになるが、セクタ番号からファイルを特定するのは非常に困難で、また不良セクタがファイルデータではないメタデータの場合はファイルシステムその物が損傷していることになり、お手上げである。
つまり、HDDのセクタレベルの冗長性を生かすためには上位レベルの冗長性が必要ということになり、だからRAIDが必要、という結論になる。
ここでは、Linux上でRAID1(ミラリング)の一台のHDDの不良セクタをリマップして正常に見せる手順を述べる。
まず、smartctlで過去のセルフテストの結果を表示する 。
h@spice:~$ sudo smartctl -l selftest /dev/sdb smartctl 5.40 2010-10-16 r3189 [i386-redhat-linux-gnu] (local build) Copyright (C) 2002-10 by Bruce Allen, 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 Short offline Completed: read failure 60% 145 262845373 # 2 Short offline Completed: read failure 60% 136 262845373 # 3 Short offline Completed: read failure 60% 130 262845373 # 4 Short offline Completed: read failure 60% 129 262845373 # 5 Short offline Completed: read failure 60% 129 262845373 # 6 Short offline Completed: read failure 60% 129 262845373 # 7 Short offline Completed: read failure 60% 129 262845373 # 8 Short offline Completed: read failure 60% 129 262845373 (以下略) |
念のためsmartctlでセルフテストをもう一度実行する 。HDDはオンラインのままでよい。
h@spice:~$ sudo smartcl -t long /dev/sdb smartctl 5.40 2010-10-16 r3189 [i386-redhat-linux-gnu] (local build) Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net === START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION === Sending command: "Execute SMART Short self-test routine immediately in off-line mode". Drive command "Execute SMART Short self-test routine immediately in off-line mode" successful. Testing has begun. Please wait 219 minutes for test to complete. Test will complete after Fri May 31 10:43:36 2013 Use smartctl -X to abort test. |
テストが終了すると結果に新しいエントリが追加されるので、「LifeTime」が更新されていることを確認する
h@spice:~$ sudo smartctl -l selftest /dev/sdb smartctl 5.40 2010-10-16 r3189 [i386-redhat-linux-gnu] (local build) Copyright (C) 2002-10 by Bruce Allen, 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 60% 155 262845373 # 2 Short offline Completed: read failure 60% 145 262845373 # 3 Short offline Completed: read failure 60% 136 262845373 # 4 Short offline Completed: read failure 60% 130 262845373 # 5 Short offline Completed: read failure 60% 129 262845373 # 6 Short offline Completed: read failure 60% 129 262845373 # 7 Short offline Completed: read failure 60% 129 262845373 # 8 Short offline Completed: read failure 60% 129 262845373 (以下略) |
修復のため、不良セクタのあるディスクをRAIDとスワップからはずす。hdparmはマウント中のドライブでも動作するようだが、一応念のため。
h@spice:~$ cat /proc/mdstat Personalities : [raid1] [raid6] [raid5] [raid4] md1 : active raid1 sda2[0] sdb2[1] 38398908 blocks super 1.1 [2/2] [UU] bitmap: 1/1 pages [4KB], 65536KB chunk md0 : active raid1 sda3[0] sdb3[1] 204788 blocks super 1.0 [2/2] [UU] unused devices: <none> h@spice:~$ sudo mdadm /dev/md1 --fail /dev/sdb2 h@spice:~$ sudo mdadm /dev/md1 --remove /dev/sdb2 h@spice:~$ sudo mdadm /dev/md0 --fail /dev/sdb3 h@spice:~$ sudo mdadm /dev/md0 --remove /dev/sdb3 h@spice:~$ sudo swapoff /dev/sdb1 h@spice:~$ cat /proc/mdstat Personalities : [raid1] [raid6] [raid5] [raid4] md1 : active raid1 sda2[0] 38398908 blocks super 1.1 [2/1] [U_] bitmap: 1/1 pages [4KB], 65536KB chunk md0 : active raid1 sda3[0] 204788 blocks super 1.0 [2/1] [U_] unused devices: <none> |
さて、一番怖い瞬間を迎える。hdparmを使って直接当該セクタにゼロを書き込んで 強制的にリマップさせる。
h@spice:~$ sudo hdparm --write-sector 262845373 --yes-i-know-what-i-am-doing /dev/sdb /dev/sdb: re-writing sector 262845373: succeeded |
修復ができたら、再びsmartctlでセルフテスト(shortでよい)を実行してその結果を表示させ、すべての不良セクタがリマップされるまで繰り返す。
不良セクタが見えなくなったら、外してあったパーティションをRAIDとスワップに戻す。
h@spice:~$ sudo mdadm /dev/md0 --add /dev/sdb3 h@spice:~$ sudo mdadm /dev/md1 --add /dev/sdb2 h@spice:~$ sudo swapon -a |
次回は、全くアクセスできなくなったRAID中の不良HDDを新品と交換する方法を…。
0 件のコメント:
コメントを投稿