2009.02.25

FreeBSDでRAID1(mirror)の設定・・・(FreeBSD)

災害は忘れた頃にやってくる。24H運転のサーバを運営していると、何時か突然にHDDの故障に見舞われる。そのために、2台のサーバで真夜中にお互いのデーター領域をBackupするようにしているが、最悪故障前24時間のデータは失われるし、なによりもHDDを交換して、再度サーバを立ち上げ直すのは簡単な仕事ではない。優に1日ぐらいは必要である。
そこで、HDDをミラー構成にして突然の事故に備えることにした。
FreeBSDではgmirrorというソフトウェアミラーが備わっているので、これを用いる。
まず、空いているPCを用いてトライアルすることにし、以下はその記録である。

1. 準備

FreeBSD releaseの最新版である7.1版の7.1-RELEASE-i386-disc1.isoと7.1-RELEASE-i386-livefs.isoをダウンロードし、どちらもCDRを作成しておく。
実験用に用意したPCには2台のHDDを入れ、ad0(40GB)とad2(160GB)となっていて、ad0にはFreeBSD-7.1を普通にインストールしておいた。なお、DVDがacd1に割り付けられている。

2. gmirrorの設定

普通はLivefs CDで起動するが、テストに用いたPCでは何故か起動できなかったので、インストールCDで起動して、以下に示すように進めた。
なお、Livefs CDで起動出来ても、同じように進んで行き、途中でCDの入れ替えが不要なだけである。

(1) FreeBSDのインストールディスクで起動し、国の選択でJapanを選び、キーボードのコードはJapanese 106を選ぶ。ここで英文でも良いと思ってUSAのまま進めると、キーボードが日本語キーボードのとき、記号の配置が違い苦労する。

mirror_01.jpg
mirror_02.jpg

(2) キーボードを選んで現れる画面で、
Fixit: Repair mode with CDROM/DVD/Floppy or start shellを選択する。

mirror_03.jpg

(3) 現れた画面で、
CDROM/DVD:Use the “live” filesystem CDROM/DVD を選ぶ。
Livefs CDを使ってBootしても、ここまでは同じで、これ以降はCDの入れ替え無しで、次の3. 設定に進む。

mirror_04.jpg

(4) Please insert a FreeBSD live filesystem CD/DVD and press return のメッセージがでたら、CDをFreBSD Live CD に交換してReturnを押す。

mirror_05.jpg

3. 設定

# Fixitのプロンプトが表示されるので、下記のように設定する。
IDEではad0, ad2のようにprimaryとsecoondaryのMaster接続がよく、sataではad4, ad6がよい。dmesgでドライブ名を調べておくとよい。
なお、ミラーの形式のround-robinは負荷分散の方式の1つである。他にも幾つかの種類があるが、round-robinが最もポピュラーらしい。

Fixit# chroot /dist
Fixit# kldload geom_mirror           ← gmirrorのload
Fixit# exit
Fixit# gmirror label -b round-robin gm0 ad0 ← round-robinでmirrorを構成

下記のメッセージが表示される。

Metadata value stored ad0.
Done.

Statusを表示してみると、下記のように表示されmirror機能が出来ている。

Fixit# gmirror status
 Name         Status   Components
mirror/gm0  COMPLETE    ad0

出来たミラーディスクを/mntにマウントしてfstabを書き換える。
sedの替わりに、eeで/mnt/etc/fstabを編集して/dev/ad4s1a → /dev/mirror/gm0s1aのように全ての ad4をmirror/gm0に変更しても良い。なお、viはtemporary file領域がいるので使用不可。

Fixit# mount /dev/mirror/gm0s1a /mnt
Fixit# sed -i bak s/ad0/mirror\/gm0/ /mnt/etc/fstab/

geom_mirrorの読み込みを/boot/loader.confに設定し、/etc/rc.confも修正。
これは、eeを使った方が楽かもしれない。

echo 'geom_mirror_load="YES"' >> /mnt/boot/loader.conf
echo 'swapoff="YES"' >> /mnt/etc/rc.conf

CDRを抜いて、再起動する。立ち上がったらroot権限でad2を組み込む。

# gmirror insert gmo ad2   ← ad2の組み込み

これで、同期化が始まる、statusを見ると、

# gmirror status
   Name     Status  Components
  mirror/gm0  DEGRADED    ad0
                  ad2(2%)

30分ほどでad2(100%)になりミラー構成は完了した。

# gmirror status
Name          Status   Components
mirror/gm0     COMPLETE      ad0
               ad2

4. 状態の監視

ミラーで動作させていると、1台のHDDが故障してもサーバの動作は続行するが、1台が故障した時点で対処しないと、ミラーにしている意味がない。
このために、/etc/defaults/periodic.confを編集してミラーの状態を毎日メールで知らせてもらうようにする。
/etc/defaults/periodic.confをみると、下記のようにDaily check項目の406番が”NO”になっている。

# 406.status-gmirror
daily_status_gmirror_enable="NO"                # Check gmirror(8)

“NO”を”YES”に直しても良いのだが、/etc/defaults/rc.confの内容は書き換えず、/etc/rc.confを作成して指定するのと同様に/etc/periodic.confを作って記述する。この記述が優先される。

# cd /etc
# vi periodic.conf
daily_status_gmirror_enable="YES"
: wq

これで、毎日のdaily checkメールにgmirror statusの情報が載る。


2009.01.31

ubuntuのインストル後の設定・・・(ubuntu)

ubuntuのインストールは比較的簡単に終わることができたが、DellのInspiron Mini 9はHDDレスで、Flash Memoryを使ったSSDであるため、設定もしくは修整を行う方が好ましいことがある。以下に設定した内容を記す。
(1) Swapの停止

SSDのFlash Memoryは書き込み回数の寿命が10万回から50万回と言われており、不要な書き込みは行わないようにしたい。RAMは2GBに交換したので、Swapの必要性もない。
インストール時にSwap領域を確保しなければ良かったのだが、自動で割り振ったため、Swapを行うようになってしまっている。
そこで、/etc/fstabを編集してSwap領域のマウントの行頭に#を付けてコメントアウトする。
# /dev/sda5
#UUID=0da6389d-3ed9-4378-887d-fff480f52ba4 none swap sw 0 0
これで、rebootすれば、SWapはなされない。

(2) FirefoxのCacheもRAM diskを作って使用する。

まず、RAM diskをマウントするディレクトリーを作る。
# mkdir /media/ramdisk
そして、fstabに下記の行を追加するとRAM diskが確保される。size=64mは64MB確保することを示す。
/dev/shm /media/ramdisk tmpfs  size=64m 0 0
そして
# sudo mount -a
とすると、RAM diskがマウントされるので、Firefoxを起動して、アドレス欄に「about:config」と入力。
動作保証対象外になります!と警告文が表示され[細心の注意を払って使用する]と書かれたボタンが現れるので、クリックして「新規作成」→「文字列」を選択し、それぞれ次のように設定する。
設定名:「browser.cache.disk.parent_directory」
値:「/media/ramdisk」
設定後はFireFoxを再起動して、完了する。


2009.01.12

ubuntu(ちょっと浮気です)インストール・・・(ubuntu)

最近、FreeBSDで書くことが無くなってきて、更新が滞っていた。
ところで、最近Net Noteと称する小型で安価なNote PCがASUS、HP、Dellなどから販売されたので、遊び道具にとDellのInspiron Mini 9を買ってしまった。4GBのSSDと512MBのRAMの一番安いモデルで39,480円であった。
やはり、メモリーとSSDは多くしたいと、Transcendの2GB(Transcend SODIMM DDR2 PC2-5300 2GB)とBUFFALOの32GBのSSDを買って交換した。
Mini 9はCDROMやDVDのドライブが付いていないので、USB接続の外付けのドライブを買ってきて、インストールすれば楽なのだが、インストールするためのみに外付けのCDROMドライブを買うのも能の無い話しなので、USBメモリーからインストールすることにした。以下はその手順である。

1. 準備

準備は普段使っているWindows XPが乗っているデスクトップPCを使った。
(1) ubuntuはubuntu Japanese Teamのページから日本語版の最新の8.10のiso imageをダウンロード。
(2) インストール用のUSBメモリー作成ツールとして、unetbootinをダウンロード
(3) unetbootinはインストールする必要もなく、ダウンロードしたものを、そのままダブルクリックで起動。

unetbootin.jpg

a. Distributionでubuntuで8.10Liveを選択。
b. DiskimageでISOを選び、isoimageの場所を選択。
c. 最下段のTypeでUSB Driveを選び、Drive名が目的の
 USBメモリーであることを確認。

OKボタンを押すと、進行状況の表示画面になり、数分で終了する。
(4) USBメモリーのファイルに以下の修正が必要

a. USBメモリを開いて、「syslinux.cfg」という
 ファイル名称を、「syslinux.backup」と変更。
b. isolinuxフォルダに移動し、この中の「isolinux.cfg」ファイル
 の名称を、「syslinux.cfg」に変更。
c. 一番上のフォルダに移動して、「isolinux」フォルダの名称を
 「syslinux」に変更。

2. インストール

インストールが終わっても、無線LANは修正が必要とのことであるので、有線のLANケーブルを接続しておく。そして、出来上がったUSBメモリーをMini 9に挿し、Power ONして”0″キーをチョンチョンと押し続けるとブートの選択画面が出るので、USBを選択してEnterキーを押すと、インストール画面になる。後はCDからのインストールと同じである。ubuntu以外にWindowsなどを入れる積りはないので、32GBのSSDを全部使用にしてインスートルを行った。

3. 修正作業

既知の問題として、無線LANとスピーカーから音が出ないことの修正を行う。
(1) 無線LAN
システム→システム管理→Synapticパッケージマネージャー と進んで
linux-backports-modules-intrepidをインストール。
なお、ubuntu Japanese Teamは問題を把握していたが、リリースのパッケージに修正版を入れられなかったようなので、次回リリースでは解決すると思われる。
(2) 音源ドライバー
/etc/modprobe.d内にあるalsa-baseを修正する。
「端末」を立ち上げ、
  sudo gedit /etc/modprobe.d/alsa-base
 設定ファイルが立ちあがるので、一行を追加

  options snd-usb-usx2y index=-2
  options snd-usb-caiaq index=-2
  options snd-hda-intel model=dell ←ここに、この一行を追加!
  # Ubuntu #62691, enable MPU for snd-cmipci
  options snd-cmipci mpu_port=0x330 fm_port=0x388

保存して終了する。
Mini 9の有線LANケーブルを外して再起動。今度は無線LANが働くので、自分の無線LANのアクセスポイント名を選んでPassword Phraseを入れ接続する。

mini9.jpg


2008.07.05

VMwareでFreeBSD 7.0を動かす・・・(FreeBSD)

サーバを7.0-RELEASEにしたので、Desk Topで使っているWindows XPマシンで動かしているVMware内のFreeBSDも7.0-RELEASEに変えた。
インストールは問題なく終わったが、以前に期間限定版のVMware Serverから抽出したVMware-Toolsをインストールしたら最後の方でエラーになった。
しかたがないので、vmware-tools-distribのbinディレクトリー内にあるvmware-uninstall-tools.plを使ってuninstallした。
幸い、portsにvmmouse driverがあるのでこれをインストール。

# cd /usr/ports/x11-drivers/xf86-input-vmmouse
# make install clean

そして、xorg.confでmouse driverをvmmouseに変更。

Section "InputDevice"
Identifier  "Mouse0"
Driver      "vmmouse"
Option      "Protocol" "auto"
Option      "Device" "/dev/sysmouse"
Option      "ZAxisMapping" "4 5 6 7"
EndSection

次に、日本語入力の設定を行う。
長い間、cannaを入れてkinput2で入力変換を使っていたが、最近ではscimの方が高性能としてこれを使うのが一般化しているらしい。そこでpackageから
ja-anthy-9100C、ja-scim-anthy-1.2.4を入れる。
そしてhome directoryの.xinitrcの最後に次を付ける。

LANG=ja_JP.eucJP; export LANG
LC_CTYPE=ja_JP.eucJP; export LC_CTYPE
XMODIFIERS=@im=SCIM;  export XMODIFIERS
GTK_IM_MODULE=scim;  export GTK_IM_MODULE
QT_IM_MODULE=scim;  export QT_IM_MODULE
scim -d &
exec startkde

Xwindowを立ち上げて、scimを起動するには、CTL-Spaceで行う。画面の左下に下図のようなMS IMEに似た表示が出る。
scim.png
日本語とアルファベット入力の切り替えは[半角/全角・漢字]ボタンで行う。これもWindowsと同じで使いやすい。
なるほど、変換効率も良く、これなら文章を書いても良い。このブログもこれで書いている。
なお、[CTL-Shift]で言語圏を切り替えられるが、使う必要はないだろう。


2008.05.24

BIND 9.3.4 (DNSサーバ)・・・(FreeBSD)

FreeBSDの6.3で添付のbindが9.3.4になった。もちろん、7.0-RELEASEもbindは9.3.4だ。
大きな特徴は、named.confで外向きと内向きの記述を書き分けられるようになったことだ。外向きは必要ないので、内向きのみ作ったnamed.confと合わせて正逆zoneファイルの例を下記に示しておく。

1.named.conf

options {
directory       "/etc/namedb";
pid-file        "/var/run/named/pid";
dump-file       "/var/dump/named_dump.db";
statistics-file "/var/stats/named.stats";
forwarders {
210.188.224.10;
};
};
view "internal" {
match-clients { 192.168.1.0/24; 127.0.0.0/8; };
recursion yes;
zone "." {
type hint;
file "named.root";
};
zone "localhost" {
type master;
file "master/localhost.zone";
};
zone "0.0.127.IN-ADDR.ARPA" {
type master;
file "master/localhost.rev";
};
zone "fam.cx" {
type master;
file "slave/canal.zone";
allow-update { none; };
};
zone "1.168.192.in-addr.arpa" {
type master;
file "slave/canal.rev";
allow-update { none; };
};
};

2. localhost.zone

$TTL    86400
@             IN      SOA   uls.fam.cx.  root.uls.fam.cx.(
2005071701      ; Serial
3600            ; Refresh
900             ; Retry
3600000         ; Expire
3600 )          ; Minimum
IN      NS    uls.fam.cx.
localhost.    IN      A     127.0.0.1

3. localhost.rev

$TTL    86400
@             IN      SOA   uls.fam.cx.  root.uls.fam.cx.(
2005071701      ; Serial
3600            ; Refresh
900             ; Retry
3600000         ; Expire
3600 )          ; Minimum
IN      NS    uls.fam.cx.
1             IN      PTR   localhost.

4. 正引きzone file(canal.zone)

$TTL 3600       ; 1 hour
@             IN      SOA   uls.fam.cx.  root.uls.fam.cx.(
2006121601 ; serial
10800      ; refresh (3 hours)
3600       ; retry (1 hour)
3600000    ; expire (5 weeks 6 days 16 hours)
3600       ; minimum (1 hour)
)
IN       NS      uls.fam.cx.
IN       MX      10 uls.fam.cx.
uls            IN       A       192.168.1.5
www            IN       CNAME   uls
ftp            IN       CNAME   uls

5. 逆引きzone file(icanal.rev)

$TTL 3600       ; 1 hour
@             IN      SOA   uls.fam.cx.  root.uls.fm.cx.(
2006121602 ; serial
10800      ; refresh (3 hours)
900        ; retry (15 minutes)
3600000    ; expire (5 weeks 6 days 16 hours)
3600       ; minimum (1 hour)
)
IN NS   uls.fam.cx.
5                       IN PTR  uls.fam.cx.

« Previous | Next »