unionfs on /usr/ports/...2006年02月15日 14時25分12秒

*BSD には unionfs と言うものがある。要約するとディレクトリ構造を mount することができる FS である。一般的な使い方としては、read-only なデバイスから mount されている上に unionfs を置き書き込めるようにするなどである。他には、スペースの足りなくなった FS の一時的な継ぎ足しである。

/usr は昔は 1GB から 2GB、今でも、3GB から 5GB ぐらいしか割り当てないので、jdk 等の大物の port をコンパイルするときに、ディスクが足りなくなるのである。そこで、/usr の上に、スペースのあるディスクを mount して、その場しのぎをするのである。


mount -t unionfs /export/tmp /usr/ports
cd /usr/ports/java/jdk15
make

などとやってはダメなのである。このままではディレクトリパスを展開するのに /usr/ports と /export/tmp を展開し、合成するのでとても遅くなるのである。そのため、tar がとても遅いのである。

cd /usr/ports/java/jdk15
make extract
mount -t unionfs /export/tmp /usr/ports/java/jdk15/work
make

とすることで、パスの展開を最小限に抑えるのである。コンパイル時のファイルアクセスは tar に比べてとても少ないので、unionfs による遅延は微々たる物である。それに比べてここでの tar は細かいファイルを大量に生成するので、どうしても遅くなってしまう。

どれくらい早くなったかは計ってはいないが、前者では、数十分待っても tar が終らなかったのが、後者に変えたらあっと言う間に終ったのを覚えいる。

あと、いつも後者のやり方だったので、つい最近まで ports が chmod だか chown を走らせるときに、エラーが出るのに全然、気がつかなかった。make extract での作業なので。5.4 や 6.0 でも、この問題はあり。ここで unionfs のパッチが提供されている。http://people.freebsd.org/~daichi/unionfs/index-ja.html

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2006/02/15/254777/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。