vitastor/docs/usage/nbd.ru.md

6.4 KiB
Raw Permalink Blame History

Документация → Использование → NBD


Read in English

NBD

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}}
vitastor-nbd netlink-map [/dev/nbdN] (--image <image> | --pool <POOL> --inode <INODE> --size <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-устройства режим "только для чтения".
vitastor-nbd netlink-unmap /dev/nbdN

Отключить устройство через интерфейс netlink. Работает и с обычными, и с netlink-устройствами.

vitastor-nbd netlink-revive /dev/nbdX (--image <image> | --pool <pool> --inode <inode> --size <size in bytes>)

Оживить мёртвое NBD-устройство, ранее подключённое через netlink, без удаления. Поддерживает те же опции, что и netlink-map.