1.0.0 • Published 1 year ago

network-block-device v1.0.0

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
1 year ago

network-block-device

NBD server implemention in JS focused around providing an API for implementing virtual block devices

npm install -g network-block-device

Usage

const NBDServer = require('network-block-device')

const blocks = new Map()

const server = new NBDServer({
  blockSize: 1024, // 1KB
  size: 16 * 1024 * 1024 * 1024, // 16GB block size
  async read (blockIndex) {
    // called when someone wants to read a block, you should return it
    // if no block exists for this index, return null/undefined
    return blocks.get(blockIndex)
  },
  async write (blockIndex, block) {
    // called when someone wants to write a block, you should store it
    blocks.set(blockIndex, block)
  },
  async del (blockIndex) {
    // called when someone wants to delete a block
    blocks.delete(blockIndex)
  }
})

server.listen('/tmp/nbd')

Example

1. Installation

First of all, you need to install the nbd package, I compiled the version from sourceforge: https://sourceforge.net/projects/nbd/files/ But you can find packages for various distros at https://repology.org/project/nbd/versions

The network-block-device package contains a simple CLI script nbdc.js to connect the Linux client to the server, so install it globally

npm install -g network-block-device

2. Server terminal

Open the network-block-device folder in a terminal, and run

node example

to start the server. By default the app provides a 16GB export.

3. Client terminal

Open another terminal anywhere, and run

nbdc /tmp/nbd /dev/nbd5

the client terminal should log something like

bs=512, sz=17179869184 bytes

This means the handshake phase was successful.

4. Making a file system

You can make a file system on the device by running

sudo mkfs.ext4 /dev/nbd5

5. Mounting and unmounting the device

You can now mount the device with

sudo mount /dev/nbd5 /mnt

You can cd into the device and work on it like it was a regular hard drive.

Remember to unmount it before stopping the server, using

sudo umount /mnt

Dependencies

TODO

1.0.0

1 year ago

0.0.0

1 year ago