Драйвер блочного псевдо-устройства
devb-loopback [loopback option[,option]] [blk option[,option]...] &
Поддерживаемые опции можно найти в описании модуля io-blk.so. Указываемые опции должны следовать за ключевым словом blk.
Драйвер devb-loopback загружает стандартные динамические библиотеки (DLL) блочных устройств, использующие буферный кеш, с теми же значениями по умолчанию, что и для драйверов файловых систем, кеш, вероятно, будет слишком большим для devb-loopback. Уменьшить размер кеша можно с помощью параметра blk cache=size. В зависимости от фактического размера устройства и текущего уровня кэширования, может быть достаточным значение кеша 128 КБ.
Опции 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 , ... |
/dev/lo0
, /dev/lo1
и т.д. Это глобальная опция, распространяемая на все экземпляры записей fd.O_RDWR
или O_RDONLY
). Если указан режим O_RDONLY
(только для чтения), то возможно подключение только файловых систем только для чтения к соответствующему псевдо-устройству (псевдо-устройство представляется как DEV_RDONLY
). Опция действует на все последующие записи fd.O_SYNC
). Результат работы опции зависит от менеджера ресурсов, ответственного за конкретный файл (обычно эта опция игнорируется). Эта опция влияет на запись в псевдо-устройство, а не на режим записи в смонтированные на это псевдо-устройство файловые системы (которые можно контролировать с помощью опций монтирования или опций blk delwri=... commit= ...). |
SH_DENY
открытия файлового дескриптора. Режим deny исключает открытие файла другими процессами, тем самым предотвращая его изменение минуя процесс devb-loopback, что позволяет избежать проблем согласованности доступа к файлу. Опция действует на все последующие записи fd.1
. Значение 0
указывает, чтобы все операции ввода/вывода выполнялись синхронно по отношению к операциям на файловой системе. Значение параметра может быть выше, чтобы этот ввод-вывод не стал «узким местом» для операций ввода/вывода уровня файловой системы (необходимо только при указании нескольких путей fd). Это глобальный параметр. Пул потоков обслуживает запросы ко всем файлам fd на приоритете процесса-клиента.1
). Опция действует на все последующие записи fd.1
). Опция действует на все последующие записи fd. ЗОСРВ «Нейтрино»
aarch64, arm, armv7, e2k, mips, ppc, x86
Для запуска этого драйвера необходимо войти в систему с учетной записью 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
приведёт к схеме, представленной на рисунке:
Файл должен быть предварительно подготовлен. Например, предполагая, что /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 должны поддерживать стандартный интерфейс:
O_RDONLY
и O_RDWR
, а также флаги общего доступа SH_DENY
и модификатор O_SYNC
(если эти параметры используются в командной строки devb-loopback). Рекомендуется использовать обработчик iofunc по умолчанию. iofunc_mount_t
, который устанавливает подходящий «blocksize» (по умолчанию 1 байт, что не подходит для использования в блочном устройстве, blocksize должен быть равен 512
, 1024
, 2048
или 4096
). Смотрите также описание вызова devctl() ниже и параметра loopback blksz=option. _IO_XTYPE_OFFSET
, применяемый в pread() и pwrite(), тогда используется этот интерфейс, иначе используется механизм seek и обычные чтение/запись. _IO_XTYPE_OFFSET
не поддерживается (см. выше), то устройство должно поддерживать механизм lseek. В этом случае можно использовать стандартный обработчик iofunc из libc. 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()
Предыдущий раздел: Драйверы