DebianでソフトウェアRAID構築
職場に新しく導入するサーバなんだけど、セットアップを自宅でするために持ち帰り中。 でも、RAIDのために搭載されているボードが、 "Intel Embedded Server RAID Technology II"なる製品で、導入予定のDebian/squeezeでは サポートが不完全みたい。 RAIDボードのBIOS画面で、2台のHDDをRAID1で構築するために、 設定を行い、Debian インストーラを立ち上げるけど、md126(read-only)と書かれて、 書き込みができずインストールに失敗。
色々調べても、よく解らないし、基本はSoftware RAIDっぽいので、いっそのこと RAIDボードは使わずに、素のSoftware RAIDでインストールすることにした。 性能の低下といっても、HDDアクセスが頻繁でなければわずかだし、 Software RAIDなら不整合トラブル時に、メールを出すとかの設定もできる。
ということで、sda , sdb のドライブに、/boot 用の領域100MBほど作り、 残りの領域をRAID構成にしたうえで、その中に LVM のボリュームグループを作り、 その中に、論理ボリュームで、swap , / (root) , /home を分けることにした。 実際に、設定はうまくいってインストールも終えたんだけど、 手作業でのパーティショニングで肝心の /boot に、bootマーカを付け忘れたため、 起動に失敗。…ということで、再チャレンジとなった。
sudoトラブルの確認
恒例のパッケージ更新ということで、"aptitude update ; aptitude safe-upgrade"を実行したら、 延々とパッケージのチェックをして、未確認の欄に表示されるパッケージ件数が55000を越えても 止まらない。もともとインストールされているパッケージ数も2500程度だし、異常動作。
保留の欄にも100件近いパッケージが表示されるので、ひとまず以前から更新を 止めていた"sudo"を更新する。 次に、apticronが報告してきていた更新候補をひとまずインストール。 すると、正しく更新作業も完了したし、再び"safe-upgrade"を実行しても、 普通に更新チェックが終わるようになった。
そもそも、sudo の更新ができなかったのは、MovableTypeへの記事の投稿scriptで、 ゾンビプロセスが残るのが理由だった。 ということで、記事の投稿を試すが、特に問題も発生しなかった。
# qmailからpostfixに変更したおかげかな…
職場の新しいサーバ名はiris
職場に新しく導入した、Xeon Quad Core ×2 で、ちょいとうるさいサーバだけど、 職場のホスト名の命名のルール(その時点の子どもの好きなキャラクタで女性名)ということで、 iris を採用。 キャラの名前、iris だったんだ…
HDDのUUID認識とはいえ
LinuxのKernelの機能で、HDDの認識がUUIDを使う方式に変わり、 HDD増設の度にシステム起動するかな…という不安に駆られる ことはなくなっている。
しかし、先日サーバの再起動をかけたんだけど、 HDDの増設もなにもしていないんだけど、 見事に /dev/sda , /dev/sdb , /dev/sdc が入れ替わっている。
さすがにmunin等の画面にUUIDな超長いデバイス名が書かれても困るし、 かといってデバイスの認識順序がブート時にちょっと変わっただけで、 デバイス名総入れ替えは勘弁してほしいなぁ… /dev/disk/by-id/* を覗いてみたけど、この辺を経由するシンボリックリンク貼れってことなんだろうなぁ…
Debian/Wheezy(testing)を入れる
先日、Debian6.0(squeeze/stable)が出たので、ひとまず様子見として見送っていた、 新しいtesting(wheezy)への移行作業を行った。
といっても、testing用のsources.listに修正して、aptitude safe-upgrade かけても、 更新が激しい怪しそうなパッケージも出てこなかったので、そのまま"yes"を入力。 (とはいっても、400件近いパッケージ更新だけど)
さほど、『読むからに動かなくなりそう…』という警告も出ず、入れ終わった。 ただ、ボチボチ触っていて、実は動かなくなってる…というのが常なので、 当面は気を付けよう。
Debian 6.0リリース
自分で管理しているサーバ群は、ほぼ Debian この中で、Debian 6.0(squeeze)が stable としてリリースされた。 これに伴い、testing は wheezy となったみたい。 管理しているサーバ群だけど、oldstable を使うように設定を変更しておかないと、 気軽にupdateしたら、急に動かなくなるパッケージが続出してくる可能性がある。
ためしに、いままで testing(squeeze) で運用していたサーバを、testing(wheezy) に 変更すると、更新:344個、新規:7個、削除:0個、保留:1個 となった。 6割がライブラリで、さほど影響もなさそうだなぁ…勇気いっぱつ "Yes"…といきたいけど、 ひとまず躊躇。
debianでDropboxをインストール
Debian/squeezeな自宅サーバにDropboxをインストールしてみた。 当初、DropboxのDownloadでubuntuなパッケージを入れようとしたけど、 動かなかった。しかたがないのでソースインストール。
(( コンパイルに必要なパッケージをインストール )) # aptitude install libnautilus-extension1 \ libnautilus-extension-dev \ docutils-writer-manpage (( コンパイル )) # tar jxvf nautilus-dropbox-0.6.7.tar.bz2 # cd nautilus-dropbox-0.6.7/ # ./configure # make # make install (( 使ってみる )) $ dropbox start -i : $ dropbox stop
IDEディスクをlvmでまとめる
自宅のサーバの更新を終え、古いサーバも様子見で動かしていたけど、 今朝変な音をたてていて、ネットワーク接続を受け付けてくれない。 細かいチェックはしていないけど、ついに絶命か… ということで、内臓HDDで新しめで容量の大きいものを取り出す。
# この作業でわかったんだけど、どうも壊れかけていたのは電源のFANみたい。
160GBのIDEディスクが2個取り出せたけど、 試用期間から考えて2次バックアップ用途あたりが無難。 かといって、160GBというのは小さく、マウントしても容量を気にして使わないといけない。 ということで、LVM機能で見かけ上1つのドライブとして使えるようにすることにした。
以下は、参考記事をみながら作業したときのメモ。 IDE2個を追加で接続したら、当初SATA=/dev/sda だったのが、 IDE1=/dev/sda,IDE2=/dev/sdb,SATA=/dev/sdc になって割り当てられた。 以前なら、ルートパーティションのデバイス名が変わって、地獄をみるんだけど、 最近は/etc/fstabには、ドライブのIDでマウント先が記載されているので、 まるっきり問題なくブートできる。さすが…
IDE1=/dev/sda IDE2=/dev/sdb SATA=/dev/sdc (( lvm2のインストール )) # aptitude install lvm2 (( PV物理ボリュームの割り当て )) # fdisk /dev/sda | dコマンドでパーティションをすべて消しておく # fdisk /dev/sdb | 同じくパーティションを消す # pvcreate /dev/sda # pvcreate /dev/sdb (( VGボリュームグループに割り当てる )) # # ボリュームグループにlvmという名前をつける # vgcreate lvm /dev/sda /dev/sdb (( 論理ボリュームの作成 )) # # ボリュームグループの中に論理ボリュームを作る。 # # lvmの中にlvm0を作る。 # lvcreate -n lvm0 --size 290G lvm (( マウントできるようにする )) # mkfs.ext3 /dev/lvm/lvm0 # mount -t ext3 /dev/lvm/lvm0 /mnt
さて、これでバックアップ用容量はひとまず確保。 1次バックアップ=外付けUSB(1TB)、2次バックアップ=LVM(290GB) がそろったけど、まだバックアップ処理を動かしていない。 さて、元サーバのバックアップスクリプトをどう動かそうか….
arpでnetwork稼働状態モニタリング
arp出力を観測して活きているネットワーク機器の状態を 把握するmuninプラグインを作ってみた。 pingを使おうかと思ったけど、死んでいる機器があると遅いのでarpの方がいい。
つくったのは、子供のDSなどがネットワークを使っている時間などが把握できるように したかったから…
追記:うーん、単発的な通信しかしないと、1ドットと線でしか把握できず、どの端末が 活きていたのかわかりづらいなぁ…なんかいい表示方法ないかな…
#!/bin/bash #%# family=auto #%# capabilities=autoconf # 自宅内の機器のホスト名(DNSなどで名前が引けること) hosts="xxxx yyyy zzzz" available="yes" case $1 in config) echo "graph_title Local Activity by ARP" echo "graph_category system" echo "graph_vlabel Activity" echo "graph_args --base 1000" for host in $hosts ; do echo "${host}.label ${host}" echo "${host}.draw AREASTACK" done exit 0 ;; autoconf) if [ "$available" = "yes" ]; then echo "yes" exit 0 else echo "no (daemon isn't running)" exit 1 fi ;; snmpconf|suggest) exit 0 ;; *) ;; esac for host in $hosts ; do eval "HOST_${host}=0" done # データの読み出し for host in `/usr/sbin/arp -a | /usr/bin/cut -d . -f 1 | /bin/sed 's/-/_/'` do eval "HOST_${host}=1" done for host in $hosts ; do eval echo ${host}.value '$HOST_'${host} done
Buffaloルータ用muninプラグイン
前のサーバで使っていた、AirStation WZR-HP-G300NHのパケット流量観察のための SNMP用スクリプトだけど、MRTGからmuninに切り替えてしまったので、 スクリプトを変更してみた。
muninのプラグインの作り方は大体わかってきたけど、in/outでプラス/マイナスで 表示する方法を試してみた。 ポイントは、"config"時の出力で、マイナス領域に表示する方は、"MMMM.graph no"にして、 プラス領域に表示する方は、"PPPP.negative MMMM" を出力すること。 "MMMM.graph no"を忘れると、プラス領域のグラフも残ってしまう。
#!/bin/bash #%# family=auto #%# capabilities=autoconf USER=root PASS=XXXXXXXX # ルータ管理者パスワード HOST=192.168.YY.YY # ルータIPアドレス URL="http://$USER:$PASS@$HOST/cgi-bin" available="yes" case $1 in config) echo "graph_title Buffalo router statics" echo "graph_category system" echo "graph_vlabel traffic (-)send / (+)recv" echo "graph_args --base 1000" for DIR in send recv ; do for TYPE in pkt err ; do echo "${IF}_${DIR}_${TYPE}.label ${IF} ${TYPE}" echo "${IF}_${DIR}_${TYPE}.type COUNTER" if [ "$DIR" = "send" ]; then echo "${IF}_send_${TYPE}.graph no" else echo "${IF}_recv_${TYPE}.draw LINE2" echo "${IF}_recv_${TYPE}.negative" \ "${IF}_send_${TYPE}" fi done done done exit 0 ;; autoconf) if [ "$available" = "yes" ]; then echo "yes" exit 0 else echo "no (daemon isn't running)" exit 1 fi ;; snmpconf|suggest) exit 0 ;; *) ;; esac # データの読み出し values=(`/usr/bin/w3m -dump_source -no-proxy \ "$URL/cgi?req=frm&frm=packet.html" 2>&1 \ | /bin/sed -n '/class="DIGIT"/ s/^.*">\([0-9]*\)<.*$/\1/ p'`) i=0 for IF in LAN WAN WiFi ; do for DIR in send recv ; do for TYPE in pkt err ; do echo "${IF}_${DIR}_${TYPE}.value" ${values[$i]} i=$(($i+1)) done done done # ログアウト処理 /usr/bin/w3m -dump_source -no-proxy \ "$URL/cgi?req=twz&frm=logout.html" >/dev/null 2>&1