Network block device

Linux上で、Network Block Device (ネットワークブロックデバイス; NBD)とは、ブロックデバイス(典型的には、ハードディスクやパーティション)を、
あるマシンからもう1台のマシンへ提供するのに使われるネットワークプロトコルである。
例えば、あるローカルマシンから、他のコンピューターに接続されたハードディスクドライブにアクセスすることができる。

Overview
 概要 
このプロトコルは、元々はLinux 2.1.55用に開発され、1997年にリリースされた。
2011年にプロトコルは改訂され、正式に文書化された。
現在は複数の開発者が協力して開発するオープン標準として開発されている。
相互運用可能な複数のクライアントとサーバーが存在している。

Linuxと互換性のあるNDBの実装は、FreeBSDやその他のオペレーティングシステムに存在している。
「network block device (ネットワークブロックデバイス)」という用語は、より広い技術を指すのに使われることがある。

技術的には、ネットワークブロックデバイスは3つの部分から構成される。
3つの部分とは、サーバーとクライアント、それらの間のネットワークである。
クライアントマシン上では、エクスポートされたデバイスノードを利用し、カーネルドライバーが仮想デバイスを実装する。
プログラムがそのデバイスにアクセスしようとすると、カーネルドライバーがリクエストを実際に物理的にデータを保管しているサーバーマシンへと送る
(クライアントがカーネル内部で全て実装されていない場合には、ユーザースペースのプログラムの助けも必要となる)。
サーバーマシンでは、クライアントからのリクエストはユーザースペースのプログラムによって処理される。

ネットワークブロックデバイスサーバーは、典型的には汎用コンピューター上のユーザースペースのプログラムとして実装される。
ネットワークブロックデバイスサーバーに特有の機能は、全てユーザースペースのプロセスで実現できる。
そのプロセスは、一般的なソケットでクライアントと通信し、一般的なファイルシステムのインターフェイスでストレージへのアクセスを行うためである。

ネットワークブロックデバイスモジュールは、Linuxを含むUnix系オペレーティングシステムで利用可能である。

 類似するプロトコル 
 iSCSI: 多くのLinuxディストリビューションで「target-utils」というiSCSIパッケージを利用可能である。
 NVMe-oF: 同じ仕組みで、ブロックデバイスをNVMe名前空間として、TCPやFibre Channel、RDMAなどの上で見えるようにする。多くのオペレーティングシステムで利用可能である。
 ループデバイス: 類似の仕組みだが、リモートでなくローカルのファイルシステムを利用する。
 DRBD: Distributed Replicated Block DeviceはLinuxプラットフォーム用の分散ストレージシステム。
 ATA over Ethernet: イーサネット上でATAコマンドを送る。
 USB/IP: IP上でUSBデバイスにネットワーク経由でアクセスできるようにするプロトコル。

 脚注 

 外部サイト 

 nbdkitはプラグイン式のNBDサーバーであり、libnbdは高機能なC言語によりクライアント実装である。
 qemu-nbdは、Qemuプロジェクトによるnbd用ツールである。
 BNBDは、NBDサーバーの実装の1つである。
 xNBDは、Linux用のNBDサーバーの実装の1つである。
 The Network Block Device: the Linux Journalの記事。

Category:Linuxカーネルの機能