mdadm

raid管理ユーティリティ。入っていない場合はmdadmをいれてください。

raidを作成する

まずパーティションID「fd」でパーティションを作成しておくと良い。

2デバイスでraid1(ミラー)を構成する例(ここでは/dev/sdb1と/dev/sdc1を束ねる)

mdadm --create /dev/md0 --level=raid1 --raid-devices=2 /dev/sdb1 /dev/sdc1

うまく構成できればこうなっているはず

# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdc1[1] sdb1[0]
      1044096 blocks [2/2] [UU]
      [===================>.]  resync = 99.9% (1044032/1044096) finish=0.0min sp
eed=94912K/sec

/dev/md0にファイルシステムを作成し、マウントすれば基本的には使用開始できます。

# mke2fs -j /dev/md0 
# tune2fs -r0 /dev/md0
# mount /dev/md0 /mnt 

再起動してraidが自動復帰できるかみてみる

これは大概の場合できます。(このようにして作ったraidは)設定ファイルは必要ありません スーパーブロックに書き込まれるのでその情報を元に起動時にスタートされます

raidを復元する

復元はそれが出来るraidレベルでないともちろん出来ない。ここではraid1のミラーの1つが壊れた事を前提に記述する

一番簡単なのはディスクの電源を入れずに片肺で動かす事。/dev/sd{b,c}1で動いているraidの電源を止めるとする。

# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb1[1]
      1044096 blocks [2/1] [_U]

unused devices: <none>

raidがうまく構成されていない状況だとこのように2のうち1つが動いていないという情報がmdstatに記される。ここで新たな同一ブロックディスクに換装したとする。(SCSI IDの関係で/dev/sdb1が空ディスク。/dev/sdc1のみ稼動している状態となった)

# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdc1[1]
      1044096 blocks [2/1] [_U]

unused devices: <none>

この種の問題は、基本的に–addとしてhotaddすればOK

# mdadm --add /dev/md0 /dev/sdb1
mdadm: added /dev/sdb1

# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb1[0] sdc1[1]
      1044096 blocks [2/2] [UU]

unused devices: <none>

mdadmコマンド逆引きリファレンス

mdを構成するディスクのスーパーブロックを表示する

mdadm –examine /dev/sdb1などする

# mdadm --examine /dev/sdb1
/dev/sdb1:
          Magic : a92b4efc
        Version : 00.90.00
           UUID : 33f2d2f7:a776170a:c230666b:5103eba0
  Creation Time : Tue Sep 16 22:40:40 2008
     Raid Level : raid1
    Device Size : 1044096 (1019.80 MiB 1069.15 MB)
     Array Size : 1044096 (1019.80 MiB 1069.15 MB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0

    Update Time : Tue Sep 16 22:44:35 2008
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
       Checksum : 2977ea01 - correct
         Events : 0.4


      Number   Major   Minor   RaidDevice State
this     0       8       17        0      active sync   /dev/sdb1

   0     0       8       17        0      active sync   /dev/sdb1
   1     1       8       33        1      active sync   /dev/sdc1

破壊されたraidにディスクを追加する

$ cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdc1[0] sdd1[1]
      312568576 blocks [2/2] [UU]

md2 : active raid1 sde1[0]
      312568576 blocks [2/1] [U_]

md0 : active raid1 sdb1[0] sda1[1]
      976759936 blocks [2/2] [UU]

/dev/md2がdownしている。ここに/dev/sdf1を追加する例(raidtoolsで言うところのhotadd)

$ sudo mdadm --add -v /dev/md2 /dev/sdf1
mdadm: re-added /dev/sdf1

$ cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sdc1[0] sdd1[1]
      312568576 blocks [2/2] [UU]

md2 : active raid1 sdf1[1] sde1[0]
      312568576 blocks [2/1] [U_]
      [>....................]  recovery =  0.0% (125312/312568576) finish=830.5min speed=6265K/sec

md0 : active raid1 sdb1[0] sda1[1]
      976759936 blocks [2/2] [UU]

なぜかreadonlyになる場合

$ cat /proc/mdstat
Personalities : [raid1]
md3 : active (auto-read-only) raid1 sda1[0] sdb1[1]
      976759936 blocks [2/2] [UU]

md4 : active (auto-read-only) raid1 sde1[0] sdf1[1]
      1465135936 blocks [2/2] [UU]

md0 : active (auto-read-only) raid1 sdd1[0] sdc1[1]
      976759936 blocks [2/2] [UU]

unused devices: <none>

とかなる時があります。どうやらmountしてない状態で放置してるとなる?

よくわからないけどmdadmに–readwriteというオプションがあるのでそれで復帰する事は出来ますし、(rwで)mountすると自動的に復帰します

raidのsuperblockを破壊(消去)する

必要なくなったディスクのsuperblockを破壊するには以下のように行います

# mdadm --stop /dev/md1
mdadm: stopped /dev/md1
# mdadm --misc --zero-superblock /dev/sde1
# mdadm --examine /dev/sde1
mdadm: No md superblock detected on /dev/sde1.

要するに–zero-superblockがキモ。

これで/dev/sde1のraid情報は失われたので、相方が存在してもつがいにはなりません。

raidのディスクを別マシンに移動する

こんな具合でひっつけるとする

# fdisk -l -u /dev/sd{b,c}

Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x78336a53

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1              63  1953520064   976760001   fd  Linux raid autodetect

Disk /dev/sdc: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders, total 1953525168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1              63  1953520064   976760001   fd  Linux raid autodetect


# mount
/dev/sda1 on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/dev/mapper/vg1-data on /data type ext4 (rw)

mdadmが入っていなければ何もおきない(当然)なので、入れる。

# apt-get install mdadm
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の特別パッケージがインストールされます:
  exim4-base exim4-config exim4-daemon-light heirloom-mailx psmisc
提案パッケージ:
  mail-reader eximon4 exim4-doc-html exim4-doc-info spf-tools-perl swaks exim4
  mail-transport-agent
推奨パッケージ:
  mailx
以下のパッケージが新たにインストールされます:
  exim4-base exim4-config exim4-daemon-light heirloom-mailx mdadm psmisc
アップグレード: 0 個、新規インストール: 6 個、削除: 0 個、保留: 0 個。
2,981 kB のアーカイブを取得する必要があります。
この操作後に追加で 6,779 kB のディスク容量が消費されます。
続行しますか [Y/n]?

すると

Starting MD monitoring service: mdadm --monitor.
Assembling MD array md0...done (started [2/2]).
Generating udev events for MD arrays...done.

とかで勝手にraidが復帰するはず。ロンモチ、superblockが書かれている場合に限るので、古いraidtoolsとかで組んである場合はちょっと手間が必要かとは思うが…

# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[0] sdc1[1]
      976759936 blocks [2/2] [UU]

unused devices: <none>
mdadm.txt · 最終更新: 2016/09/29 17:19 by admin
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0