15.10. ネットワーク、メモリ、そしてファイルベースのファイルシステム

再構成および追記: Marc Fonvieille.

FreeBSD にはフロッピーや CD, ハードディスクなどの手元の計算機に取り付けたディスクの他に、 別の形態のディスク、仮想ディスク、もあります。

これには、Network File System のようなネットワークファイルシステムや Coda, メモリベースのファイルシステムおよびファイルベースのファイルシステムがあります。

稼働させている FreeBSD のバージョンによって、 ファイルベースおよびメモリベースのファイルシステムを作成したり操作するために、異なるツールを使用しなければならないでしょう。

Note: FreeBSD 4.X の使用者は必要なデバイスを作成するために MAKEDEV(8) を使用しなければならないでしょう。FreeBSD 5.0 以降では、devfs(5) がデバイスノードを自動的に割り当ててくれるので、 使用者が意識する必要はありません。

15.10.1. FreeBSD 4.X でファイル中に構築されるファイルシステム

vnconfig(8) ユーティリティを使えば擬似ディスクデバイスを設定し、 有効にすることができます。 vnode とはファイルの内部的な表現方法であり、 ファイルに関する操作の中心となるものです。つまり、vnconfig(8) はファイルシステムを生成したり操作したりするためにファイルを用いるのです。 一つ例を挙げると、 ファイルに収められたフロッピーや CD-ROM のイメージをマウントするために用いることができます。

vnconfig(8) を使用するためには、 カーネルが vn(4) デバイスに対応している必要があります。 そうでなければ、カーネルコンフィギュレーションファイルに 次の行を追加してカーネルを再構築し、システムを再起動してください。

pseudo-device vn

既にあるファイルシステムイメージのマウント

Example 15-4. FreeBSD 4.X での vnconfig を用いた既存のファイルシステムイメージのマウント

# vnconfig vn0 diskimage
# mount /dev/vn0c /mnt

vnconfig(8) を用いたファイルシステムイメージの新規作成

Example 15-5. vnconfig を用いたファイルベースディスクの新規作成

# dd if=/dev/zero of=newimage bs=1k count=5k
5120+0 records in
5120+0 records out
# vnconfig -s labels -c vn0 newimage
# disklabel -r -w vn0 auto
# newfs vn0c
Warning: 2048 sector(s) in last cylinder unallocated
/dev/vn0c:     10240 sectors in 3 cylinders of 1 tracks, 4096 sectors
        5.0MB in 1 cyl groups (16 c/g, 32.00MB/g, 1280 i/g)
super-block backups (for fsck -b #) at:
 32
# mount /dev/vn0c /mnt
# df /mnt
Filesystem  1K-blocks     Used    Avail Capacity  Mounted on
/dev/vn0c        4927        1     4532     0%    /mnt

15.10.2. FreeBSD 5.X でファイル中に構築されるファイルシステム

mdconfig(8) ユーティリティは FreeBSD 5.X において メモリディスク (md(4)) を設定し、有効にするために使用されます。 mdconfig(8) を使用するためには md(4) モジュールを読み込むか、 カーネルコンフィギュレーションファイルに md(4) デバイスを追加してカーネルを再構築し、システムを再起動してください。

device md

mdconfig(8) コマンドは、 三つのタイプのメモリベース仮想ディスクに対応しています。 malloc(9) を用いて割り当てられたメモリディスク、 ファイルをベースにしたメモリディスク、 およびスワップ領域をベースにしたメモリディスクです。 想定される使用法は、ファイル内に保持されたフロッピーイメージまたは CD イメージをマウントすることです。

既にあるファイルシステムイメージのマウント

Example 15-6. FreeBSD 5.X での mdconfig を用いた既存のファイルシステムイメージのマウント

# mdconfig -a -t vnode -f diskimage -u 0
# mount /dev/md0c /mnt

mdconfig(8) を用いたファイルシステムイメージの新規作成

Example 15-7. mdconfig を用いたファイルシステムイメージの新規作成

# dd if=/dev/zero of=newimage bs=1k count=5k
5120+0 records in
5120+0 records out
# mdconfig -a -t vnode -f newimage -u 0
# disklabel -r -w md0 auto
# newfs md0c
/dev/md0c: 5.0MB (10240 sectors) block size 16384, fragment size 2048
    using 4 cylinder groups of 1.27MB, 81 blks, 256 inodes.
super-block backups (for fsck -b #) at:
 32, 2624, 5216, 7808
# mount /dev/md0c /mnt
# df /mnt
Filesystem  1K-blocks     Used    Avail Capacity  Mounted on
/dev/md0c        4846        2     4458     0%    /mnt

-u オプションを用いて ユニット番号を指定しない場合、mdconfig(8) は未使用のデバイスを自動的に選択するために md(4) デバイスの auto-unit 機能を使用します。 割り当てられたユニットの名前は md4 のように標準出力に出力されます。mdconfig(8) の詳細についてはマニュアルページを参照してください。

Note: FreeBSD 5.1-RELEASE から、従来の disklabel(8) プログラムは bsdlabel(8) ユーティリティに置き換えられました。bsdlabel(8) では、 使用されていないオプションおよびパラメタの数多くが削除されました。 たとえば -r オプションは bsdlabel(8) では取り除かれました。詳細については bsdlabel(8) マニュアルページを参照してください。

mdconfig(8) ユーティリティは大変役に立ちますが、 ファイルベースのファイルシステムを作成するために、 多くのコマンドの入力が必要となります。FreeBSD 5.0 では mdmfs(8) と呼ばれるツールも用意されています。このプログラムは mdconfig(8) を用いて md(4) ディスクを設定し、newfs(8) を用いて UFS ファイルシステムを作成し、mount(8) を用いてマウントします。たとえば、上記と同じファイルシステムを作成し、 マウントしたい場合は、下記のように入力するだけです。

Example 15-8. mdmfs を用いたファイルベースディスクの設定とマウント

# dd if=/dev/zero of=newimage bs=1k count=5k
5120+0 records in
5120+0 records out
# mdmfs -F newimage -s 5m md0 /mnt
# df /mnt
Filesystem 1K-blocks Used Avail Capacity  Mounted on
/dev/md0        4846    2  4458     0%    /mnt

ユニット番号を指定せずに md オプションを使用した場合、mdmfs(8) は未使用のデバイスを自動的に選択するために md(4) デバイスの auto-unit 機能を使用します。mdmfs(8) についての詳細はマニュアルページを参照してください。

15.10.3. FreeBSD 4.X でのメモリベースのファイルシステム

md(4) ドライバは FreeBSD 4.X においてメモリファイルシステムを作成するために単純で効果的な手段です。 メモリを割り当てるために malloc(9) 関数が使用されます。

vnconfig(8) を用いて作成したファイルシステムを例に取ると、 以下のようにします。

Example 15-9. FreeBSD 4.X での md メモリディスク

# dd if=newimage of=/dev/md0
5120+0 records in
5120+0 records out
# mount /dev/md0c /mnt
# df /mnt
Filesystem  1K-blocks     Used    Avail Capacity  Mounted on
/dev/md0c        4927        1     4532     0%    /mnt

詳細については md(4) マニュアルページを参照してください。

15.10.4. FreeBSD 5.X でのメモリベースのファイルシステム

メモリベースおよびファイルベースのファイルシステムに対しても 同じツール (mdconfig(8) または mdmfs(8)) を使用できます。 メモリベースのファイルシステムに対する記憶領域は malloc(9) 関数を用いて割り当てられます。

Example 15-10. mdconfig を用いたメモリベースディスクの新規作成

# mdconfig -a -t malloc -s 5m -u 1
# newfs -U md1
/dev/md1: 5.0MB (10240 sectors) block size 16384, fragment size 2048
    using 4 cylinder groups of 1.27MB, 81 blks, 256 inodes.
    with soft updates
super-block backups (for fsck -b #) at:
 32, 2624, 5216, 7808
# mount /dev/md1 /mnt
# df /mnt
Filesystem 1K-blocks Used Avail Capacity  Mounted on
/dev/md1        4846    2  4458     0%    /mnt

Example 15-11. mdmfs を用いたメモリベースディスクの新規作成

# mdmfs -M -s 5m md2 /mnt
# df /mnt
Filesystem 1K-blocks Used Avail Capacity  Mounted on
/dev/md2        4846    2  4458     0%    /mnt

mdconfig(8) のコマンドラインの mallocswap に置き換えることで、malloc(9) 関数によるファイルシステムを使用する代わりに スワップ領域を使用することが可能です。デフォルトでは mdmfs(8) ユーティリティはスワップベースのディスクを作成します (-M なし)。詳細は mdconfig(8) および mdmfs(8) マニュアルページを参照してください。

15.10.5. システムからメモリディスクを切り離す

メモリベースまたはファイルベースのファイルシステムが使用されていない場合、 すべてのリソースをシステムに開放するべきです。 はじめにファイルシステムをアンマウントします。 次にシステムからディスクを切り離し、リソースを開放するために mdconfig(8) を使用します。

たとえば /dev/md4 によって使用されたすべてのリソースを切り離し、開放するには以下のようにします。

# mdconfig -d -u 4

mdconfig -l コマンドを使用することによって、 設定された md(4) デバイスについての情報を表示することが可能です。

FreeBSD 4.X では vnconfig(8) はデバイスを切り離すのに使用されます。たとえば /dev/vn4 によって使用されたすべてのリソースを切り離し、開放するには以下のようにします。

# vnconfig -u vn4