2008年1月20日

RAID(mdadm)のメモ

カテゴリー: [Linux]

先日、LinuxサーバのHDD交換をしたわけですが、その後、24時間しない内に原因不明のフリーズに陥りました。
仕方ないので強制的に再起動しましたが、結局原因がわからないのでちょっと不安。
ハードウェア的にもソフトウェア的にもいろいろ変更したわけで、思い当たるところがありすぎです。

さて、HDD交換のついでにRAID1を組んだわけですが、そのときの操作をメモを兼ねて書いておくことにします。

mdadmによるRAIDの構築方法は簡単に見つかりますが、はまったのがセットアップ中に一度停止させたRAIDアレイをmdadmで再編成する方法。

RAID構築後に、以下のように、一度RAIDを停止させた場合。

# mdadm -S /dev/md1

次に、再びRAIDとして編成するときにどうするか。
ちゃんと調べないで停止させてしまったので、あわてて調べる羽目に。

最初は、こうやりましたが、うまく行きません。

# mdadm -A /dev/md1

/dev/md1 は編成されたRAIDアレイが使うデバイス名ですが、そのアレイの構成要素となるデバイス(/dev/hda1など)を識別する情報がないということなんでしょう。

結局、以下のようにして、まず、RAIDアレイのUUIDを調べ、

# mdadm -E /dev/hda1

その後、そのUUIDを指定して、一つ一つ編成しました。

# mdadm -A /dev/md1 -u xxxxxxxx:xxxxxxxx:xxxxxxxx:xxxxxxxx

ここまでが、実際の作業で使った方法。

結局、後で調べたらもっとやりやすい方法があったわけです。
まず、/etc/mdadm.conf に以下のように、RAIDアレイを探す対象のデバイスを書きます

DEVICE /dev/hda* /dev/hdb* /dev/hdc* /dev/hdd*

そして、以下を実行すると、既存のRAIDアレイを編成するのに必要な情報が出てきます。

# mdadm -E --scan
ARRAY /dev/md2 level=raid1 num-devices=2 UUID=xxxxxxxx:xxxxxxxx:xxxxxxxx:xxxxxxxx
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=xxxxxxxx:xxxxxxxx:xxxxxxxx:xxxxxxxx

これは、そのままmdadm.confで使える形式なので、以下のように/etc/mdadm.conf に追記します。

# mdadm -E --scan >> /etc/mdadm.conf

この後、以下のようにすれば、既存のRAIDアレイが編成されます。

# mdadm -A --scan

ただ、このやり方は実際には試せてないんですが…


ここまではソフトウェア的な話ですが、ここからはハードウェア的な話。

ミラーリングなのでHDDを2台つなぐわけですがが、HDDを両方ともATA100のプライマリチャネルにつなぎました。
1つのチャネルにミラーリングしているHDDを2つつなげるのはなんとなく遅いような気がしましたが、
手持ちのケーブルの長さが足りないので仕方ありません。

DVD-ROMドライブがケースの上の方に、HDD2台が下の方についてるんで、DVD-ROMとHDDを1つのケーブルのマスターとスレーブにするには、一度ケースの上の方のDVD-ROMドライブにつなげた後、下の方にあるHDDまで降りてこないといけません。
まあ、HDDの取り付け位置をDVD-ROMの近くにすればいいんでしょうけど、冷却の都合もあるわけで。
(そもそも、SATAにすればいいと言う話もあるわけですが(^^;)

でも、マスターとスレーブの間の長さは、15cmのものがほとんどです。
全体もやたら長いものの、マスターとスレーブの間が30cmのケーブルを見つけることが出来たので、つなぎ変えてみました。

さて、これで速度に変化はあるのか。
接続を変更する前後で、bonnie++というソフトを使って、計測しました。
Gentoo では、

emerge bonnie++

でインストールできます。
以下のようにすれば計測できます。
キャッシュやバッファの影響を避けるために、実メモリの2倍のサイズのファイルを作るので、十分な空き容量が必要です。

/usr/sbin/bonnie++ -d (ディレクトリ名)

rootで実行すると警告が出るので、root以外のユーザで実行します。

で、計測してみたんですが、正直あんまり変わってない感じです(^^;
まあ、そんなものでしょう。あんまり、こだわるところではなかったのかもしれません。

今回、RAIDを構築した後で、RAIDを構成するHDDの接続場所を変えてしまいましたが、起動時にRAIDを構成するデバイスを探しに行きますので、問題は起きません。
ただ、mdの初期化時にデバイスが存在しないとまずいので、USBとかでつなぐとだめなようです。

投稿者 shingo : 23:16 | コメント (1) | トラックバック

2008年1月15日

HDD入れ替えとLVMの導入

カテゴリー: [Linux] [blog] [自宅サーバ]

自宅のサーバが、そろそろ稼働開始から3年くらいになり、HDDが心配なのとパーティションのサイズに問題が出てきて不自由になってきたので、思い切ってHDDを入れ替え、LVM(Logical Volumn Manager)での管理に変更することにしました。
ついでなので、ソフトウェアRAIDで、RAID1にすることに。

まず、今のケースでは小さすぎてHDDが2台のらないので、入れ替え。

Gentooのinstallcdをつかって起動し、古いHDDをUSB経由で接続して、作業開始。
経験上、Gentooのinstallcdは、USBのHDDでも簡単につながるので便利です。

LVMにしない(できない) /bootとrootパーティションは、同じサイズのRAID1のパーティションを作ってddでコピー、のつもりがミスで少し小さいサイズになってしまって失敗。

よく考えてみれば当たり前で、/dev/hda1と/dev/hdb1 を束ねて/dev/md1 を作るとき、/dev/hda1と/dev/hdb1 を古いパーティションと同じサイズにしても、先頭にスーパーブロックが書き込まれるから、その分減るわけです。なので、普通にファイルをコピー。

その他のパーティションは、LVMで作るので、LVM用のRAID1のパーティションを作り、それをVolume Groupに追加。そこから切り出して、以前のシステムのパーティションに相当するLogical Volumeを作っていきました。
各Logical Volumeは、前のサイズよりは、少し大きめになるように取っていきました。
そして、作ったLVに、元のHDDからddでデータをファイルシステムごとコピーし、

resize2fs /dev/(Volume Gruop名)/(Logical Volume名)

で、LVのサイズいっぱいに拡張して、コピー終了。
ただ、コピーにけっこう時間がかかりました。
普通にファイルシステム作ってから、そこにコピーした方がよかったか…

作業をしていると、祖母から電話がかかってきました。
IP電話が止まっているので、変だと思ったようです。
こいつが、ルータになっているのをすっかり忘れてました。

最後の仕上げに、/etc/fstab のデバイス名を新しいRAID1とLVMのデバイス名に変更、/etc/mdadm.conf を追加、grubのrootパーティションのデバイス名を新しいものに変更して新しいHDDにgrubをインストールしました。
その後、全てのボリュームをumount、LVMとRAIDを停止して、リブートし、やっと稼働し始めました。
(ちなみに、カーネルはあらかじめLVMとRAIDを追加して再構築してありました)

結局、12時間くらいかかりました。
コピーに時間がかかったのと、コピーの間、別の用をしていたのが大きかったような。
そもそも、最初にケースを入れ替える作業があったわけで。

とりあえず、順調に動いている模様です。

記録の意味でも、後でやったことをちゃんとまとめたいですね。(後でというとやらない予感…)

余談:

その後、ついでなので、放置していたblogのメンテナンスをしていたら、なんと知り合いからのコメントまで、スパムフィルタが拒否していたことが発覚。
ブラックリストの zen.spamhaus.org に基づいて、拒否してしまったようで。
apacheで拒否するようになる前だったので、コメント自体は残っていたため復活させました。
このブラックリストは、どうやらまずいみたいです。
前のエントリでやったapacheの段階でスパムを拒否する設定から、このブラックリストは外しました。
そもそも、Movable Type側のスパムフィルタからも外しました。危険です。

投稿者 shingo : 02:00 | コメント (0) | トラックバック

2007年2月 1日

SpamAssassin

カテゴリー: [Linux]

会社のメールアドレスは基本的に仕事でしか使わないようにして,不用意に外に出さないようにしてました.
が,本格的に使い出して1年未満でスパム業者にかぎつけられてしまったようです.

私は,会社のメールを携帯に転送してます.
POPで取ってきたメールについては,自作のフィルタでたいていのスパムメールは振り分けが出来るので,それでいいんですが,問題は携帯に転送している方です.
携帯電話がうるさくて仕方がない...

それで,SpamAssassinを使って,携帯に転送するものだけスパムメールを遮断するようにしました.
勝手に遮断する場合,普通は誤判定が問題ですけど,携帯に転送している方は誤判定されても,あまり困らないので.

.forward でメールを2つに分け,一方はそのままメールスプールへ,一方をprocmailになげ,スパムメールの判定をさせてから,携帯に転送するようにしました.

設定してから,あまりスパムが来てないので,正直なところ,どのくらいちゃんと機能しているのかはよくわかりません.もっとスパムが来てみないと何とも言えませんが,なんかうまくいってない気がします.
別に,スパムに来て欲しいわけじゃないのですが...なんか矛盾してます.

案外使うのが難しそうです.

投稿者 shingo : 02:26 | コメント (0) | トラックバック

2006年5月 5日

i855GMEm-LFSとLinuxでSpeedStep

カテゴリー: [Linux]

自宅においているサーバは,i855GMEm-LFSとPentium Mで組んでありますが,いままでSpeedStepが動いていませんでした.そのため,常に最高周波数,最高電圧で動作しているので,CPUの温度が高いままでした.
もう動かし始めて1年半近くなので今更な感じがありますが,直せそうだったので,なんとなく直してみました.

EnhancedSpeedStepのドライバは,クロックと電圧のテーブルを,Banasisの場合は内蔵するテーブル,Dothanコアの場合はACPI経由で取ってくることになっているようです.私が使っているのは,Dothan B0のPentium Mなんですが,どうもACPIからテーブルを取ってこれないということのようです.つまりはマザーボードの問題?

ちょっと調べてみると,Dothan用のテーブルをドライバに組み込むパッチがあるようでした.まあ,これは前から知っていたんですが,よくわかってなかったので使っていませんでした.
今回は,そこから使っているPentium M 755 のテーブルだけを抜き出して,arch/i386/kernel/cpu/cpufreq/speestep-centrino.c に追加してみました.
するとあっさり動きました...

同様の問題は,ACPIを意図的に切っている場合にも起こるようです.

このDothan用のテーブルがLinuxカーネルに取り込まれないかなと期待する話をみかけましたが,普通はいらないもののようですので,取り込まれていないんでしょうね.あってもじゃまにはならない気がしますが.

投稿者 shingo : 02:20 | コメント (0) | トラックバック

2005年2月 9日

AWStats6.2以前にセキュリティホール

カテゴリー: [Linux]

私は,自分が管理していてWebサーバが動作しているサーバでは,AWStatsで,ログを解析しています.
最近,このAWStatsのセキュリティホールで,侵入,改竄が頻繁に起きているようです.

自分はアップデートしたから,大丈夫だと思ってとりあえず安心していたんですが,よく確かめたら,1つ漏れが(^^;
それも,バージョンが6.0.さらに認証とかかけてないから,publicになっているし(^^;
AWStatsのURLは,だいたい習慣的に決まっているので,スキャンしようと考える奴が出てきてもおかしくありませんから,気をつけないと.
そのサーバは,Vine Linux なので,AWStats は distribution に入っていませんから,apt-get などの対象になりません.自分で後からいれたソフトウェアは,特に気をつけてないと.

ついでなので,検索キーワードが文字化けする対策をしました.「ESC - awstats日本語化。」 を見て手を加えました.
そうしたら,今まで見えなかった変なキーワードがいろいろ出てきましたが^^;

こういうことが多くて,まったく気が抜けないですね.
そういえば,今日はWindows の更新もやたらたくさん出ていましたね.

投稿者 shingo : 14:27 | コメント (4) | トラックバック

2005年1月31日

サーバの設定ミス

カテゴリー: [Linux]

MySQLを標的にする worm が出現したという記事が出ているのを見つけたところから,話は始まります.

ITmedia エンタープライズ:MySQLを標的にするワームが出現――米セキュリティ組織が警告

研究でMySQLはよく使うので,ちょっと気になったのですが,研究用のLinuxサーバは,用のあるポート以外は iptables で遮断しているので,まあ大丈夫だろうと思っていました.
ただ,私の管理でないサーバでも,MySQLを使っているものがあったことに思い当たり,そのサーバにも,念のため iptabels の設定をしておこうと思いました.
それで,自分のサーバの設定を写せばいいかと思ったのですが...

iptables -L -n -v してみたら,ルールが空っぽ(笑)

各サービスにセキュリティ上の問題が無ければ,別に iptables を設定していなくても問題ないのです.
しかし,人間というのはミスをするので,用のないポートは遮断していたのですが,iptables の設定そのものをミスって,遮断しているからいいやと油断していては,しゃれになっていません(笑)
MySQLに外部から接続するときは,パスワードを要求する設定にしてあったですが,まともなパスワードだった記憶がない^^;

そのサーバは,年末にハードウェアごとリプレイスしたものですが,そのとき iptables を設定した覚えはあります.iptables の設定は,再起動時に再現できるように,ファイルに落としておかないといけないのですが,どうやら保存し忘れていたようです.
開けっ放しになっていたかもしれないと思うと,ちょっとぞっとします.

実は,数ヶ月前,クラッキングされて完全に乗っ取られたサーバを復旧する機会(?)がありました.断っておきますが,入られたのは私のせいじゃありません(笑)
今まで実物は見たことがなかったんですが,悲惨なものです.

rootkit を入れられ,バックドアとして sshd が動いていました.当然,主要コマンドも改竄されていました.しかも,改竄されたコマンドには,実行されると修復されたファイルを改竄し直す罠が仕掛けられいたようで,コマンドを入れ直したつもりでも,残りかすが残っていると,いつの間にかまた戻っています.
また,一部の改竄された設定ファイルには,ext2 の書込禁止属性が付けられていました.
どこに何が残っているのか分かったものではないので,ルートパーティションを全部消して,入れ直しました.

loggerも改竄されていて,まともなログが残っていませんでしたが,下手なやり方だったのか,ログが消えすぎていて,ほとんど何も残っていなかったため,異常を察知できました.また,ls コマンドもファイルの種類ごとに色分けされる設定になっていたはずが,機能しなくなっていたので,違和感を感じ異常に気づくきっかけになりました.
でも,もっと「うまい」クラッカー相手だったら,気づきさえしなかった可能性もあります.

本当はポートを閉じたって意味ありません.そういう意味で「ファイアウォール」というのは,よく誤解されます.
とにかく,「いらないサービスははずす」,「セキュリティ・パッチを当てる」だけですね.
それでも,「ゼロデイ アタック」 が起こりうるわけで,入られるときには入られます.
継続的に監視をし,セキュリティ情報に聞き耳を立てているしかないですね.

追記:
このMySQLをねらったwormは,Windowsでしか動作しないようです.ちょっと早とちりでした.

投稿者 shingo : 03:04 | コメント (0) | トラックバック