RAID10構築手順の記録
パーティション準備
以下コマンドを実行して、それぞれにパーティションタイプ0xfdのパーティションを作成する
# fdisk /dev/sdc
# fdisk /dev/sdd
# fdisk /dev/sde
# fdisk /dev/sdf
作成されるパーティションは以下4つ。
/dev/sdc1
/dev/sdd1
/dev/sde1
/dev/sdf1
RAID10作成
dmesgを見るとsdc,sddがひとつのSATAコントローラで認識され、sde,sdfがひとつのSATAコントローラで認識されていた。
RAIDはSATAコントローラをまたいでRAID1を組むようにsdcとsde,sddとsdfのペアにする。
# mdadm --create /dev/md0 -v --raid-devices=4 --level=raid10 /dev/sdc1 /dev/sde1 /dev/sdd1 /dev/sdf1
参考:引数のパーティションの順番とRAIDの構成内容(1,2番目と3,4番目がそれぞれRAID1を構成している)
http://www.23ch.info/test/read.cgi/linux/1168487758/ の 628 より以下引用
628 :login:Penguin:2008/01/30(水) 23:34:24 id:x5QwYMj+
mdのoffsetとnear試しました(冗長性)ディスクは全部4台構成(全て2G)
mdadm --create /dev/md0 --level=raid10 --layout=n2 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
md0のサイズは4G、利用可能率50%
sdb、sdc、sdd、sde1つをVMから見えなくする→問題なし
sdb、sdcをVMから見えなくする→アレイ崩れる
sdb、sddをVMから見えなくする→問題なし
sdb、sdeをVMから見えなくする→問題なし
sdc、sddをVMから見えなくする→問題なし
sdc、sdeをVMから見えなくする→問題なし
sdd、sdeをVMから見えなくする→アレイ崩れる
結果:1台障害は100%問題なし、2台目障害は1/3の確率でアウト
やっぱり1台目と2台目、3台目と4台目でRAID1だったようです
wikiの書き込みから推定するに、下の図のようなレイアウト(左側から1台目、2台目・・・)
1 1 2 2
3 3 4 4
5 5 6 6
7 7 8 8
RAID構築が完了するのを確認する
状態は以下コマンドで確認できる。(完了した状態の出力です)
自分の場合は4時間ほどかかった。
# cat /proc/mdstat
Personalities : [raid10]
md0 : active raid10 sdf1[3] sdd1[2] sde1[1] sdc1[0]
1953519872 blocks 64K chunks 2 near-copies [4/4] [UUUU]
unused devices:
# mdadm --detail --scan
ARRAY /dev/md0 level=raid10 num-devices=4 UUID=9cd90b3f:eaafc5c2:62808126:9f17bf5d
# mdadm --detail /dev/md0
/dev/md0:
Version : 00.90.03
Creation Time : Sun Jun 8 17:48:44 2008
Raid Level : raid10
Array Size : 1953519872 (1863.02 GiB 2000.40 GB)
Device Size : 976759936 (931.51 GiB 1000.20 GB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistentUpdate Time : Sun Jun 8 22:30:37 2008
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0Layout : near=2, far=1
Chunk Size : 64KUUID : 9cd90b3f:eaafc5c2:62808126:9f17bf5d
Events : 0.2Number Major Minor RaidDevice State
0 8 33 0 active sync /dev/sdc1
1 8 65 1 active sync /dev/sde1
2 8 49 2 active sync /dev/sdd1
3 8 81 3 active sync /dev/sdf1
/etc/mdadm.conf 作成
/etc/mdadm.confを作成して編集。
# vim /etc/mdadm.conf
編集内容は以下。
# cat /etc/mdadm.conf
MAILADDR root
DEVICE partitions
次に、mdadm -D --scan の出力結果を末尾に追加。
# mdadm -D --scan >> /etc/mdadm.conf
最終的に以下のようになる。(最後の行は各マシンごとに「mdadm -D --scan」の出力内容により変化する)
# cat /etc/mdadm.conf
MAILADDR root
DEVICE partitions
ARRAY /dev/md0 level=raid10 num-devices=4 UUID=9cd90b3f:eaafc5c2:62808126:9f17bf5d
ここで「DEVICE partitions」がポイントになるらしい。
以下 /proc/partitions を参照して動作するようになるので、RAIDを構成するパーティションが変わってもRAIDを認識してくれる。
「DEVICE /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1」でも動作はするが、RAIDを構成するパーティションが変わった場合にRAIDを認識しなくなる可能性がある。
# cat /proc/partitions
major minor #blocks name8 0 293057352 sda
8 1 293049666 sda1
8 16 8028160 sdb
8 17 200781 sdb1
8 18 6795495 sdb2
8 19 1028160 sdb3
8 32 976762584 sdc
8 33 976760001 sdc1
8 48 976762584 sdd
8 49 976760001 sdd1
8 64 976762584 sde
8 65 976760001 sde1
8 80 976762584 sdf
8 81 976760001 sdf1
9 0 1953519872 md0
RAID10が構成できたのを確認し、/dev/mdをformat
# mkfs -j /dev/md0
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
244203520 inodes, 488379968 blocks
24418998 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
14905 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: doneThis filesystem will be automatically checked every 30 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
/dev/mdをmountして使用
自分はRAIDにLABELを付けて管理してます。
# e2label /dev/md0 /RAID10-4TB
# vim /etc/fstab
で/etc/fstabの末尾に以下を追加
# tail -n1 /etc/fstab
LABEL=/RAID10-4TB /raid10 ext3 defaults 0 2
あとは普通にmountできます。
# mount /raid10
# df
Filesystem 1K-ブロック 使用 使用可 使用% マウント位置
/dev/sdb2 6582636 4679572 1563292 75% /
/dev/sdb1 194442 10644 173759 6% /boot
tmpfs 255432 0 255432 0% /dev/shm
/dev/sda1 288451232 224791336 49007416 83% /usbhdd/20080225-300G
/dev/md0 1922866224 200168 1824990064 1% /raid10
ちなみにこのLinuxはUSBから起動してます。
こんどはこの2TB使って何しようかなー。
最終的には仮想マシン環境にする予定だけど、それまではいろいろ遊んでみるつもり。
gstreamerの勉強
gstreamer はいくつかのオブジェクトを繋げてデータを処理していく仕組みになっている。
この仕組みは gst-launch コマンドで確認ができる。
参考:http://opentechpress.jp/desktop/03/06/16/1621207.shtml
たとえば、以下のコマンドでは
1.filesrc で mp3 ファイルデータを読み込み
2.mad で mp3 をデコードして
3.alsasink で音をALSAで鳴らす
という仕組みになっている。
$ gst-launch filesrc location="sample.mp3" ! mad ! alsasink
より直感的には gst-editor というものが存在し、DirectXのフィルタエディタ(だっけ?)みたいな感じで線で繋いでいくことができる。
http://gstreamer.freedesktop.org/modules/gst-editor.html
で、やってみたのが以下画像なんだけど、Ubuntu 7.10 用のパッケージは見つからず、7.04 向けのパッケージをコンパイルしようとしても gstreamer-0.8.0 に依存してるらしく、gstreamer-0.10 で無理やりコンパイルしようとしても
caps-tree.c:228: error: 'GstElementFactory' has no member named 'padtemplates'
とか怒られるので、仕方なく gstreamer-0.8.0 を入れたところ、インストールできたのはいいが、音が鳴らない。。。
何か間違ったんだろうか。