Network Block Device (TCP バージョン) 注記 - Network Block Device (NBD) は現在実験的なもので、私のコンピュー タと学校でも一台のコンピュータでは、ほぼ動作しています。 NBD とは:カーネルに組み込むと、Linux はブロックデバイスとしてリモー トサーバを使えます。したがって、クライアントコンピュータが /dev/nd0 を読出したい時はいつでも TCP でサーバへ要求を送り、サーバはデータ読 出しの応答をします。この方法は、ディスク領域の少ないステーション (あるいはフロッピーからブートするならディスクレスでも) で、別のコン ピュータのディスク領域を借用するのに利用できます。NFS とは異なり、 その領域にどんなファイルシステムでも置くことができます。しかし、NBD はユーザレベルプログラムの起動が必要なので、ルートファイルシステム には利用できません。さらに、ユーザランドでブロックデバイスの実行が できます (物理的に同じコンピュータをサーバとクライアントとし、ルー プバックを使用して通信します)。 現状:現在動作します。NBD はかなり安定しているように見えます。元々 TCP 上で swap はできないと考えていました。しかし、それは真実でない ことが判明しました - 現在 TCP 上での swap は動作し、デッドロックも 起きないようですが、このためには Linux のネットワーク層に相当な量の パッチをあてる必要があります。 デバイス:NBD はメジャー番号 43, マイナー番号 0..n を使用します (こ の n は nbd.h で設定可能です)。必要な時、mknod でこれらのファイルを 作成します。作成後、ls -l /dev/ の結果は次のようになります - brw-rw-rw- 1 root root 43, 0 Apr 11 00:28 nd0 brw-rw-rw- 1 root root 43, 1 Apr 11 00:28 nd1 ... プロトコル:ユーザランドプログラムは TCP ソケットが接続しているファ イルハンドルを実際のカーネルドライバに渡します。この方法で、カーネ ルは接続などの注意を払う必要がありません。プロトコルは思ったより単 純です - ドライバがブロックデバイスから読むよう依頼されれば、次の形 式の "要求" パケットを送ります (データはすべてネットワークバイト順 です) - __u32 magic; 0x12560953 でなければなりません __u32 from; 読出しもしくは書込みのバイト位置 __u32 len; 読出しもしくは書込みのバイト数 __u64 handle; 操作するハンドル __u32 type; 0 = 読出し 1 = 書込み ... 書込み操作の場合、このすぐ後にデータのバイト長が 続きます。 操作が完了すると、サーバは次の構造の "応答" パケットを返します - __u32 magic; 要求と同じ __u64 handle; 要求からコピーされたハンドル __u32 error; 0 = 操作が成功 0 以外はエラーコード ... 読出し操作でエラーがなかった場合、このすぐ後にデー タのバイト長が続きます。 詳しくは http://atrey.karlin.mff.cuni.cz/~pavel を参照してください。 ---------------------------------------------------------------------- 日本語訳:野本浩一 校正:中谷千絵さん 堀田倫英さん