网络附加存储

NAS 的实现

CIFS/SMB 和 NFS 是实现 NAS 架构的主要协议。

NBD 也可以看做是 NAS 的一种,可以通过网络提供块存储能力。

NBD

参考:

Network Block Device(网络块设备,简称 NBD) 即是一个功能,也是一种协议。这是一种 C/S 架构,可以让 Client 通过网络使用 Server 提供的块设备

NDB Server 可以将一个 iso 文件、目录、usb、CDROM 等抽象为一个块设备,以便让 Client 通过网络使用块设备。

IANA 保留了 10809 端口作为 NDB 提供服务的默认端口。

当我们使用低版本的 nbd-server 时,可能会收到一些警告信息,比如 Warning: the oldstyle protocol is no longer supported. This method now uses the new style protocol with a default export。这些信息只是提醒我们 oldstyle protocol 已经被弃用,不一定代表有什么问题。

官方描述:

  • 这是什么:将此编译到您的内核中,Linux 可以使用远程服务器作为其块设备之一。每次客户端计算机想要读取 /dev/nbd0 时,它将通过 TCP 向服务器发送请求,服务器将以所请求的数据作出回应。这可以用于空间较小的站点(甚至是无磁盘的站点-如果您使用了 initrd),从其他计算机借用磁盘空间。与 NFS 不同,可以在其中放置任何文件系统。但是(与 NFS 不同),如果有人将 NBD 挂载为读/写,则必须确保没有其他人将其挂载。
  • 当前状态:它目前可以工作。网络块设备非常稳定。最初认为通过 TCP 进行交换是不可能的;事实证明这不是真的。但是,为避免死锁,您需要至少 Linux 3.6。
  • 可以将 NBD 用作 FUSE 的块设备对应项,以在用户空间中实现块设备的读写。为了使其更方便,最新版本的 NBD(3.10 及以上版本)还实现了基于 Unix 域套接字的 NBD。

NBD 协议已经被其他人实施。一个(可能不完整的)列表如下:

  • nbdkit是一个带有插件架构的多线程 NBD 服务器。
  • libnbd是一个帮助编写 NBD 客户端的库
  • qemu包含一个嵌入式 NBD 服务器、一个嵌入式 NBD 客户端和一个独立的 NBD 服务器 ( qemu-nbd)。他们维护 其 NBD 实施的状态文档。
  • 存在用于 FreeBSD 的基于 GEOM 门的客户端实现。自 2018 年以来,它没有看到任何更新,并且只实现了客户端(但是,任何服务器都应该在未修改的情况下在 FreeBSD 上运行)。
  • Windows 客户端实现作为Ceph for Windows的 RBD 实现的一部分存在。
  • lwNBD是一个 NBD 服务器库,针对裸机或 OS 嵌入式系统。它有一个插件架构。