Linux Kernel 2.2 Documentation:
/usr/src/linux/Documentation/nbd.txt
nbd.txt
ネットワークブロックデバイスの TCP 実装に関する情報
[プレインテキスト版]
- 原著作者: unknown
- 翻訳者: 野本浩一 <hng@ps.ksky.ne.jp>
- バージョン: 2.2.11
- 翻訳日時: 2001/12/25
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 を参照してください。
----------------------------------------------------------------------
日本語訳:野本浩一 <hng@ps.ksky.ne.jp>
校正:中谷千絵さん <jeanne@mbox.kyoto-inet.or.jp>
堀田倫英さん <hotta@net-newbie.com>
Linux カーネル 2.2 付属文書一覧へ戻る