酒日記

2001 04 09

Mon, 09 Apr 2001

Balbenie Double Wood 12 Years (43% × 100 ml)


モルツ (5% × 1000 ml)

ディスクが溢れた時に、なるべくファイルを安全に保つ (書き込めない時は無理に書き込まずにトラップする) 方法。きっかけはここから。

/tmp を別パーティションに分けた状態で /tmp をほぼ満杯にしておく。その状態で、

$ perl -e 'open OUT, "> /tmp/out" or die; print OUT "1" x 200000000; close OUT or die $!'

とする。要は、open, close 時だけエラートラップしたということだが・・・ 結果。die しないでサイズ 0 の /tmp/out が出来てしまった。だめじゃん。

print (OUT "1" x 200000000) or die;

として print でトラップすると、サイズ 0 のファイルは出来てしまうものの die してくれる。これが安全か? しかし1行書き込むごとにトラップしてたら重くなる気もする。 まあ、ファイルが消失するよりはいいか・・・

ここら辺の話は OS やら ファイルシステムやらの実装に依存するのかな、と思ったので

  • Kondara MNU/Linux (kernel 2.2.17) + (ext2 | ReiserFS)
  • Solaris8(intel)
  • FreeBSD 4.2

で同様の実験をしてみたが、同様の結果であった。ふーん。(Perl はすべて 5.005_03)

こういう無茶な実験をしてて思うのだが、Solaris と FreeBSD はこのような過負荷状態 (ディスクが溢れんばかりに一気に write するわけだ) でも、比較的他のプロセスのレスポンスが良い。 例えば telnet でコマンドを叩いた時に、反応が早いのだ。 Linux は「固まったか?」と思うぐらい反応が遅くなっちゃうことがありがちで、これはサーバ OS としてはどうなのかねえ。と思ったり。
# 内部のことなんて全然分かってないくせに偉そうだが (^^;


powered by blosxom