devb-loopback

Драйвер блочного псевдо-устройства

Синтаксис:

devb-loopback [loopback option[,option]] [blk option[,option]...] &

Опции:

...
Все опции драйвера сгруппированы по принадлежности к отдельным модулям. Для разделения опций используется запятая (,). Опции модулей loopback и blk могут располагаться в любом порядке.

Опции модуля blk:

Поддерживаемые опции можно найти в описании модуля io-blk.so. Указываемые опции должны следовать за ключевым словом blk.

Драйвер devb-loopback загружает стандартные динамические библиотеки (DLL) блочных устройств, использующие буферный кеш, с теми же значениями по умолчанию, что и для драйверов файловых систем, кеш, вероятно, будет слишком большим для devb-loopback. Уменьшить размер кеша можно с помощью параметра blk cache=size. В зависимости от фактического размера устройства и текущего уровня кэширования, может быть достаточным значение кеша 128 КБ.

Опции модуля loopback:

fd=path

Note: Опции rw, ro, sync, async, denyno, denyrd, denywr, denyrw, blksz, heads и tracks применяются ко всем последующим опциям fd, но могут быть указаны несколько раз с разными значениями (например, loopback ro,fd=/dev/cd0,rw,fd=/fs/hd/iso.img). Несколько опций fd могут принимать значения по порядку /dev/lo0, /dev/lo1, ...

Каждое путевое имя приведет к созданию соответствующего блочного псевдо-устройства (см. prefix), содержимое которого будет доступно через стандартные операции чтения/записи с файловым дескриптором. Можно будет монтировать стандартные файловые системы (например, fs-dos.so и fs-qnx4.so) с этими псевдо-устройствами и прозрачно их использовать. Несколько устройств, определенных через fd обслуживаются одним процессом devb-loopback.
prefix=name
Имя блочного псевдо-устройства. По умолчанию lo. Таким образом, каждая запись fd, указанная в командной строке, будет отображаться как /dev/lo0, /dev/lo1 и т.д. Это глобальная опция, распространяемая на все экземпляры записей fd.
rw (по умолчанию)
ro
Режим доступа к файловому дескриптору (O_RDWR или O_RDONLY). Если указан режим O_RDONLY (только для чтения), то возможно подключение только файловых систем только для чтения к соответствующему псевдо-устройству (псевдо-устройство представляется как DEV_RDONLY). Опция действует на все последующие записи fd.
sync (по умолчанию)
async
Режим синхронной записи, который будет установлен при открытии файлового дескриптора (O_SYNC). Результат работы опции зависит от менеджера ресурсов, ответственного за конкретный файл (обычно эта опция игнорируется).

Note: Эта опция влияет на запись в псевдо-устройство, а не на режим записи в смонтированные на это псевдо-устройство файловые системы (которые можно контролировать с помощью опций монтирования или опций blk delwri=... commit= ...).

Опция действует на все последующие записи fd.
denyno
denyrd
denywr
denyrw (по умолчанию)
Режим SH_DENY открытия файлового дескриптора. Режим deny исключает открытие файла другими процессами, тем самым предотвращая его изменение минуя процесс devb-loopback, что позволяет избежать проблем согласованности доступа к файлу. Опция действует на все последующие записи fd.
seek
xtype (по умолчанию)
Настройка ввода/вывода через файловый дескриптор, используя комбинации LSEEK+READ или READ+XTYPE_OFFSET. По умолчанию, драйвер devb-loopback проверяет хостовую файловую систему на поддержку вызовов pread() и pwrite(). Опция действует на все последующие записи fd.
blksz=size
Переназначение параметра размер блока (blocksize) устройства. Обычно этот параметр проверяется через вызов stat() или devctl( DCMD_CAM_DEVINFO ) вызов в соответствующем менеджере устройств и значение этого параметра затем сообщается по запросу другим задачам, но некоторые менеджеры ресурсов не сообщают актуальное значение этого параметра (например, драйверы devf-* сообщают о размере блока 1 байт).

Эта опция может понадобиться в некоторых случаях, когда образ файловой системы был первоначально отформатирован на устройстве с другим размером блока по сравнению с хостовой файловой системой. Имитация исходного размера блока может потребоваться для правильной работы или в целях увеличения производительности.

Опция действует на все последующие записи fd, но можно сбросить этот параметр для конкретной записи, используя пустое значение опции (например, blksz=2048,fd=/F1,blksz=,fd=/F2).
nio=num
Количество асинхронных потоков ввода-вывода (которые отвечают за выполнение операций чтения/записи на внутреннем блочном устройстве как обычные операции чтения/записи через внешний файловый дескриптор). Эта многопоточность полезна, если вы указали несколько устройств fd.

По умолчанию используется значение 1. Значение 0 указывает, чтобы все операции ввода/вывода выполнялись синхронно по отношению к операциям на файловой системе. Значение параметра может быть выше, чтобы этот ввод-вывод не стал «узким местом» для операций ввода/вывода уровня файловой системы (необходимо только при указании нескольких путей fd). Это глобальный параметр. Пул потоков обслуживает запросы ко всем файлам fd на приоритете процесса-клиента.
heads=num
Количество «головок» (по умолчанию 1). Опция действует на все последующие записи fd.
tracks=num
Количество секторов на «дорожку» (по умолчанию 1). Опция действует на все последующие записи fd.

Платформы:

ЗОСРВ «Нейтрино»

Целевые архитектуры:

aarch64, arm, armv7, e2k, mips, ppc, x86

Описание:


Caution: Для запуска этого драйвера необходимо войти в систему с учетной записью root.

Блочные файловые системы в ЗОСРВ «Нейтрино» реализованы как DLL модули c внутренним API. Таким образом монтировать файловые системы можно (таких типов как QNX или DOS) возможно только к запущенным devb-* драйверам. Драйвер devb-loopback сопоставляет файловый дескриптор с блочным API и позволяет любому менеджеру ресурсов выполнять роль менеджера файловой системы.

Внутренние вызовы, обычно ориентированные на драйвер SCSI/CAM, преобразуются в стандартные вызовы read() и write() для работы с данными данных блочного псевдо-устройства, которое представлено в системе как блочное устройство (диск).

Ресурс любого менеджера устройств может быть представлен как специальное блочное устройство и смонтирован затем как дисковая файловая система. Например, вы обычно не можете напрямую использовать образ ISO9660 для доступа к его данным. Драйвер devb-loopback обеспечивает представление этого файла как блочное устройство, которое можно смонтировать с помощью модуля fs-cd.so.

Например результат команды:

devb-loopback fd=/devf/iso blk automount=lo0:/fs/iso:cd

приведёт к схеме, представленной на рисунке:

devb-loopback.png

Файл должен быть предварительно подготовлен. Например, предполагая, что /fs/flash - это смонтированная файловая система, сначала нужно выполнить следующую настройку:

touch /fs/flash/q4.img dinit -hq -S32m /fs/flash/q4.img

Затем можно использовать этот файл во флэш-памяти в качестве read-write файловой системы fs-qnx4.so:

devb-loopback blk cache=128k,auto=none loopback fd=/fs/flash/q4.img mount -tqnx4 /dev/lo0 /q4flash

В этом случае использование драйвера devb-loopback добавляет атрибуты дисковой файловой системы (времена доступа, жесткие ссылки и т.д.) К файловой системе devf-*. В других случаях devb-loopback позволяет использовать кеширование (например, имен и блоков), поддерживаемое модулем io-blk.so, которое может не поддерживать исходный менеджер ресурсов.

Поддержка драйверов

Менеджеры ресурсов, управляющие путевыми именами, определенными через fd должны поддерживать стандартный интерфейс:

open(), close()
Устройство должно иметь возможность открывать и закрывать дескриптор файла. Должны поддерживаться режимы O_RDONLY и O_RDWR, а также флаги общего доступа SH_DENY и модификатор O_SYNC (если эти параметры используются в командной строки devb-loopback). Рекомендуется использовать обработчик iofunc по умолчанию.
fstat()
Устройство должно поддерживать механизм stat, который используется для определения размера и геометрии базового устройства. По умолчанию используется iofunc-обработчик из libc, если имеется связанная с ним структура iofunc_mount_t, который устанавливает подходящий «blocksize» (по умолчанию 1 байт, что не подходит для использования в блочном устройстве, blocksize должен быть равен 512, 1024, 2048 или 4096). Смотрите также описание вызова devctl() ниже и параметра loopback blksz=option.
read(), write()
Устройство должно поддерживать вызовы для чтения и записи, которые используются для передачи «дисковых блоков» между устройством и кешем файловой системы. Размер данных для ввода-вывода исчисляется в количестве кратном blocksize и в пределах размера данных устройства. Если устройство поддерживает модификатор _IO_XTYPE_OFFSET, применяемый в pread() и pwrite(), тогда используется этот интерфейс, иначе используется механизм seek и обычные чтение/запись.
lseek()
Если модификатор _IO_XTYPE_OFFSET не поддерживается (см. выше), то устройство должно поддерживать механизм lseek. В этом случае можно использовать стандартный обработчик iofunc из libc.
devctl()
Устройство может дополнительно реализовать вызов devctl( DCMD_CAM_DEVINFO ). Это позволяет устанавливать определенные низкоуровневые параметры для точной настройки поведения менеджера ресурсов. Команда DCMD_ALL_GETFLAGS также используется для проверки состояния дескриптора файла (на отделяемом носителе). Подходящие значения по умолчанию для обоих этих параметров можно сделать из запроса fstat() (см. выше).

Примеры:

Пример монтирования образа файловой системы через loopback устройство (/dev/lo*):

devb-loopback blk cache=256k,vnode=128 \ loopback ro,blksz=2048,fd=/mnt/EFS/tts.iso & mount -r -tcd /dev/lo0 /mnt/tts

или опцию blk automount=...:

devb-loopback blk cache=256k,vnode=128,automount=lo0:/mnt/tts:cd \ loopback ro,blksz=2048,fd=/mnt/EFS/tts.iso &

Возможно использование утилиты umount для размонтирования файловой ситемы. Файловые дескрипторы файлов образов будут не закрыты и будут присутствовать устройства /dev/lo* до тех пор, пока процесс devb-loopback не будет завершен.

Классификация:

Базовые подсистемы ЗОСРВ «Нейтрино», Драйверы

Тематические ссылки:

cam-*, devb-*, io-blk.so, mount, umount

close(), devctl() fstat(), open(), pread(), pwrite(), read(), stat(), write()




Предыдущий раздел: Драйверы