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 パッチデバイスの後に拡張子を付けるパッチ

コメント

_ 抹茶 ― 2007年11月04日 00時00分58秒

/etc/rc.conf に以下の行を追加
## RAMDISK
ramdisk_units="1"
ramdisk_1_config="-t malloc -s 100m -o reserve"
ramdisk_1_owner="www"
ramdisk_1_perms="775"

fstabに以下の行を追加
/dev/md1 /home/www/ ufs rw 0 0

これじゃだめ?

_ uyota ― 2007年11月09日 14時55分30秒

/etc/rc.d/ramdisk は既に /etc/rc.d/mdconfig に書き換えられているようですね。

どちらのスクリプトも、デバイス名は決め打ちになっていて、全く融通が効きません。malloc 型や swap 型であれば、起動時に毎回
newfs をデバイスに対してやればいいので、まあそれでも構わないでしょう。わざわざ、スライスを切ったり、パーティションに分ける必要もありません。

しかし、vnode 型はそうはいきません。geom_uzip を使うのであれば、mount 時に /dev/md1.uzip にする必要があります。まあ、mdconfig には .uzip が更に決め打ちされているので、uzip の場合は、動きますが。しかし、スライスやパーティションがあったら、これでは動きません。/dev/md2s2 や /dev/md3 s4a などには rc スクリプトでは対応しきれていません。

_ 抹茶 ― 2007年11月18日 10時21分17秒

いろいろ細かいこと教えていただきありがとうございました~
自分の使い方だとramdiskでことが足りてるみたいです
ついでにblog始めましたので、気が向いたら遊びにきてください

コメントをどうぞ

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

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

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

トラックバック

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

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