遠い目日記 このページをアンテナに追加

2012-05-06

[] 3TBの大容量HDDでXenserver6をraid1化する。(v6.0.2) 12:59  3TBの大容量HDDでXenserver6をraid1化する。(v6.0.2) - 遠い目日記 を含むブックマーク  3TBの大容量HDDでXenserver6をraid1化する。(v6.0.2) - 遠い目日記 のブックマークコメント

・参考URL

http://blog.codeaddict.org/?p=5#

http://pastebin.com/psaWg7QK#

http://orangesooda.com/centos_redhat/2009/05/xenserverraid1.html

・前提

XenserverはGPT形式でインストールされる。

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

パーティションを作ったのでとりあえず一度reboot

再起動後、RAID1を/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さんコメント参考に修正

sionosiono 2012/07/09 20:01 はじめまして、こんにちは。

この記事を参考にさせてもらって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
ですが、これは明らかに要らなそうですが、コピペで編集してて消すの忘れたという感じでしょうか?

とりあえず気になったのはこんなところで、あとはこの手順で全く問題ありませんでしたので、ご報告させて頂きます。

faiboufaibou 2012/07/12 13:46 >>sionoさん
コメントありがとうございます!ご指摘の件ですがコピーは確かにいらないですね^^;
最後のほうのコマンドもつぎはぎ編集の消し忘れでした。すみません。
記事のほうも修正したいと思います。動作のご報告ありがとうございました。

sionosiono 2012/07/12 19:34 修正ありがとうございます。
そして、せっかく修正頂いたところですみません、もう1点思い出しました。(^ ^;
sgdiskでパーティションを作成した後は、即座に/dev/以下にも反映されるようで、
特に再起動しなくても問題ないようでした。
それではよろしくお願いいたします。

faiboufaibou 2012/07/13 14:44 >>sionoさん
コメありがとうございます(^0^)/
sgdisk後は再起動しなくても大丈夫でしたか。
一応、お約束的な面もありますので念のために入れたままにしておきますね。

sionosiono 2012/07/23 13:01 sgdiskの件、了解です。重ね重ねありがとうございます。(^ ^)

2011-11-06

[]自宅サーバーのRAID1HDDの片方が壊れたので復旧。 22:26 自宅サーバーのRAID1HDDの片方が壊れたので復旧。 - 遠い目日記 を含むブックマーク 自宅サーバーの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-08-29

[]ヘッダ検索パスなどに自身のプロジェクトルートの定数を使うには 22:57 ヘッダ検索パスなどに自身のプロジェクトルートの定数を使うには - 遠い目日記 を含むブックマーク ヘッダ検索パスなどに自身のプロジェクトルートの定数を使うには - 遠い目日記 のブックマークコメント

$(SRCROOT)/xxxxx/というふうに、$(SRCROOT)を使うと良い。

2010-06-06

[]プロジェクタにヘッダ検索を追加する場合(libxmlとか) 22:41 プロジェクタにヘッダ検索を追加する場合(libxmlとか) - 遠い目日記 を含むブックマーク プロジェクタにヘッダ検索を追加する場合(libxmlとか) - 遠い目日記 のブックマークコメント

  1. プロジェクト>アクティブターゲット(xxxx)を編集
  2. ビルド>検索欄に「ヘッダ検索」で、パスの入力を行う
  3. そこで例えばlibxml2の場合だと「${SDKROOT}/usr/include/libxml2」というふうに変数を使って設定した方が使い易いし、ハマらない。

2010-06-03

[][][] S3のお安い版・RRS(Reduced Redundancy Storage)を使う方法(修正版) 11:53  S3のお安い版・RRS(Reduced Redundancy Storage)を使う方法(修正版) - 遠い目日記 を含むブックマーク  S3のお安い版・RRS(Reduced Redundancy Storage)を使う方法(修正版) - 遠い目日記 のブックマークコメント

普通にS3を使うと永続性99.999999999%を満たすように設計されていますが、

これを99.99%まで落とす代わりにリーズナブルなRRS(Reduced Redundancy Storage)が出ました。

詳しい金額については以下ページの真ん中ぐらいに記載されています。

http://aws.amazon.com/s3/

少しだけ抜粋すると以下のような金額設定。

・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