2008-02-11

Linuxと iSCSIで SANを構築する〜前置き〜

iSCSIは SAN(ストレージエリアネットワーク)の技術である。1000base-Tや10GbEといった一般的なネットワークのインフラを使用するため、ファイバーチャネルと比較して安価に構成出来るのが特長といえる。そのかわり、比較的高レベルなトランスポートプロトコルである TCPの上に成立しているためオーバーヘッドが大きく、性能が出にくいとされる。

しかしながら、(適切なソフトウェアを組み合わせれば)家電量販店で普通に売っているハードウェアだけで SANが構築出来るわけで、従来ファイバチャネルの守備範囲だったハイエンドの市場がより一般に近いところまで「降りてくる」可能性には注目すべきものがあるだろう。(といわれ続けてはや何年)

そもそも SANは何故必要なのか。いくつかのケースが考えられるが、ひとつは並列コンピューティング(クラスタリング)に関するものだ。
計算機資源のスケーラビリティを求めるときに取り得る戦略はいくつかあるが、いずれの戦略を用いるにせよ単体の計算機ではその計算能力に限界があるため複数の計算機を並列に動作させるという部分では共通する。しかし計算機の処理能力を必要とするビジネス上の諸問題は、多くの場合何らかの共有されたビジネス・オブジェクトの状態を無矛盾に保った上で解決される必要があるため、単純に機械を多く用意して並べれば良いということにはならない。つまり、ある口座へ入金する処理と、同じその口座から出金する処理は別々の計算機で同時に処理されることはあっても、その結果が矛盾しないことを保証されなくてはならない。

この問題に対するアプローチの一つは、記憶領域(ストレージ)を一カ所に集中させつつ計算能能力となる各ノードを分散し、適切な排他制御の元に処理を実行させる方式である。この時、ストレージと各ノードを接続するネットワークが SANである。

普通に各ノードを LANで接続して共有フォルダ(これは現在一般家庭にも普及しつつある形で、NASという)を使うのでは駄目なの?という疑問が沸くかもしれない。面倒なので詳しい理由は説明しないが、高速な並列処理に必要なのは「共有のフォルダ」ではなく「共有のディスク」、もっと言うならば共有のブロックデバイスであり、NASは主に性能上の理由で SANの代わりにならない。

クラスタリング以外にも SANの用途はある。最近急速に普及してきているサーバ仮想化技術がそれだ。仮想サーバに必要なリソースである CPUとRAMとストレージのうち、CPUとRAMは(極端な話をすれば)幾らでも換えの効く使い捨てのものであるのに対し、ストレージだけは中に永続データを保持する以上そういうわけにもいかないため、物理的に一カ所へまとめて集中的かつ大切に運用管理できる方が良い。つまり多数のノード(CPU,RAM)と一つの共有ストレージ、そしてそれらを接続するネットワークという構図が出来る。
この事から、サーバ仮想化技術は SAN、とりわけ iSCSIと組み合わせて用いられるケースが多くなっている。並列コンピューティングと違い仮想化技術は中小規模の事業者にとっても必要かつ導入しやすく、また費用対効果の高い技術であるため、低コストで構築できる iSCSIはこの分野において存在感を増しているのだろう。なおVMWareも商用版Xenも iSCSIをサポートしている(Virtuozzoはストレージを仮想化しないためSANと直接は関係ない)。

さて、SANと iSCSIの話を延々としてきたのは、Linuxの iscsitarget (ited) と open-iscsiを組み合わせて主にXen用に SANを構築運用する方法のメモを記そうと思ったため、その前置きである。前置きだけで終わるかもしれない。続くかもしれない。

ラベル:

2008-02-09

iscsitarget 0.4.15をカーネル2.6.24用にビルドする

Linuxカーネル 2.6.22, 2.6.23, 2.6.24 で行われたSCSI周りの変更でそれぞれアオリを受け毎回ビルドできなくなってしまったかわいそうな iscsitarget なのであった。そのせいかどうか知らないが、Portageのメンテナもやる気なさそう。

というわけで 2.6.24で iscsitargetをビルド出来るように自分に頑張ってみた(だって、これがないとうちの Macは TimeMachineできないのだよ)。幸い、コンパイルエラーとなる部分はiSCSIサービスを提供するためのカーネルモジュール部分 (iscsi_trgt.ko)に集中している。

最初は自分でコンパイルエラーとカーネルヘッダファイルを追いかけて修正を進めていたのだが、処理の意味を理解していないままの機械的修正では行き詰まってしまい何とかなるまいかと iscsitarget-develメーリングリストを確認したところ、数日前に 2.6.24用パッチが投稿されていたのを発見する。オーノー。無駄な労力を払いましたか?

がーしかし。これは trunk用のパッチなので、リリースされてるバージョン(iscsitarget-0.4.5)のソースツリーにそのままでは使えないのである。仕方ないのでひたすら trunkと 0.4.5をdiffしつつ 0.4.5用に作成しなおしたパッチがこれ。努力の結晶。多分こんなもん俺しか使わないけどね。っていうか Portageのメンテナがやる気になるまでの間しか価値ないけどね。

iscsitarget-0.4.15-kernel.2.6.24.patch
注:無保証!!うちの環境でしかテストしていない。

・・・2.6.25でまたコンパイル出来なくなるってオチも無しでお願いしたいところ。

(2008-3-1追記)
Portageのほうにパッチが追加され、解決した模様。
下記は今後似たような状況が起こったときのためにメモとして残しておく。

---ここから
Gentooユーザーのために、これを ebuildにくっつけて emergeする方法をメモしておく。多分そういう人少ないけど。
ebuildの fileディレクトリにこのパッチを入れ、ebuildファイルの src_unpack() 内に

epatch ${FILESDIR}/${PN}-0.4.15-kernel.2.6.24.patch

を挿入する。
ebuildファイルを変更したので、

ebuild iscsitarget-0.4.15-r1.ebuild digest

として digestを更新する。(これをやらないと ebuildファイルが改ざんされてるぞ!とエラーが出て emergeできない)
後は普通に emerge iscsitarget すればよし。unmaskとかは適宜すること。

ラベル:

2007-04-06

Mac OS X用のiSCSIイニシエータとLinuxのiSCSITarget その4

前回からの続き。

iSCSIによってParallelsの仮想HDを好き放題置ける場所が得られたので、さっそく Windows XPのイメージを iSCSIディスク上にコピーして動かしてみた。

んんー?なんだなんだ?妙に速いぞ?→動画で見る(要QuickTimePlayer)

試しに XBenchを使って MacBookProの内蔵ハードディスクと速度を比べてみよう!
マシン:MacBook Pro 15" Intel Core Duo 1.83 GHz RAM2GB
内蔵HDD:Intel ICH7-M AHCI 上の TOSHIBA MK8032GSX (80GB SATA)
iSCSI:RAID0アレイ上に作成された論理ボリューム(100GB) on Gentoo Linux
ネットワーク:ギガビットイーサネット(安いギガビットスイッチングHUB経由)

結果は・・・

...なんだこりゃー!

どうやら、内蔵のシリアルATAハードディスクを読み書きするよりも、iSCSI経由でもっと速いハードディスクを使ったほうが断然高性能のようだ。ギガビットイーサネットの帯域を考えれば理論上は当然なのだが、実際の速度がこれほど出るとは予想していなかった。(それよりMacBookProの内蔵ディスクがこんなに遅いとは・・・)

ランダムアクセスがむやみに速いのは、ターゲット側でディスクキャッシュがものすごく効いているからだと思われる(Linuxホストのメモリは1GB)。だから本当はキャッシュが無効な状態で比較しないと不公平なのだけど、速いこと自体は確実なのでまあいいとする。

というわけで、本当はMacProが欲しいんだけど持ち歩けないから仕方なく MacBookProで我慢しているあなた。
今すぐ LinuxでRAIDを組んで、iSCSIでつなぎなさい。さすれば救われん!(持って歩くときは多分連れて行けないけど・・・)
Macに限らず、iSCSIは XPやVistaでも使えるので(XP用のiSCSIイニシエータはダウンロード提供、Vistaでは標準搭載)、ノートPCの内蔵HDDが遅くて困っている向きにはネットワークインターフェイスがギガビット対応であれば是非おすすめしたいところ。

Linuxマシンで使うPCI-Express/シリアルATA用のハードウェアRAIDコントローラなら、俺は外付けで8台までいくぜ!という人にはマルチレーン接続のHighPoint RocketRAID 2322、とりあえず安く内蔵の4台でいってみようという人にはRocketRAID 2310がお勧め。Mac用のドライバもあるから、将来Mac Proを買っても大丈夫だよ。
ひとまずなにより性能の評価がしてみたい!という人はお金をかけずに mdadmを使ってソフトウェアRAID0を組んでもOK。

ラベル:

Mac OS X用のiSCSIイニシエータとLinuxのiSCSITarget その3

前回からの続き。

LinuxマシンでiSCSIのターゲットが起動したので、後は globalSAN iSCSI を使ってMacから接続してやる。


Portals -> Add で接続先のホスト名又はIPアドレスを追加。「そんなホストないよ」みたいな警告が出るが気にしなくて良いみたい。


接続先ホストを追加したら、Refreshボタンを押してそのホストの持っているターゲット一覧をロードさせる。するとTargetsに ietd.conf で設定したターゲットが現れるので Connected チェックをオンにしてみよう。
Target Connect...というダイアログが出るが、特に認証などを設定していない場合はそのまま Connectボタンを押す。


「セットしたディスクは、このコンピュータで読み取れないディスクでした」という表示が出る。これはまさに、新品のハードディスクを買ってきて USBなり FireWireなりで接続した時と同じ動作だということにお気づきだろうか?「初期化...」ボタンを押してディスクユーティリティを起動し、普通のハードディスクと同様にフォーマット(消去)しよう。


これで Linux上の記憶域をあたかも外付けハードディスクであるかのように Macで使えるようになった。

続く

ラベル:

Mac OS X用のiSCSIイニシエータとLinuxのiSCSITarget その2

前回からの続き。

さて、そもそもなんでわざわざLinuxと iSCSIなんてよくわかんない代物を組み合わせて Mac用のディスク領域を追加したいの?普通の外付けハードディスクやNASじゃだめなの?
私の場合、

  • うちの MacBookPro(初代)には FireWire800がついてない。FireWire400で外付けHDDをつけたところで、どう頑張っても速度は知れている

  • デスクの周りにゴテゴテとハードディスクを置きたくない。サーバ用の棚に全部収めてしまいたい

  • Parallels Desktop for Macの仮想HDはネットワーク上の共有フォルダ(smb,afp,nfs,webdav)に置けない


といったことが挙げられる。とくにディスク容量に乏しいノートでは最後のが致命的で、これのために 8GBのSDHCメモリを買ったりなど涙ぐましい散財があったのは秘密。

...さて、Linux上で iSCSIターゲットを起動するのは割と簡単。

/etc/sysctl.confに下記のパラメータを追記して sysctl -p で反映させる。

net.core.wmem_max=1048576
net.core.wmem_default=1048576
net.core.rmem_max=1048576
net.core.rmem_default=1048576
net.ipv4.tcp_mem=1048576 1048576 1048576
net.ipv4.tcp_rmem=1048576 1048576 1048576
net.ipv4.tcp_wmem=1048576 1048576 1048576

必須ではなく推奨パラメータらしいので、メモリ容量に乏しい環境では無理に設定しなくても良いかも知れない。

iscsitargetをインストールする。Gentooなら、

emerge iscsitarget

イニシエータ側へHDDとして見せたいブロックデバイスをどれにするか選ぶ、又は作成する。実ディスクを見せたければ /dev/sd*でも良いと思うし、論理ボリューム(LVMを使っているなら lvcreateで作る)でも構わない。
ブロックデバイスの用意が出来たら、/etc/ietd.conf にその情報を書き込む。
私は raid0ボリュームグループにparallelsという論理ボリュームを作って、それを MacからHDDとして使えるようにしようと下記のような設定にした。ターゲットの名前はよくしらないけど "iqn.年-月.自分のドメイン名:このデバイスの名前" にすればいいみたいだ。

Target iqn.2007-04.net.stbbs:parallels
Lun 0 Path=/dev/raid0/parallels,Type=fileio

/etc/init.d/ietd start として iSCSIターゲットを起動する。自動起動にしたい場合、Gentooなら

rc-update add ietd default

とでもする。

続く

ラベル:

2007-04-04

Mac OS X用のiSCSIイニシエータとLinuxのiSCSITarget

無料で使えるMac OS X用の iSCSIイニシエータ "globalSAN iSCSI"が登場!
「時間制限も機能制限もしていません。どうぞMacOS Xで iSCSIのアドバンテージを得てください 」とのこと。すごくいい会社だ!

iSCSIのことをちょっと説明すると、要するに SCSIのネット版。iSCSIでは、ストレージを利用する側を「イニシエータ」ストレージを提供する側を「ターゲット」と呼ぶ。パソコンがイニシエータで外付けHDDがターゲットね。
これはいわゆる SAN(Storage Area Network)を普通のLAN機器で実現する技術で、ファイバチャネルの貧乏人バージョンといったところ。とはいえ、ギガビットイーサネットの帯域は FireWire800を超えるわけで、ストレージを接続するインフラとしてはそれなりに強力なのだ。

Windows Vistaには標準でiSCSIのイニシエータが搭載されているのだが、Macには今まで有料の別売製品しかなかった。
しかしこれからは Macでも iSCSIが利用できるんだ!

・・・とは言ったものの、iSCSI対応のハードディスクなんてどこに売ってるの?そう、ヨドバシカメラやビックカメラに行って「iSCSI対応のハードディスクくださーい」などと言ってもまるでわかってもらえないことはほぼ確実だ。間違いなくNASとかを勧められてしまうだろう。

イニシエータがあってもターゲットがなくては仕方ない。仕方ないので Linuxで立ち上げてしまおう。Linux上で iscsitarget というサービスを動作させれば、Linuxマシンに搭載されている任意のディスクやパーティションをiSCSIディスクとしてネットワーク越しに提供可能だ。

注意しなくてはならないのが、SANはストレージを提供するためのネットワークだけど、同じディスクを複数のホストから同時に読み書きする機能を直接はサポートしないということ。(外付けハードディスクは同時に1台のパソコンからしか使えないのと同じ)
もしSAN上のディスクを直接複数のホストから同時に読み書きしたいのであれば、クラスタ対応のファイルシステムを用いなければならないことに注意!(WindowsやMacで手軽に利用可能な物があるかどうかは不明、Linuxなら OCFSや GFSを使う)

次回から、実際に LinuxでiSCSIターゲットを起動し、それを Macから利用するまでの流れを紹介する。

続く

ラベル:

2007-03-29

全部入りメディアリーダー/ライターを Linuxで使う時

オウルテックのFA405MX3みたいな「どんなメモリーカードでもござれリーダー/ライター」を Linuxで使う場合、各スロットが別々の論理ユニットとして扱われているらしく、Device Drivers→SCSI device support→Probe all LUNs on each SCSI device をyにしてやらないければいけないことを知った。これをしないと最初の LUN(FA405MX3の場合はCompactFlashスロット)しか認識できない。

しかし2000円もしないデバイスが論理ユニットに分割されているなんてすごい世の中になったものだ。

ラベル:

2007-03-24

DVD-Rをテープ代わりに使う(実践編)

DVD-Rをテープ代わりに使う(能書き編)からの続き。

※この記事で扱っている内容を実際に運用した結果について責任は持てませんので、やるなら必ず自分で検証してからにしてください。

UNIXライクなシステムでは、かなり昔から CD-Rを焼くのに cdrecordというツールが使われてきた。
今では、これが DVD(-R/RW/+R/RW/etc...)にも対応し、cdrecord-ProDVDという名前になっている。
(このプログラムの設計を巡っては、作者とLinuxコミュニティとの間で激しく争われたようで、今でも情報を検索すると簡単にフレームの応酬を見つけることが可能だがそれはさておき)

このcdrecordというツールは CD/DVDを焼くことそのものについては大変多機能だが、テープのようにメディアを交換しながらシーケンシャルに淡々とデータを保存していくという目的のためには作られていない。そこで、cdrecordを使ってそのようなことを実現するためのフロントエンドツールをドイツの Stefanという人が作ったようなので利用してみた。ツールの名前は cdbackup/cdrestoreである。

cdbackupはバックアップと銘打つものの、tarやcpioでシリアライズされたストリームをメディアに書き出し、必要に応じて交換を要求する(cdrestoreはその逆)というシンプルな機能を提供するだけのソフトウェアで、差分バックアップといった高級な機能を持ち合わせていないので、そのような要件に対しては別のツールを組み合わせて対応する必要があることに注意すること。

Portageからであれば emerge cdbackupでインストールできる。が、x86_64用ではないため私の環境では強引にUnmaskしてやる必要があった(これによると思われる問題は後述)
また、cdbackupは CD-Rに対してバックアップを行う場合は cdrecord を、DVD-Rに対してバックアップを行う場合には dvdrecordという名前で外部コマンドを実行するようになっているため、dvdrecordという名前で cdrecordのシンボリックリンクを作成してやる必要があった。

cdbackupは常に標準入力からストリームを読み込む。コマンドラインは下記のようになる。

tar cvf - *.gz | cdbackup -R -C -m -s 8 -d /dev/dvd -r /dev/dvd -a "test"

上はカレントディレクトリにある全ての gzippedなファイル群をtarでまとめたストリームを/dev/dvdとして認識されているDVD-Rデバイスに8倍速で書き込み、"test" という識別子をつけるコマンドである。メディアいっぱいまで書き込まれるごとに、"Please insert next disk and press RETURN"というメッセージが表示されメディアの交換が促される。各オプションの意味は下記のとおり。

-R ... 書き込み先がCD-RでなくDVD-Rであることの指定
-C ... CRCを使用しない(詳しくは後述)
-m ... 複数メディアにまたがるバックアップを行う
-s ... 書き込み速度の指定
-d ... DVDデバイスの指定
-r ... DVD-Rデバイスの指定(最近の環境では -dと同じ物を指定すれば動くはず,但しこれは意図した動作でないと cdrecordが文句を言う)
-a .. このバックアップに対する命名

バックアップしたメディアセットからファイルをリストアするには、メディアセットの先頭となるディスクをドライブに挿入したのち下記のようなコマンドラインを用いる。

cdrestore -d /dev/dvd -t 1 | tar xvf -

-d ... DVDデバイスの指定
-t ... トラック番号の指定(普通は1)

cdrestoreコマンドのパイプ先は、cdbackupにストリームを送ったコマンドの逆をするコマンドである。

これで、安価なDVD-Rドライブを使ってあたかもテープのようなバックアップ・リストアが出来るようになった。残る問題はメディア交換地獄だけだ。Blu-rayがはやく手の届く価格帯へおりてきますように。

さて、cdbackupに -Cオプションをつけた理由に疑問をもつ人もいるだろう。大切なバックアップなのに何故CRCチェックを外してしまうのかというと、何故か私の環境ではCRCをつけるとリストアの時にエラーで止まってしまうからだ。ソースをちらっとだけ見たのだが、おそらくこれは 32bit用のコードを単純に 64bitでコンパイルしたためではないかと推測している。ちゃんとソースを追えば確認するなり直すなり出来ると思うのだが、時間があまりないので CRCを外すという場当たり的対処をしてしまった。

CRCをつけてもエラーにならない環境の人や、自分でコードを修正できる人は是非CRCをつけて運用していただきたい。

ラベル:

DVD-Rをテープ代わりに使う(能書き編)

バックアップ用のデバイスで典型的なものといえばテープだが、テープドライブは高価なうえに最近はハードディスクが安いので disk to diskのバックアップで済ませることも多いと思う。
なにせハードディスクのギガバイト単価はベアドライブなら30円を割り込んでいる。

しかしdisk to diskのバックアップは、常に最新のデータで上書きするような形で毎晩自動的にディスクの内容をコピーするような形になりがちではないだろうか。これだと2日以上前のデータを取り出すことが出来ない。

1回のバックアップを取るのに必要な容量の7倍にわたるバックアップ用のディスクを用意できるなら、date +%aコマンドの出力を使ってバックアップの出力先をローテーションすることで一週間分の履歴まで保存できる。だがそれでも遡れるのは一週間である。

毎日分のバックアップを消さずに残し、バックアップ用のディスクが不足したら交換して外したHDDは棚にしまっておくというリッチな運用も可能かもしれないが、ハードディスクはホストから外してしまっておくよりもっと価値のあることに利用したくなるのが普通だ。第一重くて保管場所を取る(ベアドライブを裸で保管するなら容積は小さいか?)。

履歴を残しつつ容量を節約してバックアップを行う方法としてインクリメンタル(差分)バックアップがある。しかしこれには、差分をとれるファイルシステムを使ったり、難しいバックアップツールを使いこなしたり、時にはプロプライエタリなソフトウェアに頼らざるを得なかったりする分それなりの時間的あるいは金銭的な投資を必要とする。

差分バックアップは理想的な方法だが、別のアプローチも考えてみよう。実はハードディスクより容量単価の安いメディアが存在する。それは DVD-Rだ。DVD-Rメディアのギガバイト単価は、ものによるが国産の確実なものでも 10円台である(50円/4.7GB)。書き込みを行うためのドライブも 5千円〜1万円で入手できる。しかも家電量販店で。

普段は disk to diskのバックアップを毎晩自動で行いつつ、週毎又は月毎のタスクとして自動バックアップされたデータを手動で DVD-Rに書き出し、フォルダに入れてキャビネットに納めていくような運用にすれば、経済的に履歴を保存することが可能ではないだろうか。

問題はディスク1枚あたりの容量が 4.7ギガバイトと小さいことだ。100ギガバイトのデータをバックアップするために必要なメディアの交換回数を想像すると気が遠くなるだろう。したがって、手のあいているスタッフが居るオフィスでしかこのアイディアは使えないかもしれない。あるいは、Blu-rayの普及を待つか・・・?

それはともかくとして、実際に DVD-Rを使ってテープを使うかのようにバックアップを行う方法を次のエントリで紹介する。

DVD-Rをテープ代わりに使う(実践編)へ

ラベル:

Serial ATA接続の DVD-RWドライブをLinuxで使う

物好きなので Serial ATA接続の DVD-RWドライブであるパイオニア DVR-212Dを買ってみた。バルク品。

Sillicon ImageのシリアルATAコントローラに接続してマシンを起動すると、BIOSでは認識される。
しかしカーネルには認識されなかったようなので dmesgしてみると、
WARNING: ATAPI is disabled, device ignored.
みたいなことを言われていた。どうやら libataのオプションとして atapi_enabled=1 をつけてやらなければいけないらしい。

カーネルに libataがビルトインされているならカーネルのオプションとして libata.atapi_enabled=1をつける。
libataをモジュールとしてロードしているなら、libataをロードするときに atapi_enabled=1がつくようにすれば良いようだ。

・・・とかせっかく書いたのだけど。Linux 2.6.17からはこんなことしなくても良いみたい。ちぇ。
うちで使っている Xen-compatibleなカーネルが 2.6.16だからねえ。

あと、最近のマザーボードにはよく JMBの Serial ATAコントローラが載ってるんだけど、これは AHCIのドライバで動作するよ。

ラベル:

2007-03-23

Gentooでソフトウェア RAID0

最近のマザーボードはシリアルATAのポートを4つとか6つとか搭載している。
大抵の人はこんなに使わないで余らせていると思うし、4つもディスクの搭載できる筐体を持っているとも限らない。

しかし4つのポートを束ねて1個のマルチレーンコネクタとして筐体の外に出すと、下手なSCSIより速い外付けストレージ環境が手に入ることに注目されたい。
参考:マルチレーンの活用記事

さて、せっかくたくさんディスクを並べたらRAIDにしないともったいない。
RAIDコントローラは高いので、さしあたりはソフトウェアRAIDにしようという人も多いはず。
そんなわけで RAID0の組み立て手順をメモ。
(注:RAID0は速いけどMTBFが異様に短くなるので通常の運用にはお勧めしません)

各ディスクに fdiskで同じ大きさのパーティションを作成する。ここでは /dev/sda /dev/sdb /dev/sdc /dev/sddにそれぞれ /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1 を作成したことにする。それぞれのパーティションタイプは 0xfdにしておくと良いかも知れない(そうしておくとOSがこのパーティションをRAIDのメンバだとすぐ認識できる)

LinuxでソフトウェアRAIDを組むには mdadmというツールを使用する。まだ入れてなければ
emerge mdadm
する。

RAID0ボリューム /dev/md0を下記のコマンドで作成

mdadm --create --verbose /dev/md0 --level=0 --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1

次回起動時にアレイの情報を確実に自動復元できるよう設定ファイルへ追記

mdadm --detail --scan >> /etc/mdadm.conf

アレイを監視させるために mdadmをデーモンとして自動起動するよう rc-updateする

rc-update add mdadm default

ここまでで RAID0の構築は完了。試しに論理ボリュームを作ってみよう。

pvcreate /dev/md0
vgcreate raid0 /dev/md0
lvcreate -n test -L 1G raid0

これで1GBの論理ボリューム /dev/raid0/test が作成されたので、書き込みテストをしてみる。

dd if=/dev/zero of=/dev/raid0/test bs=1M count=1024
1073741824 bytes (1.1 GB) copied, 5.08022 s, 211 MB/s


211MB/秒の書き込み速度。
シリアルATAのポートが4ポートとも同じPCIバスにつながっている場合、バスの帯域がボトルネックになってこの半分くらいの速度しか出ないので注意。(211MB/秒の例は PCI-Express x1スロットも併用している)

ラベル: ,

2007-03-21

xfs_growfsと/dev/rootの謎

仮想マシンのルートファイルシステムを拡張しようとして dom0から lvextendし、domUの中で
# xfs_growfs /

とやると
/dev/root: No such file or directory (/dev/rootなんてナイヨ)
といって怒られる。

そんなデバイスを指定した覚えはないのだが、もしかしたら /proc/mountsの中を見ているのかもしれない。

なぜ/proc/mountsでは、ルートファイルシステムが/dev/rootにあるように記述されているのかわからない。dom0の/proc/mountsにはちゃんと存在するデバイスが書かれていた。initrdを使うかどうかが関係しているのだろうか。

とりあえず 実デバイスのシンボリックリンクを /dev/root として作成してやれば xfs_growfsを騙すことは出来るみたいだ。

ラベル:

NFSのスループット

Intel PRO/1000を積んだLinux同士で NFSを使ってファイルをコピーしたときのスループット。
コピーといっても実際はこれ。

# dd if=/dev/zero of=test.bin bs=1M count=1000

結果は約44メガバイト/秒 (352Mbps)。

NFSのオプションに何もつけなくても、-o tcp,rsize=32768,wsize=32768なんてつけても結果は同じ。
オプション指定が効いていないのか、それとも巷でよく言われているNFSのチューニングパラメータ云々はもう古い話なのかも(スループットは同じでもCPU負荷は違うか?)

ジャンボフレームを使えばもっと速く出来るんだろうけど、Vista用のドライバが何故かジャンボフレームに対応していない。ブロードキャストドメイン内の全てのホストが対応できないうちはジャンボフレームの導入はできないわけで・・・
なんとかしてくれー。

ラベル:

2007-03-20

ボリュームグループが消えた!?

LVMを使っててなぜなボリュームグループが認識されなくなるという事態が起こった。
該当する物理ボリュームを pvdisplay で表示してみたところ、

--- NEW Physical volume ---
PV Name /dev/...
VG Name
PV Size ... GB
Allocatable NO

みたいに新規追加扱いになっている。そんなー!
でも vgrestoreというコマンドがあったのでそれを実行してみたところ復旧。

助かった・・・死ぬかとおもった・・・っていうかバックアップは欠かせないですぞ。

ラベル:

module license 'Proprietary' taints kernel.

RocketRAIDのドライバを動的にロードしようとして言われた言葉。
この後に
Unknown symbol force_evtchn_callback
などというエラーが続く。

Xenがプロプライエタリなモジュールにシンボルをエクスポートしてくれないためだと思う。
特別なハードウェアをXenと組み合わせるときは注意。

カーネルに静的リンクすれば問題なく動くのだけど、RocketRAID231x系と RocketRAID232x系のドライバを両方組み込む、といったことができない。(シンボル名がかぶる)

うーん困ったね。

ラベル: ,

2007-03-18

販促用記事

懇意にしていただいている、PRO SHOP MAXSERVE に、販促用の記事を寄稿しました。

IT開発現場におけるサーバ仮想化とマルチレーンの活用

マルチレーンを使って高速で大容量なストレージを低コストで組み上げ、Xenを使った仮想サーバ環境に活用しようという趣旨です。

ラベル: ,

2007-02-25

32MB IDEフラッシュメモリ



/boot用の /dev/hdaとして2個ほど購入。
これにブートローダとカーネルを入れておけば、ディスクレスでもディスクからでもOSを起動することが出来る。
(ルートファイルシステムとブートパーティションを同じハードディスクに入れてあると、交換するとき面倒でしょ)

ラベル:

2007-02-17

iDiskとdavfs2

emerge davfs2 してリブート。

fstabに下記

http://idisk.mac.com/自分の.Macユーザー名 /mnt/iDisk davfs

/etc/davfs2/secretsに 下記

http://idisk.mac.com/自分の.Macユーザー名 自分の.Macユーザー名 .Macパスワード

ファイル名は普通にUTF-8として扱えばOK

2008-3-20追記:
davfs2 1.2.0からは davfs2 というユーザー&グループがないとマウントができない。

ラベル:

2007-01-23

SDHCメモリ

SDメモリの大容量・高速バージョンであるSDHC。
公式にはSDと互換性が無いことになっているが、SD用のリーダーで使えたという話がいくつか見られたので試しにマックスサーブで 8GBのものを購入してみた。

結果、BelkinのExpressCard34アダプタ(アップルストア銀座で買った)では使えず。
やはり確実に使いたければSDHC対応のアダプタを使わなきゃだめみたい。

SDHC対応の ExpressCard34アダプタが国内に輸入される気配らしいのでそれを待とうっと。

ラベル:

2006-04-30

Netatalk

iWebで作成したコンテンツをWebサーバへ配置するためにNetatalkを導入した。Gentooなので emerge netatalkで良い。いつの間にかバージョンは2.0になっている。

/etc/netatalk/AppleVolumes.defaultファイルに

/var/www/localhost www

とでも追記しておけば、Web領域が www というボリューム名で参照できるようになる。/var/www/localhostはGentooにおける Apacheのデフォルトバーチャルホスト置き場。

Macから参照する時は afp://hostname のように指定。

ところで古い記事だと Netatalkを使うにはカーネルコンフィギュレーションで Appletalk DDPを有効にせよとか書いてあるけど、今はもう AFP over TCPで事足りるので信じないように。DDPを有効にしないで netatalkを使う場合、/etc/netatalk/netatalk.conf で ATALKD_RUN= を no にすること。

ゲストアクセスを有効にするには /etc/netatalk/afpd.conf で -uamlistオプションに uams_guest.so を追加する。ゲストアクセスの権限はデフォルトで nobody になるが、netatalk.confの AFPD_GUEST行で変更できる。

ラベル: