最新 追記

おこたの国


2008-12-02 ようやく四巻の真ん中あたり。遅っ!

_ [MANGA] 寝る前まんが

ということで、「…俺はメガネの方がいいと思う…」と信一朗が言ったのは、四巻の50ページでした。ふむふむ。確かにあったな、こういうエピソードが。

ちなみに、あほ毛の女ジャージ先生は三巻の79ページから登場。顔長の年配ジャージ女先生はこのあたりでほぼ退場してるっぽい。

なんてどうでもいい情報なんだ。


2008-12-30 どうして年末年始は PCいじりばかりしてるのか

_ [COMP] SSD 導入

マシンをファンレスにしたのがおよそ二年前。以来、夏になるたび送風機のお世話になってきた。VIA C7 は悪くない。こいつは殆ど熱を持たない。んじゃ何が? ディスクである。大枚はたいて IO-DATA の HDR−MDSA を導入したんだけど、こいつの基盤部分がそこそこ熱くなる。いや、通常の基準でいけば大したことはないんだけど、ファンレスで狭いところに密封されてる環境じゃ、内部温度が下がる理由がないもんね(CPUはケースの放熱器に接続されてるからか、そんなに温度は上がらない)。そんなこんなで、夏は送風機で風を当ててやるはめに。ファンの音が耐えられなくてファンレスにしたというのに本末転倒も甚しい。というわけで熱対策というか騒音対策で SSD 導入だ。

SSDへデータ移行中の図

画像を見ればメーカーは瞭然。型番は MSD-SATA3525-032NA なるもので、先月『 SLC でこの値段』などと騒がれたアレである。あれこれ検索すると芳しくなさげな評判ばかりだったんだけど、逆に決定的にマズいというのも見当たらなかったので、ちょっくら冒険。

スピードはっつうと、まあそこそこ。少なくとも HDR−MDSA よりは圧倒的に速いぞ。夜中の daily job では、gamba, kamui とも kamui 上の cvsupd へ向けて csup をかける。おかげで、kamui の daily job は 1時間強かかることが多かったんだが、10数分で終わるようになりましたがね。まぁ、HDR-MDSA は安定性を求めて買ったわけで、スピードはハナから期待してなかったんだけど、こうも違うかねってくらいの差が出ましたな。まぁ、効果の大半は SSD 化よりも noatime だろうけど。

それはともかく来年になれば、Intel の X25-E に匹敵するようなのが安価でゾロゾロ出てくるだろうに、こんなタイミングので更新はやっぱり残念なところ。まぁ、もう一度このまま夏を迎えて、留守中に送風機が発火したりして火事になってるんでは、なんて妄想に悩まされ続けるつもりはなかったけどね。それよりも、gamba では、

Nov  5 00:00:59 gamba kernel: fsync: giving up on dirty
Nov  5 00:00:59 gamba kernel: 0xc2ceebb0: tag devfs, type VCHR
Nov  5 00:00:59 gamba kernel: usecount 1, writecount 0, refcount 285 mountedhere 0xc2d98000
Nov  5 00:00:59 gamba kernel: flags (VV_COPYONWRITE)
Nov  5 00:00:59 gamba kernel: v_object 0xc14607c0 ref 0 pages 20298
Nov  5 00:00:59 gamba kernel: lock type devfs: EXCL (count 1) by thread 0xc3218210 (pid 68930)
Nov  5 00:00:59 gamba kernel: dev ad0s1a

てなエラーが出てたってことが、タイミングを計ってる余裕を失わせたというか。

恐ろしい事に、このエラーに気づいたのが先週末だという。写真をよくみれば分かると思うけど、HDR−MDSA に 12V が接続されてない(赤黒しか入ってない)。実は 12V が供給されてないと状態を知らせるブザーが鳴らないんだよね。もしもきっちり接続してればエラーを検出してたのかも。ま、いまさらそれがわかってもね。

さて、熱はどうなったか。

これまでは CPU温度しか記録していなかった。迂闊。で、この項目については更新前後で 26度前後と変化がなく、役にたたない。mbmon 入れて調べたところ、kamui のM/B のセンサーは 50度を超えている。蓋をしてない gamba で 40度。これはもう更新前のデータがないと意味がない。ディスクの温度はどうかってーと、HDR−MDSA は S.M.A.R.T 非対応、MSD-SATA3525-032NA は対応してるけど温度は採ってこれないときた。

てなことで、ひたすら感覚的な話でいくと… kamui だけ SSD 化した状態で 2台並べて 1日放置してたんだけど、ディスクのある辺りをケースの外から触ってみた感じでは、gamba がほんのり暖かいのに比べ、kamui は熱を感じなかった。ま、金属ケースなのに触ってヒヤっとしないってのは熱が出てるってことだけど、SSD 化がそれなりに熱対策になったってことじゃなかろうか。お願いだからなっててくれ。

今後は Mother Board の温度も記録。今年の夏はどうなるか。この無粋な送風機を捨てることができますように。

_ [COMP] zfs 導入

せっかくディスクの移行をするんだからと、えいやで zfs に移行。 「How to install FreeBSD 7.0 under ZFS」を参考書として全面依存。「のうはう」の「ZFSメンテナンスの日々」シリーズが副読本。

方針は簡素。

  • boot 以外はすべて zfs に。
  • SSD 2個で mirror 構成。
  • home 以外は atime=off で。

カーネル変更

ZFS Tuning Guide を参考に

  • option KVA_PAGES=512 を config に加えて kernel を作り直し
  • loader.conf に以下を追加して halt
zfs_load="YES"
vm.kmem_size="512M"
vm.kmem_size_max="512M"
vfs.zfs.zil_disable="1"

DISK 初期化

これまで使ってなかった SATA のコネクタ 2つ(2つしかない(涙))に SSD を 2台接続して起動。すると、ad4, ad6 として認識。ad5 が飛ばされているのが面白い。

kamui$ dmesg | grep 'ad[46]'
ad4: FAILURE - SET_MULTI status=51<READY,DSC,ERROR> error=4<ABORTED>
ad4: 30520MB <MTRON MSD-SATA3525 0.19R1H2> at ata2-master UDMA100
ad6: FAILURE - SET_MULTI status=51<READY,DSC,ERROR> error=4<ABORTED>
ad6: 30518MB <MTRON MSD-SATA3525 0.19R1H2> at ata3-master UDMA100

妙なエラーが出てるが、ネットで調べると、サポートしてないコマンドがあるってだけで問題ないらしいので以後は無視。「のうはう」に習い sade(8) を利用し、Disk Partition 切りと disklabel 書きをおこなう。swap サイズは A = Auto Defaults で Disklabel Editor に計算させたのを使った。以下、A を押下した状態。どうでもいいことだが、/ が 512MB って少なすぎだな。

                         FreeBSD Disklabel Editor

Disk: ad4       Partition name: ad4s1   Free: 0 blocks (0MB)

Part      Mount          Size Newfs   Part      Mount          Size Newfs
----      -----          ---- -----   ----      -----          ---- -----
ad4s1a    /             512MB UFS2   Y
ad4s1b    swap         1894MB SWAP
ad4s1d    /var         1971MB UFS2+S Y
ad4s1e    /tmp          512MB UFS2+S Y
ad4s1f    /usr        25629MB UFS2+S Y

ともあれ、これを編集して以下のようにする。partition d は、mountpoint を適当に指定して作ったあと、M = Mount pt. で値を空にする。

                         FreeBSD Disklabel Editor

Disk: ad4       Partition name: ad4s1   Free: 0 blocks (0MB)

Part      Mount          Size Newfs   Part      Mount          Size Newfs
----      -----          ---- -----   ----      -----          ---- -----
ad4s1a    /            1024MB UFS2   Y
ad4s1b    swap         1894MB SWAP
ad4s1d    <none>      27601MB *

このまま書き込むと、partition d は UFS2 扱いになってしまうので、念のため bsdlabel(8) で unknown に変更しておく。

kamui$ bsdlabel ad4s1
# /dev/ad4s1:
8 partitions:
#        size   offset    fstype   [fsize bsize bps/cpg]
  a:  2097152        0    4.2BSD     2048 16384 28552
  b:  3878912  2097152      swap
  c: 62504001        0    unused        0     0         # "raw" part, don't edit
  d: 56527937  5976064    unused        0     0

ところで、今回購入した SSD 4個のうち、kamui の ad6 にした個体だけ容量が 2MB ほど足りなかった(先の dmesg の出力参照)。なので、partitiion d が残り 3個と同じになるよう swap の数値を減らして調整している。

zfs 設定

mirror 構成で zpool 作成。

# zpool create tank ad4s1d ad6s1d

一気に zfs filesystem を作成。tank/ncvs を作るのが kamui。tank/news を作るのが gamba になる。tank/var, tank/tmp に copies=3 はどうよ? とも思うのだが、とりあえずこれで様子見をする。変更は簡単だし。

# zfs set atime=off tank
# zfs create -o compression=gzip                         tank/root
# zfs create -o compression=gzip -o copies=3 -o atime=on tank/home
# zfs create -o compression=gzip                         tank/usr
# zfs create                     -o copies=3             tank/var
# zfs create                     -o copies=3             tank/tmp
# zfs create                                             tank/distfiles
# zfs create -o compression=gzip                         tank/ncvs (or tank/news)

tank/root を root にし、データ移行のために tank/usr 以下を実際の相対位置に変更。最初っから filesystem 名を mountpoint と同じにしときゃいい話なんだが、そこは趣味ということで。さらに言えば、tank の mountpoint を none にした段階で、すべての filesystem の mount は外れてしまうので、手間は変わらないのだ。

# zfs set mountpoint=none tank
# zfs set mountpoint=/tank tank/root
# zfs set mountpoint=/tank/usr tank/usr
# zfs set mountpoint=/tank/var tank/var
# zfs set mountpoint=/tank/tmp tank/tmp
# mkdir /tank/usr/ports
# zfs set mountpoint=/tank/usr/ports/distfiles tank/distfiles
# zfs set mountpoint=/tank/usr/home tank/home
# zfs set mountpoint=/tank/usr/home/ncvs tank/ncvs
# zfs list
NAME             USED  AVAIL  REFER  MOUNTPOINT
tank             354K  26.3G    25K  none
tank/distfiles    18K  26.3G    18K  /tank/usr/ports/distfiles
tank/home         19K  26.3G    19K  /tank/usr/home
tank/ncvs         18K  26.3G    18K  /tank/usr/home/ncvs
tank/root         18K  26.3G    18K  /tank
tank/tmp          18K  26.3G    18K  /tank/tmp
tank/usr          32K  26.3G    32K  /tank/usr
tank/var          18K  26.3G    18K  /tank/var

zfs set mountpoint=foo すると、ディレクトリ foo は自動で作られる。もしかしたら mkdir -p foo 相当のことをしてくれている可能性もある。途中 mkdir してるんだけど、要らなかったのかも。

データ移行

作業前に incoming なデータを扱う daemon を停止。メールだけは半端にできないんで止めとかきゃ、程度。single user にしないあたりがいいかげんなところである。データコピーは cpio で。いやぁ、cpio って始めて使ったよ。

# cd /
# find -x / | cpio -pmd /tank

UFS2 な partition a に、single user boot できるよう miniroot を作成しておく。

# echo .[cp]* [Cbdelpr]* sbin
.cshrc .profile COPYRIGHT bin boot dev dist entropy etc lib libexec proc rescue root sbin
# for i in 4 6; do
> newfs /dev/ad${i}s1a
> mount /dev/ad${i}s1a /mnt
> find -x .[cp]* [Cbdelpr]* sbin | cpio -pmd /mnt
> mtree -f /etc/mtree/BSD.root.dist -p /mnt
> umount /mnt
> done

小細工

7.0-RELEASE ではまだ zfs で boot できない。「のうはう: ZFSメンテナンスの日々 #7 ZFS Boot 編」みたく zfsboot を導入すればできなくもないらしいが、まぁ、RELEASE でサポートされるまで待つってことで、参考書通りに小細工をする。

# rm -rf /tank/boot
# mkdir /tank/bootdir
# ln -s bootdir/boot /tank/boot

/tank/boot/loader.conf に vfs.root.mountfrom="zfs:tank/root" を追加。念のため、fstab も適当に作っておく。

# for i in 4 6; do
> mount /dev/ad${i}s1a /mnt
> echo 'vfs.root.mountfrom="zfs:tank/root"' >> /mnt/boot/loader.conf
> cat <<EOF >/mnt/etc/fstab
> # Device		Mountpoint	FStype	Options		Dump	Pass#
> /dev/ad${i}s1a		/               ufs	rw		1	1
> /dev/ad${i}s1a		none		swap	sw		0	0
> /dev/acd0		/cdrom		cd9660	ro,noauto	0	0
> EOF
> umount /mnt
> done

/tank/etc/fstab も参考書通りに用意。

# cat /tank/etc/fstab
# Device		Mountpoint	FStype	Options		Dump	Pass#
/dev/ad4s1a		/bootdir	ufs	rw		1	1
/dev/ad4s1b		none		swap	sw		0	0
/dev/acd0		/cdrom		cd9660	ro,noauto	0	0

ここで優雅な環境をあきらめ、shutdown now して single user へ。

# shutdown now
# cd /

tank 以下の mountpoint を実位置に

# zfs set mountpoint=/usr tank/usr
# zfs set mountpoint=/var tank/var
# zfs set mountpoint=/tmp tank/tmp
# zfs set mountpoint=/usr/ports/distfiles tank/distfiles
# zfs set mountpoint=/usr/home tank/home
# zfs set mountpoint=/usr/home/ncvs tank/ncvs

tank/root は boot 時に / に mount されるので、automount されないように mountpoint=legacy をセット

# zfs set mountpoint=legacy tank/root

これで終り。あとは reboot して様子を眺める。ふっふっふ。

完了

home を copies=3 にしてるため、kamui では移行前より膨れ上ってしまった。gamba では減っている。

oldkamui$ df -h
Filesystem        Size    Used   Avail Capacity  Mounted on
/dev/ad0s1a        35G     13G     19G    41%    /
devfs             1.0K    1.0K      0B   100%    /dev
kamui$ df -h
Filesystem        Size    Used   Avail Capacity  Mounted on
tank/root         8.3G     22M    8.3G     0%    /
devfs             1.0K    1.0K      0B   100%    /dev
/dev/ad4s1a       989M    232M    678M    25%    /bootdir
tank/tmp          8.3G      0B    8.3G     0%    /tmp
tank/usr           12G    3.3G    8.3G    28%    /usr
tank/home          21G     12G    8.3G    59%    /usr/home
tank/ncvs         9.6G    1.3G    8.3G    13%    /usr/home/ncvs
tank/distfiles    9.2G    908M    8.3G    10%    /usr/ports/distfiles
tank/var          8.7G    339M    8.3G     4%    /var
oldgamba$ df -h
Filesystem        Size    Used   Avail Capacity  Mounted on
/dev/ad0s1a        35G     21G     11G    65%    /
devfs             1.0K    1.0K      0B   100%    /dev
fdescfs           1.0K    1.0K      0B   100%    /dev/fd
gamba$ df -h
Filesystem        Size    Used   Avail Capacity  Mounted on
tank/root          21G    7.4M     21G     0%    /
devfs             1.0K    1.0K      0B   100%    /dev
/dev/ad4s1a       989M    230M    680M    25%    /bootdir
fdescfs           1.0K    1.0K      0B   100%    /dev/fd
tank/tmp           21G    128K     21G     0%    /tmp
tank/usr           22G    1.2G     21G     5%    /usr
tank/home          22G    941M     21G     4%    /usr/home
tank/news          23G    1.7G     21G     7%    /usr/local/news
tank/distfiles     21G    232M     21G     1%    /usr/ports/distfiles
tank/var           22G    1.1G     21G     5%    /var

kamui 側の snapshot をどう採るかを考えないと。home の snapshot を多く確保するなら、copies=2 にしてしまった方がいいかもしれない。これは正月かけてゆっくり検討しよう。

ところで、compression=gzip してるところでは、妙なものを見ることができる。

$ ls -l /usr
total 80
lrwxrwxrwx   1 root  wheel   10 Dec 28 22:58 X11R6 -> /usr/local
drwxr-xr-x   2 root  wheel  424 Dec 28 19:07 bin
drwxr-xr-x   2 root  wheel    2 Jan  8  2006 compat
drwxr-xr-x   2 root  wheel   16 Dec 28 19:29 games
drwxr-xr-x   9 root  wheel    9 Dec 29 02:11 home
drwxr-xr-x  47 root  wheel  243 Dec 28 19:08 include
drwxr-xr-x   6 root  wheel  468 Dec 28 19:08 lib
drwxr-xr-x   5 root  wheel    5 Dec 28 19:08 libdata
drwxr-xr-x   5 root  wheel   61 Dec 28 19:08 libexec
drwxr-xr-x  16 root  wheel   16 Dec 28 19:18 local
drwxr-xr-x   3 root  wheel    3 Dec 28 19:47 obj
drwxr-xr-x  70 root  wheel   84 Jan  1 03:08 ports
drwxr-xr-x   2 root  wheel  265 Dec 28 19:18 sbin
drwxr-xr-x  26 root  wheel   26 Dec 28 19:21 share
drwxr-xr-x  23 root  wheel   31 Dec 28 19:29 src

ディレクトリのサイズがこんな半端なものになってるのを見たのは始めてだ。もちろん一般ファイルでは圧縮前のサイズが表示される。

こぼれ

移行後、inn がやたらとエラーを吐くようになった。

Dec 30 12:54:58 gamba innd: tradindexed: index inode mismatch for fj.soc.politics
Dec 30 12:54:58 gamba innd: tradindexed: index inode mismatch for 9759A691F86C6A2C5599913D8E50BA82
Dec 30 12:54:58 gamba innd: tradindexed: index inode mismatch for japan.jiji
Dec 30 12:54:58 gamba innd: tradindexed: index inode mismatch for 9CE72130FD3C736BCCFA4C4416FC66EF
Dec 30 12:54:58 gamba innd: tradindexed: index inode mismatch for 9759A691F86C6A2C5599913D8E50BA82
Dec 30 12:54:58 gamba innd: tradindexed: index inode mismatch for 9CE72130FD3C736BCCFA4C4416FC66EF

再度、~news 以下を被せ直したりしても直らない。ので、あれこれググると tdx-util -F で直せることがわかった。要は、overview の IDX ファイル中に inode 番号が入っているかららしい。


2002|10|
2003|10|12|
2004|01|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|05|07|08|09|10|11|12|
2009|02|06|08|09|
2010|02|08|
2011|08|
2012|07|
2013|01|06|09|10|
2019|07|10|
2020|07|