2022-01-29 23:43:22 +03:00
|
|
|
|
[Документация](../../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)).
|
|
|
|
|
|
2023-12-02 13:47:51 +03:00
|
|
|
|
Смотрите также [VDUSE](qemu.ru.md#vduse), как лучшую альтернативу NBD.
|
2022-01-29 23:43:22 +03:00
|
|
|
|
|
2023-12-02 13:47:51 +03:00
|
|
|
|
CSI-драйвер Kubernetes Vitastor использует NBD, когда VDUSE недоступен.
|
2023-07-04 00:57:34 +03:00
|
|
|
|
|
2024-04-08 15:32:12 +03:00
|
|
|
|
Поддерживаются следующие команды:
|
|
|
|
|
|
|
|
|
|
- [map](#map)
|
|
|
|
|
- [unmap](#unmap)
|
|
|
|
|
- [ls](#ls)
|
|
|
|
|
- [netlink-map](#netlink-map)
|
|
|
|
|
- [netlink-unmap](#netlink-unmap)
|
|
|
|
|
- [netlink-revive](#netlink-revive)
|
|
|
|
|
|
|
|
|
|
## map
|
2022-01-29 23:43:22 +03:00
|
|
|
|
|
|
|
|
|
Чтобы создать локальное блочное устройство для образа, выполните команду:
|
|
|
|
|
|
|
|
|
|
```
|
2024-04-08 15:32:12 +03:00
|
|
|
|
vitastor-nbd map [/dev/nbdN] --image testimg
|
2022-01-29 23:43:22 +03:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Команда напечатает название блочного устройства вида /dev/nbd0, которое потом можно
|
|
|
|
|
будет использовать как обычный диск.
|
|
|
|
|
|
|
|
|
|
Для обращения по номеру инода, аналогично другим командам, можно использовать опции
|
|
|
|
|
`--pool <POOL> --inode <INODE> --size <SIZE>` вместо `--image testimg`.
|
|
|
|
|
|
2023-12-02 14:11:02 +03:00
|
|
|
|
vitastor-nbd поддерживает все обычные опции Vitastor, например, `--config_file <path_to_config>`,
|
|
|
|
|
плюс специфичные для NBD:
|
2023-05-19 23:54:05 +03:00
|
|
|
|
|
2024-04-08 15:32:12 +03:00
|
|
|
|
* `--nbd_timeout 0` \
|
2023-05-19 23:54:05 +03:00
|
|
|
|
Максимальное время выполнения любой операции чтения/записи в секундах, при
|
2024-04-08 15:32:12 +03:00
|
|
|
|
превышении которого ядро остановит NBD-устройство. На ядрах Linux старее 5.19,
|
|
|
|
|
если таймаут установлен в 0, NBD-устройство вообще невозможно отключить из системы
|
|
|
|
|
при нештатном завершении процесса.
|
2023-05-19 23:54:05 +03:00
|
|
|
|
* `--nbd_max_devices 64 --nbd_max_part 3` \
|
2024-04-08 15:32:12 +03:00
|
|
|
|
Опции, передаваемые модулю ядра nbd, если его загружает vitastor-nbd (`nbds_max` и `max_part`).
|
2023-05-19 23:54:05 +03:00
|
|
|
|
* `--logfile /path/to/log/file.txt` \
|
|
|
|
|
Писать сообщения о процессе работы в заданный файл, вместо пропуска их
|
|
|
|
|
при фоновом режиме запуска или печати на стандартный вывод при запуске
|
|
|
|
|
в консоли с `--foreground 1`.
|
|
|
|
|
* `--dev_num N` \
|
|
|
|
|
Использовать заданное устройство `/dev/nbdN` вместо автоматического подбора.
|
|
|
|
|
* `--foreground 1` \
|
|
|
|
|
Не уводить процесс в фоновый режим.
|
|
|
|
|
|
2023-12-02 14:11:02 +03:00
|
|
|
|
Обратите внимание, что опции `nbd_timeout`, `nbd_max_devices` и `nbd_max_part` можно
|
|
|
|
|
также задавать в `/etc/vitastor/vitastor.conf` или в другом файле конфигурации,
|
|
|
|
|
заданном опцией `--config_file`.
|
|
|
|
|
|
2024-04-08 15:32:12 +03:00
|
|
|
|
## unmap
|
2022-01-29 23:43:22 +03:00
|
|
|
|
|
|
|
|
|
Для отключения устройства выполните:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
vitastor-nbd unmap /dev/nbd0
|
|
|
|
|
```
|
2023-05-19 23:54:05 +03:00
|
|
|
|
|
2024-04-08 15:32:12 +03:00
|
|
|
|
## ls
|
2023-05-19 23:54:05 +03:00
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
vitastor-nbd ls [--json]
|
|
|
|
|
```
|
|
|
|
|
|
2024-04-08 15:32:12 +03:00
|
|
|
|
Вывести подключённые устройства.
|
|
|
|
|
|
2023-05-19 23:54:05 +03:00
|
|
|
|
Пример вывода в обычном формате:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
/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}}
|
|
|
|
|
```
|
2024-04-08 15:32:12 +03:00
|
|
|
|
|
|
|
|
|
## netlink-map
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
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-устройства режим "только для чтения".
|
|
|
|
|
|
|
|
|
|
## 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`.
|