2006-05-01

λ [FreeBSD] Using Software RAID-1 with FreeBSD

なんとなくGEOMの時代らしいことは知っていたが、GELIだけじゃないのね。 普通にインストールが完了した時点で、再起動せずに Alt-F4 でコンソール呼び出して作業、ってところがいい。

…けど、何かあった時の事を考えると FreeSBIE CD からブートしてRAID構成してからインストールの方が安心だな。

めでたく? HostRAID によるハードウェアミラーリングに失敗したことだし、後で gmirror 使ってミラーリングしてみやう。

λ [FreeBSD] 6.1-RC2

4月中にリリ−スになんなかった。

λ FreeBSD Handbook RAID1 - Mirroring

インストーラ内で作業するんでなければ Handbook の方が便利。 bootセクターの書き込み方とか、bsdlabel プログラムとか、昔と違う〜

camcontrol devlist
camcontrol rescan scbus0
kldload geom_mirror
gmirror label -vnb split gm0 da1 da2
fdisk -vBI /dev/mirror/gm0
bsdlabel -wB /dev/mirror/gm0s1
bsdlabel -R /dev/mirror/gm0s1 gm0s1disklabel
newfs -U -L root /dev/mirror/gm0s1a
newfs -U -L var  /dev/mirror/gm0s1d
newfs -U -L usr  /dev/mirror/gm0s1e
newfs -U -L home /dev/mirror/gm0s1f

mount /dev/mirror/gm0s1a /mnt
mkdir /mnt/var /mnt/usr /mnt/home
dump -L -0 -f- / |(cd /mnt && restore -r -v -f-)
mount /dev/mirror/gm0s1d /mnt/var
dump -L -0 -f- /var |(cd /mnt/var && restore -r -v -f-)
mount /dev/mirror/gm0s1e /mnt/usr
dump -L -0 -f- /usr |(cd /mnt/usr && restore -r -v -f-)
mount /dev/mirror/gm0s1f /mnt/home
dump -L -0 -f- /home |(cd /mnt/home && restore -r -v -f-)
rm /mnt/restoresymtable /mnt/var/restoresymtable /mnt/usr/restoresymtable /mnt/home/restoresymtable

echo 'geom_mirror_load="YES"' >> /mnt/boot/loader.conf
echo "1:da(1,a)/boot/loader" > /mnt/boot.config
echo "gmirror configure -b prefer gm0" > /mnt/etc/rc.early
chmod +x /mnt/etc/rc.early
echo "gmirror configure -b split gm0" > /mnt/etc/rc.local
chmod +x /mnt/etc/rc.local
cp /mnt/etc/fstab /mnt/etc/fstab.da0 # バックアップ
sed 's/da0/mirror\/gm0/' /mnt/etc/fstab.da0 > /mnt/etc/fstab

gmirror configure -a gm0
gmirror rebuild gm0 da2 # 一応リビルドしとく

10GB以上あるディスクだったら何でも適用できる gm0s1disklabel ファイル:

# /dev/mirror/gm0s1:
8 partitions:
#        size   offset    fstype   [fsize bsize bps/cpg]
  a:     512M       16    4.2BSD     4096 16384  75
  b:       1G        *      swap
  c:        *        0    unused        0     0         # "raw" part, don't edit
  d:       4G        *    4.2BSD
  e:       4G        *    4.2BSD
  f:        *        *    4.2BSD

昔と違ってセクター数を電卓で計算しなくていいんだねえ。

dump+restore中に gstat -I 5s コマンドを実行してみたところ。ディスクアクセス状況の表示おもろい。

dT: 5.001  flag_I 5000000us  sizeof 240  i -1
 L(q)  ops/s    r/s   kBps   ms/r    w/s   kBps   ms/w   %busy Name
    0      0      0      0    0.0      0      0    0.0    0.0| fd0
    0      0      0      0    0.0      0      0    0.0    0.0| acd0
    3    316    316    846    6.3      0      6    8.0   76.4| da0
    3    316    316    846    6.3      0      6    8.4   76.5| da0s1
    0      0      0      0    0.0      0      0    0.0    0.0| da0s1a
    0      0      0      0    0.0      0      0    0.0    0.0| da0s1b
    0      0      0      0    0.0      0      0    0.0    0.0| da0s1c
    0      0      0      0    0.0      0      0    0.0    0.0| da0s1d
    0      0      0      4   28.4      0      0    0.0    1.1| da0s1e
    3    316    316    842    6.3      0      6    8.9   76.6| da0s1f
    0      0      0      0    0.0      0      0    0.0    0.0| md0
    0    492     56    160    3.8    437   2512   64.0   85.8| da1
    1    547    111    324    3.7    436   2509   72.0   99.1| mirror/gm0
    1    492     56    164    3.5    436   2509   54.3   81.9| da2
    1    547    111    324    3.7    436   2509   72.1   99.1| mirror/gm0s1
    1    132     42    176    2.2     90   1225   10.6   99.0| mirror/gm0s1a
    0      0      0      0    0.0      0      0    0.0    0.0| mirror/gm0s1b
    0      0      0      0    0.0      0      0    0.0    0.0| mirror/gm0s1c
    0      0      0      0    0.0      0      0    0.0    0.0| mirror/gm0s1d
    0      0      0      0    0.0      0      0    0.0    0.0| mirror/gm0s1e
    0    415     68    148    4.7    346   1284   88.8   45.3| mirror/gm0s1f

ハードディスク交換後の オンラインでのリビルド手順。対象が da2 だった場合

# 再スキャンする前に、failしたドライブに対する設定を消去しておく
gmirror forget gm0
# SCSIバスを再スキャンする。camcontrol rescan scbus0 や camcontrol rescan scbus0:3:0 などではうまくいかない
camcontrol rescan all
# ちゃんと認識したかどうかを確認する
camcontrol devlist
# 新しいドライブをミラーに参加させる
gmirror insert gm0 da2

λ [FreeBSD] gmirror ディスク障害テスト

3台でミラーを構成した状態から、ID=0のドライブを抜いてリブートしたところ、無事再起動に成功。 gmirror status で確認すると、DEGRADED と表示される。

で、gmirror forget gm0をしないで camcontrol rescan all をしたら勝手にリビルド開始した。 rescan で新たに割り当てられる da2 が元々ミラーに参加していて DEGRADED 状態になっていたからではあるが、 予想以上に gmirror いいな。

つーか過去の経験からいくと Software ミラーによるルートパーティションの構成としては、経験上最も管理が楽だ。

λ FreeBSD Expert 2006 の GEOM の話

glabel (geom_label) を使うと、デバイスファイル名にかかわらず disk 内に記録された名前でアクセスできるという話。

ミラーリングしない場合に使うといいかも。

λ Apache 2.2.2

ports のとこはそのうち追従。CHANGES みると、mod_proxy ネタが多い感じだ。

[]