NBD расшифровывается как “сетевое блочное устройство”, но на самом деле оно также работает просто как аналог FUSE для блочных устройств, то есть, представляет собой “блочное устройство в пространстве пользователя”.
NBD на данный момент необходимо, чтобы монтировать диски Vitastor ядром Linux. NBD немного снижает производительность из-за дополнительных копирований памяти, но она всё равно остаётся на неплохом уровне (см. для примера тест).
Смотрите также VDUSE, как лучшую альтернативу NBD.
CSI-драйвер Kubernetes Vitastor использует NBD, когда VDUSE недоступен.
Поддерживаются следующие команды:
map
Чтобы создать локальное блочное устройство для образа, выполните команду:
vitastor-nbd map [/dev/nbdN] --image testimg
Команда напечатает название блочного устройства вида /dev/nbd0, которое потом можно будет использовать как обычный диск.
Для обращения по номеру инода, аналогично другим командам, можно использовать опции
--pool <POOL> --inode <INODE> --size <SIZE>
вместо --image testimg
.
vitastor-nbd поддерживает все обычные опции Vitastor, например, --config_file <path_to_config>
,
плюс специфичные для NBD:
--nbd_timeout 0
Максимальное время выполнения любой операции чтения/записи в секундах, при превышении которого ядро остановит NBD-устройство. На ядрах Linux старее 5.19, если таймаут установлен в 0, NBD-устройство вообще невозможно отключить из системы при нештатном завершении процесса.--nbd_max_devices 64 --nbd_max_part 3
Опции, передаваемые модулю ядра nbd, если его загружает vitastor-nbd (nbds_max
иmax_part
).--logfile /path/to/log/file.txt
Писать сообщения о процессе работы в заданный файл, вместо пропуска их при фоновом режиме запуска или печати на стандартный вывод при запуске в консоли с--foreground 1
.--dev_num N
Использовать заданное устройство/dev/nbdN
вместо автоматического подбора.--foreground 1
Не уводить процесс в фоновый режим.
Обратите внимание, что опции nbd_timeout
, nbd_max_devices
и nbd_max_part
можно
также задавать в /etc/vitastor/vitastor.conf
или в другом файле конфигурации,
заданном опцией --config_file
.
unmap
Для отключения устройства выполните:
vitastor-nbd unmap /dev/nbd0
ls
vitastor-nbd ls [--json]
Вывести подключённые устройства.
Пример вывода в обычном формате:
/dev/nbd0
image: bench
pid: 584536
/dev/nbd1
image: bench1
pid: 584546
Пример вывода в JSON-формате:
{"/dev/nbd0": {"image": "bench", "pid": 584536}, "/dev/nbd1": {"image": "bench1", "pid": 584546}}
netlink-map
vitastor-nbd netlink-map [/dev/nbdN] (--image <image> | --pool <POOL> --inode <INODE> --size <SIZE>)
На свежих версиях ядра Linux также возможно подключать NBD-устройства через интерфейс netlink.
Это экспериментальная функция, так как она не решает всех проблем NBD. Отличия от обычного ‘map’:
- Можно создавать новые
/dev/nbdN
устройства (отсутствующие в /dev/). - Отключать netlink-устройства можно только командой
netlink-unmap
. - netlink-устройства не видно в выводе
ls
(пока что). - Мёртвые netlink-устройства можно “оживить” командой
netlink-revive
. Правда, предыдущие запросы ввода-вывода всё равно зависнут навсегда, еслиnbd_timeout
не задан. - Поддерживаются дополнительные опции:
--nbd_conn_timeout 0
Отключать мёртвое устройство автоматически через данное число секунд.--nbd_destroy_on_disconnect 1
Удалять NBD-устройство при отключении.--nbd_disconnect_on_close 1
Отключать NBD-устройство автоматически, когда его все закроют.--nbd_ro 1
Установить для NBD-устройства режим “только для чтения”.
netlink-unmap
vitastor-nbd netlink-unmap /dev/nbdN
Отключить устройство через интерфейс netlink. Работает и с обычными, и с netlink-устройствами.
netlink-revive
vitastor-nbd netlink-revive /dev/nbdX (--image <image> | --pool <pool> --inode <inode> --size <size in bytes>)
Оживить мёртвое NBD-устройство, ранее подключённое через netlink, без удаления. Поддерживает
те же опции, что и netlink-map
.