[Документация](../../README-ru.md#документация) → Использование → NBD ----- [Read in English](nbd.en.md) # NBD NBD расшифровывается как "сетевое блочное устройство", но на самом деле оно также работает просто как аналог FUSE для блочных устройств, то есть, представляет собой "блочное устройство в пространстве пользователя". NBD на данный момент необходимо, чтобы монтировать диски Vitastor ядром Linux. NBD немного снижает производительность из-за дополнительных копирований памяти, но она всё равно остаётся на неплохом уровне (см. для примера [тест](../performance/comparison1.ru.md#vitastor-0-4-0-nbd)). Смотрите также [VDUSE](qemu.ru.md#vduse), как лучшую альтернативу NBD. CSI-драйвер Kubernetes Vitastor использует NBD, когда VDUSE недоступен. Поддерживаются следующие команды: - [map](#map) - [unmap](#unmap) - [ls](#ls) - [netlink-map](#netlink-map) - [netlink-unmap](#netlink-unmap) - [netlink-revive](#netlink-revive) ## map Чтобы создать локальное блочное устройство для образа, выполните команду: ``` vitastor-nbd map [/dev/nbdN] --image testimg ``` Команда напечатает название блочного устройства вида /dev/nbd0, которое потом можно будет использовать как обычный диск. Для обращения по номеру инода, аналогично другим командам, можно использовать опции `--pool --inode --size ` вместо `--image testimg`. vitastor-nbd поддерживает все обычные опции Vitastor, например, `--config_file `, плюс специфичные для 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 | --pool --inode --size ) ``` На свежих версиях ядра Linux также возможно подключать NBD-устройства через интерфейс netlink. Это экспериментальная функция, так как она не решает всех проблем NBD. Отличия от обычного 'map': 1. Можно создавать новые `/dev/nbdN` устройства (отсутствующие в /dev/). 2. Отключать netlink-устройства можно только командой `netlink-unmap`. 3. netlink-устройства не видно в выводе `ls` (пока что). 4. Мёртвые netlink-устройства можно "оживить" командой `netlink-revive`. Правда, предыдущие запросы ввода-вывода всё равно зависнут навсегда, если `nbd_timeout` не задан. 5. Поддерживаются дополнительные опции: * `--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 | --pool --inode --size ) ``` Оживить мёртвое NBD-устройство, ранее подключённое через netlink, без удаления. Поддерживает те же опции, что и `netlink-map`.