ports 作業ディレクトリの削除の高速化2007年02月24日 12時27分09秒

既に WRKDIRPREFIX=/ports/tmp を /etc/make.conf に設定している。その為、ports をビルドする時の作業ディレクトリは全て /ports/tmp 以下になり、make clean をする必要がなく、作業ディレクトリの削除も rm -rf /ports/tmp/usr/ports ですむ。

今回、ports を最初から入れ直したら、5 GB 程の作業ディレクトリがたまった。そこで、rm -rf /ports/tmp/usr/ports をしたのだが、15 分も掛かったのだ。こんなに時間が掛かっては、高速化したくならないわけがない!!!

そこで、ports 作業ディレクトリに専用パーティションを与える。特に余裕もないので、mdconfig で vnode 型を割り当てるのだ。パーティションを占める領域はわずかに減るかも知れないが、ファイルの削除は一瞬で出来るようになる。


# dd if=/dev/zero of=tmp.md count=1 seek=5000 bs=1M
# mdconfig -a -t vnode -f tmp.md 
md1
# newfs -U /dev/md1
/dev/md1: 5001.0MB (10242048 sectors) block size 16384, fragment size 2048
        using 28 cylinder groups of 183.77MB, 11761 blks, 23552 inodes.
        with soft updates
super-block backups (for fsck -b #) at:
 160, 376512, 752864, 1129216, 1505568, 1881920, 2258272, 2634624, 3010976,
 3387328, 3763680, 4140032, 4516384, 4892736, 5269088, 5645440, 6021792,
 6398144, 6774496, 7150848, 7527200, 7903552, 8279904, 8656256, 9032608,
 9408960, 9785312, 10161664

vnode 型の デバイスの準備が出来た。

次は、起動時に自動的にマウント出来るように準備する。


# echo "/dev/md                 /ports/tmp      mfs     rw,-P,-F/ports/tmp.md   0      0" >> /etc/fstab
# mount -d /ports/tmp
exec: mount_mfs -o rw -P -F/ports/tmp.md /dev/md /ports/tmp
# mount  /ports/tmp
# df /ports/tmp
Filesystem 1K-blocks Used   Avail Capacity  Mounted on
/dev/md2     4955182    4 4558764     0%    /ports/tmp

これで、次回から自動的に /ports/tmp にマウントしてくれる。

もし、ports の作業ディレクトリを消したいのであれば、


# umonut /ports/tmp && newfs -U /dev/md2 && mount /ports/tmp

で終る。一秒もあれば終るので、今回やっていたら、一万倍の高速化と言ったところか。もちろん、ファイルの数によって、すぐに倍率は変わってしまうが。