CentOSなどRHEL系では毎週日曜日にcronでraid-checkが実行されます。
負荷が高い処理ですので、cron実施時間を状況に合わせて設定します。
さて、通常ならば月曜日には完了しているはずのraid-checkが終わらないサーバー機があった時の対処メモです。
RAIDの状態確認
# cat /proc/mdstat
Personalities : [raid1]
md126 : active raid1 sda[1] sdb[0]
3907015680 blocks super external:/md0/0 [2/2] [UU]
[=================>...] check = 88.7% (3466662784/3907015812) finish=912469.8min speed=7K/sec
進行状況が88.7%くらいで速度も超遅いので、終わる気配がありません。
もう少し詳しく確認してみます。
# mdadm -D /dev/md126
/dev/md126:
Container : /dev/md0, member 0
Raid Level : raid1
Array Size : 3907015680 (3726.02 GiB 4000.78 GB)
Used Dev Size : 3907015812 (3726.02 GiB 4000.78 GB)
Raid Devices : 2
Total Devices : 2
State : active, checking
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Check Status : 88% complete
UUID : c1184dd6:fb1ce82e:026126c6:d57a635d
Number Major Minor RaidDevice State
1 8 0 0 active sync /dev/sda
0 8 16 1 active sync /dev/sdb
checking状態なのは間違いないです。
とにかくディスクI/Oの負荷が高いので、raid-checkを止めます。
# cat /sys/block/md126/md/sync_action
check
# echo idle > /sys/block/md126/md/sync_action
# cat /sys/block/md126/md/sync_action
idle
これはハードウェアRAIDなので、ソフトウェアRAIDの場合とデバイス指定場所が違います。
再度、確認してみます。
# cat /proc/mdstat
Personalities : [raid1]
md126 : active raid1 sda[1] sdb[0]
3907015680 blocks super external:/md0/0 [2/2] [UU]
raid-checkが止まりました。
もう少し詳しく確認してみます。
# mdadm -D /dev/md126
/dev/md126:
Container : /dev/md0, member 0
Raid Level : raid1
Array Size : 3907015680 (3726.02 GiB 4000.78 GB)
Used Dev Size : 3907015812 (3726.02 GiB 4000.78 GB)
Raid Devices : 2
Total Devices : 2
State : active
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
UUID : c1184dd6:fb1ce82e:026126c6:d57a635d
Number Major Minor RaidDevice State
1 8 0 0 active sync /dev/sda
0 8 16 1 active sync /dev/sdb
checking状態は解消されました。
ログの確認
ハードウェア系はカーネルからログ出力されていますので、確認してみます。
# cat /var/log/messages | grep "I/O error"
kernel: end_request: I/O error, dev sda, sector 6700004992
kernel: end_request: I/O error, dev sda, sector 6700005120
# cat /var/log/messages | grep "media error"
kernel: res 41/40:00:47:f1:61/00:00:9e:01:00/40 Emask 0x409 (media error) <F>
どうやらHDDに不具合がありそうです。
RAIDコントローラーの場合もありますので、断言できませんが。
HDDの診断
HDDの状態確認ツールのsmartctlを使用します。
インストール
# yum instal smartmontools
デバイス確認
# smartctl --scan
/dev/sda -d scsi # /dev/sda, SCSI device
/dev/sdb -d scsi # /dev/sdb, SCSI device
HDDがSMART対応か確認する。
# smartctl /dev/sda -i
=== START OF INFORMATION SECTION ===
...
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
Enableならば利用できます。
ではSMARTの値を確認してみます。
# smartctl /dev/sda -A
=== 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 0x002f 198 198 051 Pre-fail Always - 94849
3 Spin_Up_Time 0x0027 194 194 021 Pre-fail Always - 7291
4 Start_Stop_Count 0x0032 100 100 000 Old_age Always - 6
5 Reallocated_Sector_Ct 0x0033 200 200 140 Pre-fail Always - 0
7 Seek_Error_Rate 0x002e 200 200 000 Old_age Always - 0
9 Power_On_Hours 0x0032 083 083 000 Old_age Always - 13041
10 Spin_Retry_Count 0x0032 100 253 000 Old_age Always - 0
11 Calibration_Retry_Count 0x0032 100 253 000 Old_age Always - 0
12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 6
192 Power-Off_Retract_Count 0x0032 200 200 000 Old_age Always - 5
193 Load_Cycle_Count 0x0032 200 200 000 Old_age Always - 318
194 Temperature_Celsius 0x0022 121 115 000 Old_age Always - 31
196 Reallocated_Event_Count 0x0032 200 200 000 Old_age Always - 0
197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 80
198 Offline_Uncorrectable 0x0030 100 253 000 Old_age Offline - 0
199 UDMA_CRC_Error_Count 0x0032 200 200 000 Old_age Always - 0
200 Multi_Zone_Error_Rate 0x0008 100 253 000 Old_age Offline - 0
問題の値は、Raw_Read_Error_Rate(読み込みエラー)が異常に大きい事で、
(C5)Current_Pending_Sector(代替処理セクタ数)がありますので不良セクタが推測されます。
もう片方のHDDを確認してみます。
# smartctl /dev/sdb -A
=== 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 0x002f 200 200 051 Pre-fail Always - 7701
3 Spin_Up_Time 0x0027 196 196 021 Pre-fail Always - 7158
4 Start_Stop_Count 0x0032 100 100 000 Old_age Always - 6
5 Reallocated_Sector_Ct 0x0033 200 200 140 Pre-fail Always - 0
7 Seek_Error_Rate 0x002e 200 200 000 Old_age Always - 0
9 Power_On_Hours 0x0032 083 083 000 Old_age Always - 13042
10 Spin_Retry_Count 0x0032 100 253 000 Old_age Always - 0
11 Calibration_Retry_Count 0x0032 100 253 000 Old_age Always - 0
12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 6
192 Power-Off_Retract_Count 0x0032 200 200 000 Old_age Always - 5
193 Load_Cycle_Count 0x0032 200 200 000 Old_age Always - 318
194 Temperature_Celsius 0x0022 123 115 000 Old_age Always - 29
196 Reallocated_Event_Count 0x0032 200 200 000 Old_age Always - 0
197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 212
198 Offline_Uncorrectable 0x0030 100 253 000 Old_age Offline - 0
199 UDMA_CRC_Error_Count 0x0032 200 200 000 Old_age Always - 0
200 Multi_Zone_Error_Rate 0x0008 100 253 000 Old_age Offline - 0
(C5)197 Current_Pending_Sector(代替処理セクタ数)が高くやはり不良セクタが推測されます。
Raw_Read_Error_Rate(読み込みエラー)はこちらが少ないのですが本来は0の値です。
正常の場合は以下の通り。
=== 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 0x002f 200 200 051 Pre-fail Always - 0
3 Spin_Up_Time 0x0027 208 201 021 Pre-fail Always - 6583
4 Start_Stop_Count 0x0032 100 100 000 Old_age Always - 13
5 Reallocated_Sector_Ct 0x0033 200 200 140 Pre-fail Always - 0
7 Seek_Error_Rate 0x002e 200 200 000 Old_age Always - 0
9 Power_On_Hours 0x0032 080 080 000 Old_age Always - 15264
10 Spin_Retry_Count 0x0032 100 253 000 Old_age Always - 0
11 Calibration_Retry_Count 0x0032 100 253 000 Old_age Always - 0
12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 13
192 Power-Off_Retract_Count 0x0032 200 200 000 Old_age Always - 11
193 Load_Cycle_Count 0x0032 200 200 000 Old_age Always - 522
194 Temperature_Celsius 0x0022 120 113 000 Old_age Always - 32
196 Reallocated_Event_Count 0x0032 200 200 000 Old_age Always - 0
197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 0
198 Offline_Uncorrectable 0x0030 100 253 000 Old_age Offline - 0
199 UDMA_CRC_Error_Count 0x0032 200 200 000 Old_age Always - 0
200 Multi_Zone_Error_Rate 0x0008 100 253 000 Old_age Offline - 0
この記事を書いている間にHDD(/dev/sda)が逝ってしまったので、状態は以下の様に片側運用になりました。
# cat /proc/mdstat
Personalities : [raid1]
md126 : active raid1 sdb[0]
3907015680 blocks super external:/md0/0 [2/1] [_U]
ユニット番号とUの文字の変化が表示されています。
なお、HDD交換作業では疑似的に故障状態にして同期を停止させますので、表示は同様になります。
HDD交換作業
交換するHDDデバイスを指定して疑似的に故障状態にして同期を停止させます。
# mdadm --fail /dev/md126 /dev/sda
状態を確認します。
# cat /proc/mdstat
Personalities : [raid1]
md126 : active raid1 sdb[0]
3907015680 blocks super external:/md0/0 [2/1] [_U]
md0 : inactive sdb[1](S) sda[0](S)
5544 blocks super external:imsm
同期が停止されて、指定したデバイスsdaが消えてユニット数が減っています。
次にRAID構成からデバイスを外します。
# mdadm --remove /dev/md0 sda
状態を確認します。
# cat /proc/mdstat
Personalities : [raid1]
md126 : active raid1 sdb[0]
3907015680 blocks super external:/md0/0 [2/1] [_U]
md0 : inactive sdb[1](S)
2772 blocks super external:imsm
md0の構成から指定したデバイスsdaが消えています。
ホットスワップ対応であれば、ここで対象HDDを取り外して交換出来ます。
未対応の場合は電源停止します。
今回はハードウェアRAIDコントローラーの場合で、ソフトウェアRAIDの場合は、
構成したパーティションに合わせて対象デバイスを全て外します。
また、swap利用の場合もデバイスを忘れずに解除します。
交換したHDDの同期作業
新しく交換したHDDを取り付けただけではRAID構成は再構築されませんので、
デバイスの同期作業を行います。
容量が2TBまでのHDDならば、旧来のfdisk -lで接続デバイスがリスト表示されます。
それ以上のHDDの場合は、partedコマンドを使用します。
インストール
# yum install parted
接続デバイスの表示
# parted -l
...
/dev/sdb (4001GB)
/dev/sdd (4001GB)
...
外したHDDと同じドライブレターが割り当てられるとは限りません。
今回の場合は同じユニットに接続してもドライブレターが変わりました。
/dev/sda → /dev/sdd
RAID構成に新しいHDDを追加します。
2017/09/15追記
FakeソフトウェアRAIDでLVMで構築でも同様に出来ました。
ハードウェアRAIDの場合はデバイスを追加するだけで再構成されます。
`# mdadm --add /dev/md0 /dev/sdd`
状態を確認します。
````
# cat /proc/mdstat
Personalities : [raid1]
md126 : active raid1 sdd[2] sdb[0]
3907015680 blocks super external:/md0/0 [2/1] [_U]
[>....................] recovery = 0.0% (109568/3907015812) finish=1188.4min speed=54784K/sec
md0 : inactive sdd[0](S) sdb[1](S)
5544 blocks super external:imsm
````
同期作業が開始されています。
パーティション構成情報はハードウェアRAID側で管理されていますので、作業完了までお任せします。