raidctl

RAIDの構成

RAID1をします。 2つのHDDで、fstypeをRAIDにして、同じ構成でパーティション作成。 /etc/raid0.confは以下のようにした。

START array
# numRow numCol numSpare
1 2 0

START disks
/dev/sd1e
/dev/sd2e

START layout
# sectPerSU SUsPerParityUnit SUsPerReconUnit RAID_level
128 1 1 1

START queue
fifo 100

RAID構成開始。

# raidctl -C /etc/raid0.conf raid0
# raidctl -I 100 raid0
# raidctl -iv raid0
Initiating re-write of parity
Parity Re-write status:
  7% |**                                     | ETA:    12:04 \

parity書きこみ完了。 いろいろチェックしてみよう。

# raidctl -p raid0
/dev/raid0d: Parity status: clean
# raidctl -s raid0
Components:
           /dev/sd1e: optimal
           /dev/sd2e: optimal
No spares.
Component label for /dev/sd1e:
   Row: 0 Column: 0 Num Rows: 1 Num Columns: 2
   Version: 2 Serial Number: 100 Mod Counter: 41
   Clean: No Status: 0
   sectPerSU: 128 SUsPerPU: 1 SUsPerRU: 1
   RAID Level: 1  blocksize: 512 numBlocks: 35883264
   Autoconfig: No
   Root partition: No
   Last configured as: raid0
Component label for /dev/sd2e:
   Row: 0 Column: 1 Num Rows: 1 Num Columns: 2
   Version: 2 Serial Number: 100 Mod Counter: 41
   Clean: No Status: 0
   sectPerSU: 128 SUsPerPU: 1 SUsPerRU: 1
   RAID Level: 1  blocksize: 512 numBlocks: 35883264
   Autoconfig: No
   Root partition: No
   Last configured as: raid0
Parity status: clean
Reconstruction is 100% complete.
Parity Re-write is 100% complete.
Copyback is 100% complete.
# raidctl -g /dev/sd1e raid0
Component label for /dev/sd1e:
   Row: 0 Column: 0 Num Rows: 1 Num Columns: 2
   Version: 2 Serial Number: 100 Mod Counter: 43
   Clean: No Status: 0
   sectPerSU: 128 SUsPerPU: 1 SUsPerRU: 1
   RAID Level: 1  blocksize: 512 numBlocks: 35883264
   Autoconfig: No
   Root partition: No
   Last configured as: raid0
# raidctl -g /dev/sd2e raid0
Component label for /dev/sd2e:
   Row: 0 Column: 1 Num Rows: 1 Num Columns: 2
   Version: 2 Serial Number: 100 Mod Counter: 45
   Clean: No Status: 0
   sectPerSU: 128 SUsPerPU: 1 SUsPerRU: 1
   RAID Level: 1  blocksize: 512 numBlocks: 35883264
   Autoconfig: No
   Root partition: No
   Last configured as: raid0

あとは、raid0のdisklabelをお好みで編集すればOK。

RAIDの再構築

再構築のテストのため、failと見せかける。

# raidctl -f /dev/sd1e raid0
# raidctl -s raid0
Components:
           /dev/sd1e: failed
           /dev/sd2e: optimal
No spares.
/dev/sd1e status is: failed.  Skipping label.
Component label for /dev/sd2e:
   Row: 0 Column: 1 Num Rows: 1 Num Columns: 2
   Version: 2 Serial Number: 100 Mod Counter: 74
   Clean: No Status: 0
   sectPerSU: 128 SUsPerPU: 1 SUsPerRU: 1
   RAID Level: 1  blocksize: 512 numBlocks: 35883264
   Autoconfig: No
   Root partition: No
   Last configured as: raid0
Parity status: clean
Reconstruction is 100% complete.
Parity Re-write is 100% complete.
Copyback is 100% complete.

再構築開始。

# raidctl -B raid0
# raidctl -s raid0
Components:
           /dev/sd1e: reconstructing
           /dev/sd2e: optimal
No spares.
/dev/sd1e status is: reconstructing.  Skipping label.
Component label for /dev/sd2e:
   Row: 0 Column: 1 Num Rows: 1 Num Columns: 2
   Version: 2 Serial Number: 100 Mod Counter: 74
   Clean: No Status: 0
   sectPerSU: 128 SUsPerPU: 1 SUsPerRU: 1
   RAID Level: 1  blocksize: 512 numBlocks: 35883264
   Autoconfig: No
   Root partition: No
   Last configured as: raid0
Parity status: clean
Reconstruction is 23% complete.
Parity Re-write is 100% complete.
Copyback is 100% complete.

しばらくすると完了する。

HDDの交換例

RAIDがfailしたのだが、HDDそのものを認識しなくなったことがあったので、 片側のHDDを交換してRAID再構築したときの記録。

# raidctl -s raid0
Components:
           /dev/sd1e: failed
           /dev/sd2e: optimal
No spares.
/dev/sd1e status is: failed.  Skipping label.
Component label for /dev/sd2e:
   Row: 0 Column: 1 Num Rows: 1 Num Columns: 2
   Version: 2 Serial Number: 100 Mod Counter: 145
   Clean: No Status: 0
   sectPerSU: 128 SUsPerPU: 1 SUsPerRU: 1
   RAID Level: 1  blocksize: 512 numBlocks: 35883264
   Autoconfig: No
   Root partition: No
   Last configured as: raid0
Parity status: clean
Reconstruction is 100% complete.
Parity Re-write is 100% complete.
Copyback is 100% complete.

元のHDDは18GBだったが、 交換する新しいHDDは、

Seagate Barracuda 36ES2
ST336938LW
36.9GB(U/160 SCSI)
7200rpm シークタイム8.9ms

である。このうちの18GBを利用して、RAID1を構成することにした。

# mv /etc/raid0.conf /etc/_raid0.conf

として、boot時にRAIDしないようにする。 あと/etc/fstabも修正。 それから、shutdownして、物理的にHDDの交換。 壊れてるHDD(sd1,18GB)をはずして、同じ位置にSCSI IDを合わせてから装着。 そして、boot。

# raidctl -c /etc/_raid0.conf raid0
raidctl: ioctl (RAIDFRAME_CONFIGURE) failed: Invalid argument

-cオプションだとだめらしい。

# raidctl -C /etc/_raid0.conf raid0
# raidctl -s raid0
Components:
           /dev/sd1e: optimal
           /dev/sd2e: optimal
No spares.
Component label for /dev/sd1e:
   Row: 24 Column: 32 Num Rows: 344 Num Columns: 320
   Version: 0 Serial Number: 0 Mod Counter: 149
   Clean: No Status: 0
   sectPerSU: 17941695 SUsPerPU: 17366667 SUsPerRU: 1753
   RAID Level:   blocksize: 8 numBlocks: 5
   Autoconfig: Yes
   Root partition: Yes
   Last configured as: raid256
Component label for /dev/sd2e:
   Row: 0 Column: 1 Num Rows: 1 Num Columns: 2
   Version: 2 Serial Number: 100 Mod Counter: 149
   Clean: No Status: 0
   sectPerSU: 128 SUsPerPU: 1 SUsPerRU: 1
   RAID Level: 1  blocksize: 512 numBlocks: 35883264
   Autoconfig: No
   Root partition: No
   Last configured as: raid0
Parity status: DIRTY
Reconstruction is 100% complete.
Parity Re-write is 100% complete.
Copyback is 100% complete.

sd1eの情報がめちゃくちゃである。

元のシリアル情報を与える。

# raidctl -I 100 raid0
# raidctl -u raid0
# raidctl -c /etc/_raid0.conf  raid0
# raidctl -s raid0
Components:
           /dev/sd1e: optimal
           /dev/sd2e: optimal
No spares.
Component label for /dev/sd1e:
   Row: 0 Column: 0 Num Rows: 1 Num Columns: 2
   Version: 2 Serial Number: 100 Mod Counter: 191
   Clean: No Status: 0
   sectPerSU: 128 SUsPerPU: 1 SUsPerRU: 1
   RAID Level: 1  blocksize: 512 numBlocks: 35883264
   Autoconfig: No
   Root partition: No
   Last configured as: raid0
Component label for /dev/sd2e:
   Row: 0 Column: 1 Num Rows: 1 Num Columns: 2
   Version: 2 Serial Number: 100 Mod Counter: 191
   Clean: No Status: 0
   sectPerSU: 128 SUsPerPU: 1 SUsPerRU: 1
   RAID Level: 1  blocksize: 512 numBlocks: 35883264
   Autoconfig: No
   Root partition: No
   Last configured as: raid0
Parity status: DIRTY
Reconstruction is 100% complete.
Parity Re-write is 100% complete.
Copyback is 100% complete.

OK。 修復開始。

# raidctl -R /dev/sd1e raid0
# raidctl -s raid0
Components:
           /dev/sd1e: reconstructing
           /dev/sd2e: optimal
No spares.
/dev/sd1e status is: reconstructing.  Skipping label.
Component label for /dev/sd2e:
   Row: 0 Column: 1 Num Rows: 1 Num Columns: 2
   Version: 2 Serial Number: 100 Mod Counter: 196
   Clean: No Status: 0
   sectPerSU: 128 SUsPerPU: 1 SUsPerRU: 1
   RAID Level: 1  blocksize: 512 numBlocks: 35883264
   Autoconfig: No
   Root partition: No
   Last configured as: raid0
Parity status: DIRTY
Reconstruction is 0% complete.
Parity Re-write is 100% complete.
Copyback is 100% complete.

これでもう、mountもできる。 ちゃんとデータも見える。

reconstruction終了後、parityの書き戻し。

# raidctl -P raid0

最終状態はこのとおり。

# raidctl -s raid0
Components:
           /dev/sd1e: optimal
           /dev/sd2e: optimal
No spares.
Component label for /dev/sd1e:
   Row: 0 Column: 0 Num Rows: 1 Num Columns: 2
   Version: 2 Serial Number: 100 Mod Counter: 208
   Clean: No Status: 0
   sectPerSU: 128 SUsPerPU: 1 SUsPerRU: 1
   RAID Level: 1  blocksize: 512 numBlocks: 35883264
   Autoconfig: No
   Root partition: No
   Last configured as: raid0
Component label for /dev/sd2e:
   Row: 0 Column: 1 Num Rows: 1 Num Columns: 2
   Version: 2 Serial Number: 100 Mod Counter: 208
   Clean: No Status: 0
   sectPerSU: 128 SUsPerPU: 1 SUsPerRU: 1
   RAID Level: 1  blocksize: 512 numBlocks: 35883264
   Autoconfig: No
   Root partition: No
   Last configured as: raid0
Parity status: clean
Reconstruction is 100% complete.
Parity Re-write is 100% complete.
Copyback is 100% complete.