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の記事。