mount_md: mdmfs + suffix patch2006年05月15日 06時22分22秒

mdmfs は mount_mfs を置き換える形で書き直された、メモリデバイスを基としたファイルシステムを扱う。

mdconfig と普通の mount で基本的には用は足りていた。しかし、頻繁に使うようになると、いちいち mdconfig をやり、mount するのが次第に面倒になる。mdmfs の最大の欠点は、fstab からは使えない。名前も然り、機能も然りである。

まず、考えたのは newfs をやらないオプション。まあ、同じことを考える人はいる。こちらは、既に 7-current に取り込まれている。6-release 用に抜きだしてきた。これだけでは、まだまだ実用性に欠ける。スライスがあったり、パーティションがあると、一切使えない。

そこで、デバイスの後に拡張子を付けるパッチを作った。これは、md3.uzip や md5s3d などとして、デバイスを指定できる。数字なしで、md.uzip や mds3d などとやっても、ほぼ同じ動作になる。数字があるときには、その md デバイス番号を割り当てるのが違いだ。

注釈: デバイスの後に拡張子を付けるパッチ には 6-release 用 newfs をやらないオプションは既に含まれている。そのため、6-release にはそのまま当たるが、current 以降にはそのままでは当たらない。6-release 用 newfs をやらないオプションをリバースパッチとして、当てた後で適用すること。2006/07/14 追記。

具体的には、以下のような事が実現できる。


# mdmfs -P -F ports-5.4.uzip -oro md.uzip /tmp/test
# df /tmp/test
Filesystem  1K-blocks Used Avail Capacity  Mounted on
/dev/md4.uzip       358126   277934   51542    84%    /tmp/test

# mdmfs -P -F ports-5.4.uzip -oro /dev/md8.uzip /tmp/test
# df | grep test
/dev/md4.uzip       358126   277934   51542    84%    /tmp/test
/dev/md8.uzip       358126   277934   51542    84%    /tmp/test2

# mdmfs -P -F hd10meg.img mds1a /tmp/test3
# df /tmp/test3
Filesystem  1K-blocks Used Avail Capacity  Mounted on
/dev/md9s1a      7526    4  6920     0%    /tmp/test3

# mdmfs -P -F file.md md /tmp/test4
# df /tmp/test4
Filesystem 1K-blocks Used Avail Capacity  Mounted on
/dev/md10        846    4   776     1%    /tmp/test4

これで、格段に使い勝手がよくなった。さて、これから最後の仕上げである。man mount を見るとわかるが、mount は mount_xxx を呼び出す仕組みになっている。mdmfs では mount から呼び出せない。そこで、mount_md を mdmfs の別名のプログラムとしてインストールする。

実は、


--- src.orig/sbin/mdmfs/Makefile        Fri May  5 01:34:10 2006
+++ src/sbin/mdmfs/Makefile     Fri May  5 01:33:09 2006
@@ -2,6 +2,6 @@

 PROG=          mdmfs
-LINKS=         ${BINDIR}/${PROG} ${BINDIR}/mount_mfs
+LINKS=         ${BINDIR}/${PROG} ${BINDIR}/mount_mfs ${BINDIR}/mount_md
 MAN=           mdmfs.8
 MLINKS+=       mdmfs.8 mount_mfs.8

が、それに相応する部分なのだが、なぜか /usr/src/sbin/mdmfs から make install しても mount_md が入らない。同じように LINKS を複数指定している物もあるのになぜ、動かないのだろう。make installworld からは入れたことはないので、そちらはどうなっているかは知らない。

そういうわけで、もし mount_md が入ってなかったら、ln /sbin/mdmfs /sbin/mount_md でもやってほしい。

これで、uzip を fstab から mount 出来る。


% grep md /etc/fstab
/dev/md.uzip            /usr/ports      md      ro,-P,-F/usr/ports-20060511.uzip
% df /usr/ports
Filesystem    1K-blocks   Used  Avail Capacity  Mounted on
/dev/md3.uzip    504286 325266 138678    70%    /usr/ports

mount -d などと使うと、テストしやすい。なにせ、オプションの数が多いので、失敗した理由が掴みづらい。

Patches: 6-release 用 -P no-newfs パッチデバイスの後に拡張子を付けるパッチ