mysqldump
を使うと大まかにはバックアップが取れるのですが、InnoDB と MyISAM が混ざっていたりするとそれぞれトランザクションが使えたり使えなかったり、色々とややこしいです。そこで、データベースごとに
--single-transaction
を使うか、 --lock-tables
を使うか切り替えて、複数のデータベースを一気にダンプする PowerShell スクリプトを書きました。mysqldump
を使うと大まかにはバックアップが取れるのですが、InnoDB と MyISAM が混ざっていたりするとそれぞれトランザクションが使えたり使えなかったり、色々とややこしいです。--single-transaction
を使うか、 --lock-tables
を使うか切り替えて、複数のデータベースを一気にダンプする PowerShell スクリプトを書きました。Windows Server 2008 R2 を Dell PowerEdge R210 II にインストールする機会があり、私なりに苦労したのでまとめてみます。
本体 | Dell PowerEdge R210 II |
---|---|
RAIDカード | LSI MegaRAID SAS 9260-4i |
HDD | Seagate Cheetah 15k.7 600GB * 2 (RAID1) |
OS | Windows Server 2008 R2 Standard Edition |
リモート管理コンソール | DELL iDRAC6 Enterprise |
起動モード | UEFI |
私にとっては、初 SAS RAID、初 UEFI、初iDRAC6、初 Windows Server 2008 R2 と初体験だらけでした。
LSI MegaRAID は、起動時に WebBIOS という設定画面が使えますが、これが起動しませんでした。 Preboot CLI は使えるんですが、これはドキュメントがなく、ヘルプを出しても説明なしにコマンドの羅列だけ5画面ぐらいスクロールするので、使い物になりません。途方にくれました。
まず、 FreeDOS を使ってファームウェアアップデートを試みました。 USB メモリにインストールする方法 を参考にしました。ただ、Disk Explorer を使うのではなく、 .iso イメージを仮想ドライブとしてマウントすると、中にファイルシステムが見えるのでそれを使いました。 KERNEL.SYS と COMMAND.COM の2つで動きます。 コマンドの出力が長いので、 MORE.EXE も入れておいたほうが無難だと思います。
次にファームウェアのアップデートです。 LSI の Web はナビゲーションがわかりづらいですが、必要なのは最新版のファームウェアと、 DOS 用の MegaCLI です。 USB メモリのルートディレクトリに必要なファイルをコピーします。 更新方法は LSI の Knowledge Base に書かれています。 -NoVerChk はダウングレードの時にしか必要じゃないっぽいので更新のためのオプションは LSI の Knowledge Baseに書かれています。
megacli -adpfwflash -f mr2108fw.rom -a0 megacli -adpfacdefset a0
で大丈夫です。工場出荷時設定に戻さないとシステム起動しなくなるとか怖いこと書いてあるので、従ったほうが無難です。私はうっかり忘れましたが大丈夫でした。ダウングレードの時の話みたいです。ファームウェアを上げれば WebBIOS 使えるようになるかなと思って試したんですけど、だめでした。もし積極的に上げる理由がなければ、触らなくてもいいかもしれません。
で、再起動したら次はアレイの構築です。これも MegaCLI を使って行います。参考にしたのは HWRAID の Wiki です。MegaCLI のリファレンスも参考になります。
まず、
megacli -PDlist -a0
でドライブ一覧を出力出力します。 DOS には grep なんて洒落たものはないので、目grep で「Enclosure Device ID:」と「Slot Number:」が含まれている行を探します。これがドライブの識別番号になります。台数多ければ、ログが USB メモリに保存されているので、それを持ってきて他の環境で grep したほうがいいでしょう。
次に
megacli -CfgLdAdd -r1 [0:0,0:1] -a0
のように、論理ボリュームを追加します。 0:0 となっている左側が Enclosure Device ID 、右側が Slot Number です。私の場合は Enclosure Device ID は 252、 Slot Number は 0 と 1 でした。環境によって異なると思います。 -r の後に来るのが RAID レベルです。 -r0 だと RAID 0 になります。その他はデフォルト設定で、ディスクの全容量を使ってアレイが構築されます。細かい設定は Windows が起動してから確認しようと思いました。
デフォルトでは RAID カードにバッテリがつながっていないと、書き込みキャッシュが無効になっています。私は UPS つなげているので、書き込みキャッシュを有効にしました。
megacli -LDSetProp CachedBadBBU -LALL -a0
これで有効になります。無効にするときは -LDSetProp NoCachedBadBBU
です。
以上で Windows のインストーラーから認識できる論理ボリュームが完成しました。次に、 OS のインストールに移ります。
iDRAC6 には、ネットワーク越しに仮想的に CD/DVD を認識させる仮想メディア機能がついています。これを使いました。
仮想メディア機能で、OS ディスクをマウントします。これでサーバーをリセットすると、 Windows のインストーラーが起動します。この時に UEFI モードにしておかないと、 UEFI 対応としてインストールされません。なお、 Windows Server 2008 R2 のインストーラーは特に追加のドライバ無しで、RAID アレイを認識しました。
ドライブの選択画面では、未フォーマットのドライブがひとつ見えます。「ここに Windows をインストールすることはできません」のようなエラーメッセージが表示されますが、無視します。パーティションはお好みで切るといいですが、私はそのまま使いました。なお、UEFI では起動ドライブに管理用パーティションが2つ作成されます。
あとは普通に OS がインストールされますが、再起動したら仮想メディアを終了させてください。ディスクをマウントしたままだとブートローダーのあとに「STOP 0xc0000178」でシステムが停止します。ぐぐるとディスクが読めないっぽいことが書かれていますが、原因がわからなくて2度もドライバ変えたりしてインストールしなおしました...
以上で OS が起動します。あとは Windows の世界です。おつかれさまでした。
最近サーバーを構築する機会があったのですが、ストレージをどう用意したらいいのかさっぱりわからなかったので、だいぶ苦労しました。苦労した内容をまとめてみます。
SASの特徴: 速い、高信頼、高い
SATAの特徴: 安い、安い、安い
これに集約されると思います。バックアップとして使うならともかく、メインのストレージとして利用するのに SATA は選択肢に入ってこないと思います。 Non-recoverable error rate だって SAS のほうが1桁低いです。
サーバーで使うなら RAID 必須になってきます。今回はシャーシと予算の都合で HDD が2台しか入らないので、RAID 1 を構築することにしました。ところが、SATA と違ってぐぐってもさっぱり情報が見つかりません。
RAID にはソフトウェア RAID とハードウェア RAID がありますが、パフォーマンスを重視するならハードウェアRAID一択です。ただし、Dell の PERC H200 のようにキャッシュメモリが載っていない安物カードだと、パフォーマンスが全然出ませんので、きちんとキャッシュメモリが載っているものを選びましょう。1万5000円ぐらいから見つかります。RAID5 や 6 を構築するときは、おそらくコントローラーの性能がかなり響いてくると思うので、ここでけちってはいけません。
よく使われているメーカーは LSI か、Adaptec だと思います。Adaptec は PMC という会社に買収されてしまいましたが、ブランドは残っています。
(2011/12/21 追記)Adaptec はまだ UEFI に対応していないそうで、最近のマザーボードとの組み合わせだと起動しないかもしれません。私もはまりました。 LSI は対応しています。サーバー用だと LSI が最大勢力のようです。あと Areca というメーカーも最近メジャーで、チップは LSI なんですが DIMM を差し替えてキャッシュを 4GB まで増設できたりといった特徴があります。
お金が許すなら LSI Logic のほうが速いようです。Akiba PC Hotline! に 現行最速クラスのRAIDカード「LSI MegaRAID SAS 9265-8i」を試す という記事がありますので参考にしてください。
今回は Adaptec RAID 6405 をチョイスしました。3万円強で買えます。
ちなみに Dell の PERC H シリーズは、LSI Logic のOEM だそうです。DELLサーバのRAIDコントローラ~その2~ が詳しいです。
SAS は SATA と異なり、RAIDカードのコネクタとHDDのコネクタが一対一には対応しません。
Adaptec のケーブル一覧 に写真付きで載っていますが、だいたいは4叉(ファンアウト)ケーブルを使います。つまり、基本的にはRAIDカードのコネクタ1つにつきHDDが4台接続できるわけです。
LSI Logic も Adaptec も、メーカーサイトに、対応しているケーブルが書かれてあるので、それに従います。大体の場合、コントローラー側は SFF-8087 というコネクタで、HDD 側は SFF-8482 というコネクタになっています。
SATA と SAS の互換性ですが、SAS が SATA の上位互換になっています。SFF-8482 には SAS と SATA 両方の HDD が接続できます。SATA のコネクタには SAS HDD は接続できません。SAS のコネクタをよく見ると、電源部分とデータ部分の間にノッチがついています。これで識別しています。
SFF-8482 には single port 対応のものと dual port 対応のものがあります。dual port はその名の通り、信号線が2系統になっていて、電源部分とデータ部分のノッチに信号線が載っています。これを使うと、一台のHDDを複数のコントローラーに接続したりできるそうですが、自分で HDD 買ってくるような用途では使わないと思います...
SAS に接続できるストレージには大きく分けて、3.5インチ HDD、2.5インチ HDD、SSD があります。
SSD は HDD じゃないだろうというツッコミはありますが、最近では HGST や Seagate などの HDD メーカーもどんどん発売しています。容量も 800GB 程度までありますので、資金が許すなら選択肢に入るのかも? ただ、ぐぐっても売ってるところ見つからないので、普通には買えないのかもしれません。
3.5 インチと 2.5 インチですが、最近は徐々に 2.5 インチが幅を効かせているようです。といってもちょいと複雑で、単純には言えないところがあります。
まず、HDD の用途には二種類あって、ひとつは容量を稼ぐためのもの、もうひとつは性能も大事なものです。
容量を稼ぐ場合は、2TB とか 3TB の 3.5インチ HDD を使うのが良いようです。これらは SATA で普通に買える HDD と大差ありません。これは単純にディスク面積が広いほうが有利なので、 3.5 インチが使われています。
性能を稼ぐためには台数を増やすのが手っ取り早いので、10,000rpm 以上の 2.5 インチ HDD を複数台数用意するようです。消費電力も 2.5 インチのほうが小さいですし、例えば Seagate の場合は Cheetah 15K.7(3.5inch) より Savvio 15K.3(2.5inch) のほうがスペックが良いです。Cheetah 15k.7 が2009年の製品だというのもありますが... 新製品が発売されないということは、需要が減ってきているんでしょう。
あと、実は 3.5 インチといいつつ 10,000rpm 以上の HDD は、プラッタの大きさがかなり小さいですので、それだったら 2.5 インチシャーシでギリギリまで使うほうが良いという判断もありそうです。
性能と容量のバランスの良い、2.5インチ 10,000rpm HDD もあります。 Savvio 10K.5 は 900GB まで用意されています。3.5 インチの Cheetah より容量が多いです。新しい製品なので高密度なんでしょうね。
ちなみに今はタイ洪水のせいで、2.5 インチ HDD の入手性が悪いようです。あと私が勉強不足だったので、普通に Cheetah 15K.7 を注文してしまいました...
大抵のファイルシステムは、突然電源断が起こっても一貫性を保ち、データの消失が発生しないように設計されています。デスクトップパソコンが UPS なくても安心して使えるのはこのためです。
しかし、これには「OS がディスクに書き込んだと思った内容は、確実に書きこまれている」という大前提があります。
RAID カードのキャッシュは、OSが「書きこめ」と言ったものもキャッシュして、高速化します。そのため、電源断が起こった際にデータの消失、ファイルシステムの破壊が起こる可能性があります。かと言って書き込みキャッシュを無効化してしまうと、 RAID カードの高速性が半減してしまいます。
RAID カードの中には自前でバックアップシステムを持っているものもありますが、結構なお値段がしますので、それだったら PC ごと UPS でバックアップしたほうが良いと思います。2万円ぐらいからありますし、APC の 1U 用でも管理ソフト込で5万円強です。
memtest86 という有名なメモリチェッカがあるんですが、これ 64bit に対応していません。
PAE には対応しているので、64GB までのメモリチェックは出来るんですが、お陰で結構複雑なコードになってるし、メモリアクセスは 32bit なので遅い... ということで、64bit 移植に挑戦してみようと思いました。
ところがブートローダーってまともに書いたことが無いので、さっぱりわかりません。ある程度まとまってきたので、自分用に調査メモを残します。
Intel® 64 and IA-32 Architectures Software Developer Manuals
リファレンスといえば Intel です。 AMD64 なんですが、ドキュメントは Intel のほうが親切な気がするので、こっちを読んでます。迷ったらこれ、です。
Linux i386 Boot Code HOWTO
i386 向けですが、Linux のブートコードの解説です。
memtest86 もブートローダーは Linux のを借りているので、勉強になります。
Linux のブートローダー
memtest86 のブートローダーの元です。
バージョンが変わってるのでかなり変わってますが、参考になります。
GRUB
GNU のブートローダーです。
ライセンスは GPLv3 なので、Linux 関係のコードと混ぜられませんが、勉強にはなります。
Entering Long Mode Directly
Long mode に入るには protected mode を経由しないとだめなんですが、手順を一部省略する方法が書かれています。
どれぐらい安全なのかはわかりませんが...
メモリ情報は、OS が起動している状態だと OS がよしなにやってくれますが、起動した状態だとどの物理アドレスが使えるのかもわかりません。
Detecting Memory (x86)
メモリ情報は BIOS の E820 というコールを使うのがよさそうです。
2002年以降の BIOS だと使えるようなので、x64 対応の CPU が載ってるマシンだとほぼ問題ないでしょう。
x86-64 Page table structure
Wikipedia のページテーブル関係の記述です。プログラマ向けじゃないので情報量は少ないですが、あらすじはわかります。
Memory Map (x86)
典型的なメモリマップが載ってます。E820 で情報取るまでは決め打ちでメモリを使うしかないので、参考にします。
Rails ずっとやったことなくて、このままじゃいけない気がしたので勉強を始めました。
まずは 公式サイトのチュートリアル をやっています。コマンドを打つだけで色々ファイルが生成されて、魔法みたいですね。
本では Ruby on Rails 3 アプリケーションプログラミング が良さそう。チュートリアル終わったら欲しいな。
がんばるよー。