2012-05-06
■[Xenserver] 3TBの大容量HDDでXenserver6をraid1化する。(v6.0.2)

・参考URL
http://blog.codeaddict.org/?p=5#
http://orangesooda.com/centos_redhat/2009/05/xenserverraid1.html
・前提
fdiskはMBR形式しか扱えないため、GPT形式に対応しているgdiskを利用する。(MBR形式は2TB以上は認識しない)
GPTとは?>> http://plaza.rakuten.co.jp/bluearth/diary/20100115/
/dev/sdaは最低限しか扱わないようにして、/dev/sdbだけでとりあえず起動出来る形にしておき
最後にArrayに追加する方法にしている。
試行錯誤してやって最後にまとめたので間違いがあるかも。上の参考URLに書いてある事を混ぜながらやったので
出来ない場合はそちらを参考にしてください。責任は取れませんので^^;
・使用HDD
/dev/sda … 3TB HDDその1(こちらにXenserverがインストールされている)
/dev/sdb … 3TB HDDその2(空っぽ)
はじめに/dev/sdaと/dev/sdbのパーティションを同じ構成にする
# gdisk -l /dev/sda Number Start (sector) End (sector) Size Code Name 1 2048 8388641 4.0 GiB 0700 2 8390656 16777249 4.0 GiB 0700 3 16779264 5860533134 2.7 TiB 8E00 # sgdisk --zap-all /dev/sdb # sgdisk --mbrtogpt --clear /dev/sdb # sgdisk --new=1:34:8388641 /dev/sdb # sgdisk --typecode=1:fd00 /dev/sdb # sgdisk --attributes=1:set:2 /dev/sdb # sgdisk --new=2:8388642:16777249 /dev/sdb # sgdisk --typecode=2:fd00 /dev/sdb # sgdisk --new=3:16777250:5860533134 /dev/sdb # sgdisk --typecode=3:fd00 /dev/sdb
# mknod /dev/md0 b 9 0 # mknod /dev/md1 b 9 1 # mknod /dev/md2 b 9 2 # mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb1 # mdadm --create /dev/md1 --level=1 --raid-devices=2 missing /dev/sdb2 # mdadm --create /dev/md2 --level=1 --raid-devices=2 missing /dev/sdb3 # mdadm --grow /dev/md0 -b internal # mdadm --grow /dev/md1 -b internal # mdadm --grow /dev/md2 -b internal
ボリュームグループ(VG)に/dev/md2 を追加する
# pvcreate /dev/md2 # vgextend VG_<TAB> /dev/md2 # pvmove /dev/sda3 /dev/md2 sda3からVGを削除する # vgreduce VG_<TAB> /dev/sda3 # pvremove /dev/sda3
/dev/sda1の中身を/dev/md0にコピーする
# mkfs.ext3 /dev/md0 # mount /dev/md0 /mnt # cd / # cp -axR . /mnt
ブートイメージを作成する
# mkdir /mnt/root/initrd # cd /mnt/root/initrd # zcat /mnt/boot/initrd-`uname -r`.img | cpio -i # ls /lib/modules/`uname -r`/kernel/drivers/md/raid* # cp /lib/modules/`uname -r`/kernel/drivers/md/raid1.ko lib/ # vi init "echo Waiting for driver initialization." の前の行に次を追加。 echo "Loading raid1.ko module" insmod /lib/raid1.ko "resume /var/swap/swap.001"の後の行に次を追加。 echo Running raidautorun raidautorun /dev/md0 raidautorun /dev/md1 raidautorun /dev/md2 その次の行の "・・・sda1" を "・・・md0" に直す。 # find . -print | cpio -o -Hnewc | gzip -c > /mnt/boot/initrd-`uname -r`.img# cp -f /mnt/boot/extlinux.conf /boot/extlinux.conf# vi /mnt/etc/fstab 一番上の行のLABELを以下に変更 /dev/md0 / ext3 defaults 1 1 # vi /mnt/boot/extlinux.conf 5つほど「root=LABEL=**********」という箇所があるので全て「root=/dev/md0」に変更する /dev/sdbのマスターブートレコードにextlinuxを書き込む # cat /mnt/usr/share/syslinux/gptmbr.bin > /dev/sdb # cd /mnt # extlinux --raid -i boot/
再起動するとmd2が外れたり不安定なのでこの段階でmdadmの設定ファイルを書きだしておくとよい
# mdadm --detail --scan > /mnt/etc/mdadm.conf /dev/md0をアンマウント # cd # umount /dev/md0 # sync 最後に再起動 # reboot
BIOSから2つ目のHDD(/dev/sdb)から起動してみて、無事起動すれば成功。ロゴで止まったりすれば失敗なので
ブート関連を再度チェック。私のM/Bの場合、起動時にF10を押すとBOOT選択画面に遷移。
無事起動した後は/dev/sdaをRaid1に参加させる。
# mkdir root/initrd # cd /root/initrd # find . -print | cpio -o -Hnewc | gzip -c > /mnt/boot/initrd-`uname -r`.img# sgdisk --typecode=1:fd00 /dev/sda # sgdisk --typecode=2:fd00 /dev/sda # sgdisk --typecode=3:fd00 /dev/sda # mdadm -a /dev/md0 /dev/sda1 # mdadm -a /dev/md1 /dev/sda2 # mdadm -a /dev/md2 /dev/sda3 進捗確認(CTRL+Cで終了) # watch -n 1 cat /proc/mdstat
[2012/07/12]sionoさんコメント参考に修正
2011-11-06
■[Linux]自宅サーバーのRAID1HDDの片方が壊れたので復旧。

備忘録としてコマンドログを。環境によってデバイス名や数値が違ってくるのでこのままやるのはとても危険なので注意。
640GBだったけど、今の時代はそんなHDDが簡単に手に入らない上にコスパが悪いので1TBで代用。
[root@localhost ~]# fdisk -l Disk /dev/sda: 640.1 GB, 640135028736 bytes 255 heads, 63 sectors/track, 77825 cylinders Units = シリンダ数 of 16065 * 512 = 8225280 bytes デバイス Boot Start End Blocks Id System /dev/sda1 * 1 13 104391 fd Linux raid 自動検出 /dev/sda2 14 77695 623980665 fd Linux raid 自動検出 /dev/sda3 77696 77825 1044225 fd Linux raid 自動検出 Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes 255 heads, 63 sectors/track, 121601 cylinders Units = シリンダ数 of 16065 * 512 = 8225280 bytes ディスク /dev/sdb は正常な領域テーブルを含んでいません Disk /dev/md2: 638.9 GB, 638956077056 bytes 2 heads, 4 sectors/track, 155995136 cylinders Units = シリンダ数 of 8 * 512 = 4096 bytes ディスク /dev/md2 は正常な領域テーブルを含んでいません Disk /dev/md1: 1069 MB, 1069219840 bytes 2 heads, 4 sectors/track, 261040 cylinders Units = シリンダ数 of 8 * 512 = 4096 bytes ディスク /dev/md1 は正常な領域テーブルを含んでいません Disk /dev/md0: 106 MB, 106823680 bytes 2 heads, 4 sectors/track, 26080 cylinders Units = シリンダ数 of 8 * 512 = 4096 bytes ディスク /dev/md0 は正常な領域テーブルを含んでいません [root@localhost ~]# cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sda1[0] 104320 blocks [2/1] [U_] md1 : active raid1 sda3[0] 1044160 blocks [2/1] [U_] md2 : active raid1 sda2[0] 623980544 blocks [2/1] [U_] unused devices: <none> [root@localhost ~]# fdisk -l /dev/sdb Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes 255 heads, 63 sectors/track, 121601 cylinders Units = シリンダ数 of 16065 * 512 = 8225280 bytes ディスク /dev/sdb は正常な領域テーブルを含んでいません [root@localhost ~]# fdisk /dev/sdb デバイスは正常な DOS 領域テーブルも、Sun, SGI や OSF ディスクラベルも 含んでいません 新たに DOS ディスクラベルを作成します。あなたが書き込みを決定するまで、変更は メモリ内だけに残します。その後はもちろん以前の内容は修復不可能になります。 このディスクのシリンダ数は 121601 に設定されています。 間違いではないのですが、1024 を超えているため、以下の場合 に問題を生じうる事を確認しましょう: 1) ブート時に実行するソフトウェア (例. バージョンが古い LILO) 2) 別の OS のブートやパーティション作成ソフト (例. DOS FDISK, OS/2 FDISK) 警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって 正常になります コマンド (m でヘルプ): n コマンドアクション e 拡張 p 基本領域 (1-4) p 領域番号 (1-4): 1 最初 シリンダ (1-121601, default 1): 1 終点 シリンダ または +サイズ または +サイズM または +サイズK (1-121601, default 121601): 13 コマンド (m でヘルプ): n コマンドアクション e 拡張 p 基本領域 (1-4) p 領域番号 (1-4): 2 最初 シリンダ (14-121601, default 14): 14 終点 シリンダ または +サイズ または +サイズM または +サイズK (14-121601, default 121601): 77695 コマンド (m でヘルプ): n コマンドアクション e 拡張 p 基本領域 (1-4) p 領域番号 (1-4): 3 最初 シリンダ (77696-121601, default 77696): 77696 終点 シリンダ または +サイズ または +サイズM または +サイズK (77696-121601, default 121601): 77825 コマンド (m でヘルプ): t 領域番号 (1-4): 1 16進数コード (L コマンドでコードリスト表示): fd 領域のシステムタイプを 1 から fd (Linux raid 自動検出) に変更しました コマンド (m でヘルプ): 2 2: 不明なコマンド コマンドの動作 a ブート可能フラグをつける b bsd ディスクラベルを編集する c dos 互換フラグをつける d 領域を削除する l 既知の領域タイプをリスト表示する m このメニューを表示する n 新たに領域を作成する o 新たに空の DOS 領域テーブルを作成する p 領域テーブルを表示する q 変更を保存せずに終了する s 空の Sun ディスクラベルを作成する t 領域のシステム ID を変更する u 表示/項目ユニットを変更する v 領域テーブルを照合する w テーブルをディスクに書き込み、終了する x 特別な機能 (エキスパート専用) コマンド (m でヘルプ): t 領域番号 (1-4): 2 16進数コード (L コマンドでコードリスト表示): fd 領域のシステムタイプを 2 から fd (Linux raid 自動検出) に変更しました コマンド (m でヘルプ): t 領域番号 (1-4): 3 16進数コード (L コマンドでコードリスト表示): fd 領域のシステムタイプを 3 から fd (Linux raid 自動検出) に変更しました コマンド (m でヘルプ): w 領域テーブルは交換されました! ioctl() を呼び出して領域テーブルを再読込みします。 ディスクを同期させます。 [root@localhost ~]# fdisk -l /dev/sdb Disk /dev/sdb: 1000.2 GB, 1000204886016 bytes 255 heads, 63 sectors/track, 121601 cylinders Units = シリンダ数 of 16065 * 512 = 8225280 bytes デバイス Boot Start End Blocks Id System /dev/sdb1 1 13 104391 fd Linux raid 自動検出 /dev/sdb2 14 77695 623980665 fd Linux raid 自動検出 /dev/sdb3 77696 77825 1044225 fd Linux raid 自動検出 [root@localhost ~]# cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sda1[0] 104320 blocks [2/1] [U_] md1 : active raid1 sda3[0] 1044160 blocks [2/1] [U_] md2 : active raid1 sda2[0] 623980544 blocks [2/1] [U_] unused devices: <none> [root@localhost ~]# mdadm /dev/md0 --add /dev/sdb1 mdadm: added /dev/sdb1 [root@localhost ~]# mdadm /dev/md1 --add /dev/sdb3 mdadm: added /dev/sdb3 [root@localhost ~]# mdadm /dev/md2 --add /dev/sdb2 mdadm: added /dev/sdb2 [root@localhost ~]# cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdb1[1] sda1[0] 104320 blocks [2/2] [UU] md1 : active raid1 sdb3[1] sda3[0] 1044160 blocks [2/2] [UU] md2 : active raid1 sdb2[2] sda2[0] 623980544 blocks [2/1] [U_] [>....................] recovery = 0.2% (1844032/623980544) finish=538.8min speed=19243K/sec unused devices: <none>
同期が完了すれば作業完了。
[追記]
同期完了後、sdbにはgrubが入っていないのでsdaがイカれるとにっちもさっちもいかなくなるので、インストールしておく。
参考記事:https://www.miraclelinux.com/technet/faq/data/00080.html
2010-06-03
■[Amazon EC2][AWS][S3] S3のお安い版・RRS(Reduced Redundancy Storage)を使う方法(修正版)

普通にS3を使うと永続性99.999999999%を満たすように設計されていますが、
これを99.99%まで落とす代わりにリーズナブルなRRS(Reduced Redundancy Storage)が出ました。
詳しい金額については以下ページの真ん中ぐらいに記載されています。
少しだけ抜粋すると以下のような金額設定。
・S3
最初の50TBまでは$0.150 per GB
・S3(RRS)
最初の50TBまでは$0.100 per GB
これ以降の料金については上記サイトをご確認ください。
■どうやって使うん?
以下に書かれています。
http://aws.amazon.com/s3/faqs/#How_do_I_specify_that_I_want_to_store_my_data_using_RRS
意訳すると、
S3のすべてのオブジェクトはストレージクラスの設定を持っています。 デフォルトの設定は「STANDARD」です。PUTリクエストを送るときに「REDUCED_REDUNDANCY」を明示すれば使えるよ。
って事みたいです。
具体的には「http://docs.amazonwebservices.com/AmazonS3/latest/index.html?DataDurability.html」に例が載っています。
「x-amz-storage-class: REDUCED_REDUNDANCY」をくっつけて送れってことですかね。
では、コマンドラインで行ってみましょう!
とりあえず立ち上げたインスタンス(サーバー)にログインします。
例で利用しているのは、RightScaleのCentos5.4のAMIです。
ちなみにs3cmdに対する設定を何もしていないことを想定してます。
rootでログイン。 root# export S3CONF=/home/s3sync root# cp /home/s3sync/s3config.yml.example /home/s3sync/s3config.yml root# vi /home/s3sync/s3config.yml
・s3config.yml-----------------
aws_access_key_id: xxxxxxxxxxxxxxxxxxxxxxx ←AWSのaccesskey
aws_secret_access_key: xxxxxxxxxxxxxxxxxxxxxxx ←AWSのsecretkey
ssl_cert_dir: /home/user/s3sync/certs ←そのままで良い
-------------------------------
保存。accesskeyやsecretkeyってなんぞ?って人は
http://aws-portal.amazon.com/gp/aws/developer/account/index.html?action=access-key
へアクセス。accesskeyはモロに出てます。secretkeyはshowを押すと出てきます。
では次にバケット作ります。バケットとはS3に自分用の場所を作ると思ってください。
root# s3cmd createbucket bucket_test_xxxx ←bucket_test_xxxxは好きなバケット名。
バケット名は他の人とかぶってたら作れません。また既に作っていたらここはスキップしてください。
では次にバケット一覧取得します。
root# s3cmd listbuckets bucket_test_xxxx ← 先ほど作ったバケット名が出れば成功
まずは普通にアップロード。
root# s3cmd put bucket_test_xxxx:hoge.txt /root/hoge.txt
s3cmd put バケット名:アップロード先ファイル名 アップロード元ファイル名(フルパス)
になります。「s3cmd --help」でヘルプが見れます。ここでは/root/hoge.txtをアップロードしてます。
アップロードされたか確認
root# s3cmd list bucket_test_xxxx -------------------- hoge.txt
と出れば成功。
では本題のRRSでアップです!
root# s3cmd put bucket_test_xxxx:hoge.txt /root/hoge.txt x-amz-storage-class:REDUCED_REDUNDANCY
これで完了みたいです…。
ただ本当にRRSで保存されたのか確認方法が分かりません><;
※大事な事ですがS3にファイルを置いておくと料金が発生するので十分注意してください。
アップロードしたファイルを見る方法ですが、以下のURLで見れます。
http://s3.amazonaws.com/バケット名/ファイル名
ただ、普通にアップロードしただけだと権限がないので見れないと思います。
ですので、アップロードする時にx-amz-acl:public-readをつけてください。
このオプションをつけると誰でも見れてしまうので注意が必要です。
root# s3cmd put bucket_test_xxxx:hoge.txt /root/hoge.txt x-amz-storage-cla ss:REDUCED_REDUNDANCY x-amz-acl:public-read
アップロードしたファイルの権限変更はs3cmdでは出来無さそうなので、S3Fox等を使ったほうが良いと思います。もし誰かご存知の方がいらしたら教えてください。
また、S3Fox等のGUIツールでRRSを使う場合ですが、残念ながらまだS3Foxは未対応のようです。
Windowsであれば、以下のS3Browserで使えるみたいですね。
http://s3browser.com/working-with-reduced-redundancy-storage-rrs.php
この記事を参考にさせてもらってXenServer 6.0.2のRAID1化がうまくいきました。
大変有用な情報をありがとうございます!
いくつか気になった点がありましたので、ご報告させて下さい。
まず、
# cp -f /mnt/boot/extlinux.conf /boot/extlinux.conf
は要らないような気がします。この時点ではこの2つのファイルは中身一緒ですので。
実際、これは実行しないでうまくいきました。
あと、最後の方の
# mkdir root/initrd
# cd /root/initrd
# find . -print | cpio -o -Hnewc | gzip -c > /mnt/boot/initrd-`uname -r`.img
ですが、これは明らかに要らなそうですが、コピペで編集してて消すの忘れたという感じでしょうか?
とりあえず気になったのはこんなところで、あとはこの手順で全く問題ありませんでしたので、ご報告させて頂きます。
コメントありがとうございます!ご指摘の件ですがコピーは確かにいらないですね^^;
最後のほうのコマンドもつぎはぎ編集の消し忘れでした。すみません。
記事のほうも修正したいと思います。動作のご報告ありがとうございました。
そして、せっかく修正頂いたところですみません、もう1点思い出しました。(^ ^;
sgdiskでパーティションを作成した後は、即座に/dev/以下にも反映されるようで、
特に再起動しなくても問題ないようでした。
それではよろしくお願いいたします。
コメありがとうございます(^0^)/
sgdisk後は再起動しなくても大丈夫でしたか。
一応、お約束的な面もありますので念のために入れたままにしておきますね。