ファイルシステムあれこれ

RAM ディスク

4.x では mfs で (swap の中にファイルシステムがあるかのような書き方で) RAM ディスクを使用できる。 5.x では md を用いて RAM ディスクを使用できる。 /etc/fstab の記述例を示す。

4.x
/dev/ad0s2b   none    swap    sw                                  0       0
/dev/ad0s2b   /ram    mfs     rw                                  0       0
5.x
md            /ram    mfs     rw,nosuid,async,noatime,-s262144    0       0

RAM ディスクに付けるオプションとしては、以下を候補として検討されたい。

  • nosuid : set user, set group のスティッキービットを無効にする
  • nodev : そのファイルシステムにデバイスファイルがあっても無視する
    (FreeBSD 5 以降では、指定しても意味が無いし、 FreeBSD 7 では、指定するとエラーになる)
  • async : 非同期処理を行う。
  • noatime : atime の更新を行わない。
  • 0 0 : ダンプは要らないだろう。

-s で指定するサイズは 512 bytes block なので、ぱっと見では倍に見える。

softupdate

Softupdate とは、同期書き込み(遅い)を減らして非同期書き込み(速い) を増やし、しかもファイルシステムの一貫性を損ねないようにすることで ディスクへの書き込みを激減するものである。

4.3-RELEASE 頃から インストール時に softupdate にするかどうか選択できる。 また、インストール時に softupdate を選択しなかった場合でも 手動で softupdate を組み込むことができる。 / 以外のパーティションについては、一回 umount して tunefs して mount してあげれば、すぐにでも softupdate の恩恵にあずかれる。

/ イッパツというパーティションになっていて なかなか umount する機会がない場合でも、システムを止めるチャンスがあれば、 その時に行ってしまうのがよい。 稼働状態からシングルユーザに落として mount -r / するか、もしくは 起動時に boot -s でシングルユーザで上げて / を read-only な状態にしてから、tunefs を行う。

# tunefs -n enable /
tunefs: soft updates set
tunefs: file system reloaded
# reboot

これだけで、簡単に softupdate の恩恵にあずかることができる。

効果は、細かい大量のファイルを扱う時に最も顕著に体感できる。 MH で管理している FreeBSD-users-jp の ML の記事をいくつか削除したあとの pack の作業など、softupdate なしでは数秒かかっていたものが、 計測不能なほど一瞬で終わるようになることだろう。

softupdate の技術的な詳細については、 「FreeBSD press Vol.4」で詳しく述べられている。

ufs の情報

ファイルシステムが ufs なのか ufs2 なのか知りたくても、 mount コマンドでは教えてくれない。ちょっとケチだと思う。 が、こういう場合は dumpfs を用いることができる。

% dumpfs / | head -1
magic   19540119 (UFS2) time    Tue Dec 27 08:49:47 2005
[$Revision: 1.4 $ $Date: 2009.12.07 00:15:53 $]
[EOF]