ディスクが壊れたら HOWTO (gmirror編)

ディスクが壊れた。
また、だ。家の Aspire One のディスクが壊れてから、2週間も経ってないのに。
今度は研究室のサーバで、ad4 と ad6 が同じサイズのディスクで、gmirror でパーティションごとにミラーされている構成。同じサイズのディスクは研究室のあちこちで使ってるので、新品も使いかけも含めて予備もいっぱいあるので、シャットダウンして交換すればよい。
なぜ気づいたかというと、特になにか重たいプロセスが走っているわけでもないのにずっと load average が 1.0 前後で、CPU 使用率も、user が 0% なのに system が 50% になっていたりとか、なんでかなー、と思っていた。で、試しに再起動してみたら、いつまでたっても起動しないので、シリアルコンソールでのぞいてみたら、BIOS が “SATA port A にディスクがつながってないよー” と。認識すらされてないので、おそらく基板ごとディスクが壊れました (取り外すだけ外して、まだ確認してない)。
生きているほうのディスクから起動したところちゃんと起動した。Filesystem も clean である。gmirror で動いてるのだから当然といえば当然なんだけど、すごいな。gmirror status すると、全部 degraded になっている。これも当然。
それで、新しいハードディスクを入れて、ミラーを復活させるまでの作業が以下の通り。ad4 が正常に起動しているディスク、ad6 が新しいディスク、gm0 がミラー。
まず fdisk -p でパーティション (スライス) 情報が出るのを確認。
root# fdisk -p /dev/ad4
# /dev/ad4
g c969021 h16 s63
p 1 0xa5 63 976773105
a 1
これをファイル (/tmp/configにした) に落として、fdisk -f で新しいディスクに書き込めば OK.
root# fdisk -p /dev/ad4 > /tmp/config
root# fdisk -f /tmp/config /dev/ad6
******* Working on device /dev/ad6 *******
fdisk: WARNING line 2: number of cylinders (969021) may be out-of-range
(must be within 1-1024 for normal BIOS operation, unless the entire disk
is dedicated to FreeBSD)
これでちゃんと /dev/ad6s1 ができるはず。次は disklabel で同じことをして、BSD パーティションを作る。まずは確認から。
# disklabel /dev/ad4s1
# /dev/ad4s1:
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
a: 4194304 0 4.2BSD 0 0 0
b: 16777216 4194304 swap
c: 976773105 0 unused 0 0 # “raw” part, don’t edit
d: 16777216 20971520 4.2BSD 0 0 0
e: 8388608 37748736 4.2BSD 0 0 0
f: 268435456 46137344 4.2BSD 0 0 0
g: 662200305 314572800 4.2BSD 0 0 0
disklabel: partition c doesn’t cover the whole unit!
disklabel: An incorrect partition c may cause problems for standard system utilities
同様にファイルに落として、今度は disklabel -R で書きこみ。
root# disklabel /dev/ad4s1 > /tmp/config
disklabel: partition c doesn’t cover the whole unit!
disklabel: An incorrect partition c may cause problems for standard system utilities
root# disklabel -R /dev/ad6s1 /tmp/config
これで、/dev/ad6s1a とかが見えるようになる。
ここまでは順調だったが、新しいディスクを mirror に参加させるところではまった。普通、新しいディスクを mirror のメンバにするには、
root# gmirror insert gm0s1a /dev/ad6s1a
のようにすればよいのだが、こうすると “not all disks connected” となる。つまり、gmirror 的には昔のメンバの一覧と違う状態になっている (degraded) からなのだ。これを解決するには、
root# gmirror forget gm0s1a
とする。そうすると、壊れちゃったほうのディスク上のパーティションのことは忘れ去られるので、gmirror status でみたときの状態は complete に変わる。そこで gmirror insert すれば OK.
というわけで、すべてのパーティションを mirror して、終了。
swap はミラーしてなかったんだけど、メモリが多かったから助かったのかしらん。
あと、片方のディスクが壊れたら何か通知がくるようにしたいな…

ディスクが壊れたらHOWTO

ディスクが壊れた。
Acer の Aspire One (AOA150) というマシンで、2009年の4月に買って、その頃は MacBook Air 持ってなかったので本気の FreeBSD モバイル環境としていろいろ hack してた マシンである。けっこう活躍したが、suspend/resume できない点だけは解決できず、結局 MacBook Air にモバイルの座は譲り渡すことになった。ラップトップを FreeBSD で動かすってのは学生時代からだから、もう10年以上そうしてたわけだけど、最後の FreeBSD/i386 マシンで、おそらく最後の FreeBSD モバイル環境でもある (Mac がダメな方向にいくようなことがあれば、また戻るけどね)。
で、2011年の春に沖縄に引っ越してきてからは自宅サーバとして電源入れっぱなしにしていた。もともと普通のネットブックなので、ええ加減な作りであるし、2年も3年も連続稼働できるわけはないのだけれど、なんとなくちゃんと動いているし、ま、大丈夫だろ、と思ってバックアップもとっていなかった。つまり、典型的なダメな管理者ですね。
それで、ある日、セキュリティ関連のアップデートをしようと思っていろいろコンパイルしてたら、落ちた。そもそもごりごりコンパイルするようなマシンではないので、熱暴走で落ちることはいままでも何回かあったし、ま、そんなものかな、と思って電源を再投入した。
そしたら filesystem が clean でないといって、全然起動しない。さっき固まったからちゃんと shutdown してないわけだし、たいしたことないだろ、と思って、fsck -y すると、何度やっても、
/dev/ad4s1g: UNEXPECTED SOFT UPDATE INCONSISTENCY; RUN fsck MANUALLY.
こんな感じである。こりゃまずいですよ。そう、fsck 何度やっても。幸い、/ とか /usr とか /var は fsck が通ったので、なんとか起動はしているものの、/home の下に web サーバのデータとか置いてあるから、それを救出しなければならない。
そこで、mount (8) を読むと、
-f …. Also forces the R/W mount of an unclean file system (dangerous; use with caution).
と書いてある。こうか。
mount -f /dev/ad4s1g /home
エラー出ちゃった…。でも、readonly では mount できるんじゃないか?って思ってやってみた。
mount -o ro -f /dev/ad4s1g /home
これはうまくいった。あとで調べてみると、どうやら、unclean でも readonly は、ぶっ壊れているところ以外へのアクセスは大丈夫らしい。
それで結局、たまたま家にあった 2GB の USB メモリを newfs して、それを仮の mountpoint に mount して、そこに生きているデータを rsync して、/home に mount しなおして、とりあえずサーバは再稼働。rsync でエラーが何カ所か出たけど、そこは MovableType のテンプレートとかで、再インストールすればよかったので、助かった。
いくつか読めないセクタがあるので、このまま使い続ける訳にもいかないし、AOA150 を分解するのはすごく大変そうだったので、 Acer の Veriton N というマシンを購入してリプレイスした。今度のは Atom D525 で、さすがに前のより速いし、メモリも 4GB 積める。あと、ディスプレイはついてないけど、テレビに HDMI でつなげば済むってのもいいですね。

研究室メールサーバ再構築

研究室に学生が配属されて一年たって、卒論発表も終わったので、若干手遅れ感があるのだけれど、研究室のメール環境を再構築した。
自分が使うための Postfix + Courier-IMAP による環境はもう既にできあがっていたんだけど、Postfix の SMTP Auth の設定がまだだった (研究室の Postfix は受信専用で、自宅のメールサーバを経由して送信してた) りして、学生に使わせるのもなー、という感じだったのを一気にやっつけた感じ。OS はもちろん FreeBSD だ。
やりたかったこととしては、
– SMTP/IMAP ともに STARTTLS を使う
– 認証は両方とも LDAP で一元化したい
というアレ。Courier IMAP は courier-authdaemond を入れれば、ふつうに PAM 経由で LDAP が使える。
Postfix のほうは若干厄介だったのだけれど、これも、cyrus-sasl-saslauthd を入れて、PAM 経由で LDAP を使うのが正解みたい。なので、pam.d/smtp を書いてあげる必要もある。Postfix から sasl2 を使うための設定をするためにはまず、/usr/local/lib/sasl2/smtpd.conf に、
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
みたいに書いて、/usr/local/etc/postfix/main.cf では、
smtpd_sasl_path = smtpd
smtpd_sasl_type = cyrus
smtpd_tls_auth_only = yes
あたりがキモ。特に、最後のがあれば、暗号化されていない状態での認証は行われない。たとえばこんな感じ。暗号化されてないと、
% telnet localhost 587
Trying 127.0.0.1…
Connected to localhost.
Escape character is ‘^]’.
220 hogehoge.my.domain ESMTP Postfix
EHLO localhost
250-hogehoge.my.domain
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
% openssl s_client -connect localhost:587 -starttls smtp
CONNECTED(00000003)
(ざっくり省略)
EHLO localhost
250-hogehoge.my.domain
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
250 AUTH PLAIN LOGIN が増えているのがわかる。
RoundCube もいれた。インストーラではログインできるのに、本番の環境ではログインできないのはなんでかなー、と思っていたら、config/main.inc.php に、
// Automatically add this domain to user names for login
// Only for IMAP servers that require full e-mail addresses for login
// Specify an array with ‘host’ => ‘domain’ values to support multiple hosts
// Supported replacement variables:
$rcmail_config[‘username_domain’] = ‘hogehoge.my.domain’;
的なことが書いてあった。うちの IMAP サーバはユーザ名だけでログインするので、これで勝手にドメイン名が付加されちゃったら、そりゃエラーになるわ、というわけで、
$rcmail_config[‘username_domain’] = ”;
として解決。

暮らしにアート in 伊計島

すっかり更新さぼってました。もう半年くらい…
ぼちぼちやっていこうと思います。
IMG_4260.jpg
伊計島の旧伊計小中学校でやってる、「暮らしにアート in 伊計島」と「滞在制作現代アート展 ジュネチック」を見にいってきました。
伊計小中学校は昨年3月に廃校になったのだけれど、とてもすてきなコンクリートの建物でした。
焼き物とか木工とかのいろいろの作家ものは、うちは二人とも好きなのでいろいろ見たりちょこちょこ買ったりしてましたが、非常にすてきな感じで、よかった。
2階でやってるアート展もよかった。滞在型で、一ヶ月作家さんたちがここで制作したのがそのまま展示されていて、これもすてきでした。石垣克子さん の、黒板+チョークの作品がすごかった・・・黒板にチョークであんなのが作れるのか、と思ったよ。
2/11 まで なので、沖縄の方は、ぜひ。