2010年1月27日水曜日

device-mapper-multipathを使う

ファイバチャネルのシステムやiscsiなどを使って
複数のストレージ接続を一本の経路として使う場合に
multipathを使用する。

特にRHEL5.x(CentOS5.x)でファイバ環境を利用する場合には
利用することが多くなるとおもう。

4.xだとmultipathドライバが提供されていたが、
ドライバが見つからないのはこれがあるから?

インストール時から利用する場合は
mpathを付けることで自動で動作する。

起動後であれば

/etc/multipath.conf
のファイルの中の
#blacklist {
# devnode "*"
#}
この部分をコメントアウトして、
再起動を行う。

複数のファイバで単一のストレージを参照する場合に、
設計によっては片方がつながっていると片方からはブロックデバイスにアクセス出来ない
問題が発生する。、

この場合にmultipathを有効化していないと
ブロックデバイスが見つからないエラーが発生する上に
起動時やブロックデバイスのチェックをするときに
非常に長い時間のウェイトがかかる

kernel: end_request: I/O error, dev sdf, sector 0

こんな感じのデバイスIOエラーが発生する。

これはmultipathを適用したとしても
発生はするが、長い時間のウェイトは掛からない。

multipathの状態の確認は
# multipath -ll

を利用することで確認できる。
そうすると経路がtree式で表示され
activeか確認することができる

有効な状態でデータをやり取りしてファイバを抜いた場合の挙動は
ghost側であれば転送も止まらず無影響にて通信し続け
ready側であれば一時的に転送は止まるが
データの欠落は起きない。

不必要な情報を一気に削除

コメントも含まれた一般的コンフィグファイルから
コメント以外の行だけを表示する

$ grep -v ^# hogehoge.cfg |cat -s

作業ログから実行データで、不必要なメタデータを削除する

$ grep -v ^+ hogehoge.log | tr -cd '[:print]\n' | cat -s

こんな感じかな

コマンドラインで作業をやるときにやること

$ script ファイル名
(ログを作成する)

$ bash -x

実行状態をデバックモードで表示。

みんなやる必要なし?

2010年1月21日木曜日

REDHATならこんなカーネルコンパイルはいかが?

普通にカーネルを解凍して
コンフィグを
make menuconfig
make xconfig
make gconfig
なんかで作成する。
bootのところにconfigファイルが有ったりするので、
それを解凍したディレクトリのルートに.configにして置いてから
変更すると楽になったりする。
$cp /boot/config-x.x.x-* ./.config
こんな感じで


そんでもって、
make rpm
を使うとコンパイル後にrpm化してくれる。

出来たら、
#rpm -ivh /usr/src/redhat/RPMS/i386/kernel-x.x.x.rpm
見たいな感じで新しいカーネルをインストールして


# mkinitrd /boot/initrd-x.x.x x.x.x

でinitファイルを作成したら、


grub.confを作成して終了
title Fedora Core (x.x.x)
root (hd0,0)
kernel /vmlinuz-x.x.x ro
initrd initrd-x.x.x



こんな感じで、作るとrpm化されて運用も楽だし、
インストールも簡単だったりする。


makeにrpmを入れてくれた人に感謝

grubを修正しようと思ったら

RHLでインストールディスク入れてgrubの修正しようと思ったら、
うまく修正されないでやんの。

なんてこと良くあるので、grubコマンド使ってmbr作ってやるってやつです。

とりあえずインストールディスクから
linux rescueに入る。
起動後はマウントしてもしなくても可
grubコマンドからgrubコンソールを呼び出し
英語キー配列になる。

grub> install (hd0,0)/grub/stage1 (hd0) (hd0,0)/grub/stage2 (hd0,0)/grub/manu.lst


でhd0のmbrにインストール


終わったら、再起動するとgrubコンソールだけ立ち上がるので、
root (hd0,0)
kernel カーネルファイル root=ルートになるデバイス名(例 /dev/sda1 LABEL=/などなど)
initrd initファイル
boot


のコマンドを打てば起動するので起動後に
grub-install /dev/sda
なんかでインストールすると
次からはコマンド打たなくても起動します。

BASHで使える小技集

1.
文字列を正規表現で判定したい

if echo ${check_str} grep ${word} ; then
fi

2.
サブ関数を実行しての判定

if sub_func ; then
fi

sub_funcの戻りが0だと真、0意外だと偽になる。


3.
ある、一定時期より古いファイルを表示する
find [ directory ] -mtime +number -print
例)
find /usr -mtime +3 -print
3日以前のファイルを表示する
-printを-exec rm {}にすると選択したファイルを削除する

4.
変数の名前を変数を使って作成
eval "hoge${hogehoge}=\"data\""

5.
数字の計算
$[ number + number ]

6.
CSVデータのある項目だけを配列にとりたい
array_name=(`cat file_name awk -F, '{print ${number} `)

yumやup2dateで使用できるリポジトリ作成

CentOSやRHELで構築作業をするときや
一括で同一バージョンにアップデートする場合に
同一箇所からyumを使って作業をしたいときに
配布サーバを作成したい。

そのときは、配布元サーバにftpやapacheをインストールした後に

rpm群を決まったディレクトリに配置する。
以下のコマンドを実行する
createrepo ${dir_name}

これでクライアント側のyumの/etc/yum.repo.dにリポジトリデータを入れれば
yumで通信することができる

ちなみにローカルのファイルからアップデートやインストールする時は
baseurlのアドレスの頭を例によってfile:///で始めると良い

HTTPSの接続テスト用コマンドとsslの起動に関して

単なる覚書ですが、
以下のコマンドで可能

openssl s_client -connect localhost:443


apachectlのstartsslが使えなくなるって事で
対応はどうしたら良いか調べてみたら
コンフィグの中のDefine SSL

を消しておけって書いてあった。

2.2系からは対応していないらしい