io-blk.so

Поддержка блочного ввода/вывода

Синтаксис:

драйвер [blk опция[,опция...]] [тип_файловой_системы [опции]]

Опции:

драйвер
Один из драйверов devb-*, например devb-eide
тип_файловой_системы
Один из драйверов файловой системы fs-*; после него можно указать опции, специфичные для конкретной файловой системы.

Суффиксы для размеров памяти

Значения размера используемой памяти можно определить путем запуска команды io-blk.so с любым из следующих суффиксов:

Для параметров, характеризующих время, употребимы следующие суффиксы:

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

Следующие опции можно определить только в группе blk.

alloc=режим
Установить один из следующих вариантов политики кэширования/выделения памяти:
cache (по умолчанию)
выделить весь кэш буфера (cache=размер) при запуске, а остальные типы кэша (например, кэш имен) выделять по запросу с возможностью увеличения до установленного предела, затем начать процесс LRU.
demand
выделить кэш буфера по запросу (при получении доступа к диску он увеличивается с 0 до размера, указанного в опции cache).
upfront
предварительно увеличить все типы кэша до полного размера. Эту опцию целесообразно использовать при настройке ОЗУ системы для просмотра конечного расхода памяти в файловой системе (кэш имен и виртуального дескриптора с течением времени увеличивается).
auto=количество
Установить объем операций автоматического монтирования; количество может принимать следующие значения:
none
отображать только блочные устройства без файловой системы.
partition (по умолчанию)
вывести список всех таблиц разделов.
automount=устройство[:точка_монтирования[:тип_файловой_системы[:опции]]]
Создать точку монтирования для устройства в соответствии со значениями устройство и точка_монтирования. Если полный путь к устройству не указан, то io-blk.so использует значение опции devdir в качестве префикса. Например, если devdir имеет значение /dev (по умолчанию), опция automount=hd0t77:/disk монтирует /dev/hd0t77 в местоположении /disk.

Дополнительный аргумент тип_файловой_системы определяет тип файловой системы, после чего можно установить соответствующие опции. Варианты файловой системы и соотвествующие разделяемые объекты:
cd
fs-cd.so
dos
fs-dos.so
ext2
fs-ext2.so
mac
fs-mac.so
nt
fs-nt.so
qnx4
fs-qnx4.so
qnx6
fs-qnx6.so
udf
fs-udf.so

Если значение не указано, библиотека выполняет попытку выбора файловой системы автоматически.

Если в качестве устройство указано "@имя_файла", точки монтирования соответствуют указанным в данном файле. Файл представляет собой список точек понтирования (с применением указанного выше синтаксиса), позиции в котором разделены символами новой строки или запятыми.

Note: Разместить файл имя_файла в файловой системе, автоматическое монтирование которой выполняется, невозможно: он должен быть доступен в существующей файловой системе, например, в файловой системе образа. Например, его можно расположить в любой запущенной файловой системе devb-*.

Для монтирования нескольких файловых систем в (съемном) устройстве с помощью префикса + следует указать, что устройство является разделяемым. Пример:

automount=+fd0:/dos/a:dos,automount=+fd0:/fd:qnx4

Список общих типов разделов приведен в главе «Файловые системы» документа «Описание применения. Часть 1. Системная архитектура» КПДА.10964-01.
bufsz=мин:макс
Размер наименьшего и наибольшего физического сектора в байтах. Значение по умолчанию – 512:8K.
cache=общий_размер
Общий допустимый размер кэша в оперативной памяти. Кэш-память выделяется по мере необходимости сверх исходного объема, указанного с помощью опции alloc, до достижения размера, определенного аргументом общий_размер. Для размера памяти используются описанные выше суффиксы; значение по умолчанию – 15%% от ОЗУ системы с минимумом в 512Кб и максимумом в 512Мб.

Note: Размер кэша по умолчанию является избыточным для devb-fdc и devb-ram. Для накопителя на гибких дисках это значение, очевидно, необходимо уменьшить до более приемлемого (blk cache=128k) или полностью исключить для драйвера ОЗУ.

delwri=задержка1:задержка2
Указать время задержки для операций отложенной записи на несъёмные и съёмные носители. Заполненный блок диска хранится в кэше и не записывается на диск в течение количества секунд, определенного аргументами задержка1 или задержка2. Значение по умолчанию – 3 секунды для несъёмных носителей (задержка1) и 1 секунда для съёмных носителей (задержка2). Для получения дополнительной информации см. раздел "Управление операциями записи" ниже.
devdir=путь
Каталог, в котором io-blk представляет физические устройства как блок-ориентированные специальные файлы. Значение по умолчанию – /dev.
devno=тип
Осуществлять управление процедурой запроса номеров устройств; возможные значения аргумента тип:
name (по умолчанию)
использовать имя устройства (например, hd, cd).
class
использовать класс стандартного метода доступа к устройству (например, direct, readonly).
common
использовать один класс для всех блочных устройств.
enumpart=порядок
Установить порядок перечисления разделов диска; возможные значения:
forward (по умолчанию)
перечислить слоты с 1 по 4, за которыми следуют расширенные разделы.
reverse
перечислить слоты с 4 по 1, за которыми следуют расширенные разделы.
windows
перечислить активные разделы, за которыми следуют любые расширенные разделы, а далее незагружаемые первичные разделы. Для получения дополнительной информации об этом порядке см. сайт Microsoft.
exclusive
Запросить/получить монопольный доступ к устройству монтирования.
fdinfo=режим
Указать способ хранения имен открытых файлов для запроса iofdinfo(). Параметр режим может принимать одно из следующих значений:
ncache
Выполнить попытку воссоздания имени файла из содержимого кэша имен каталогов. Эту опцию не рекомендуется использовать для предоставления имен всех открытых файлов (имя файла предоставляется только в том случае, если все компоненты его путевого имени находятся в кэше имен).
always (по умолчанию)
Сохранить имя, используемое при каждом вызове open() с целью обеспечения постоянной доступности этого имени.
never
Не предоставлять имя открытого файла.
map=размер
Определить число записей в кэше, используемых для отображения преобразований логических блоков в физические. Если эта опция не указана, размер зависит от значения опции vnode.
naming=схема
Установить схему присвоения имен устройств/разделов. Значение по умолчанию – 0#. Для получения дополнительной информации см. раздел "Схемы присвоения имен" далее.
ncache=размер
Указать размер кэша имен (число записей равно размер). Чем больше записей кэша имен используется, тем быстрее выполняются операции поиска пути/файла за счет дополнительного расхода памяти. При выборе для аргумента размер значения 0 кэширование имен деактивируется. Если эта опция не указана, размер определяется на основе опции vnode.
noaiod
Деактивировать асинхронную обработку iodone, выполнять обработку в контексте потока драйвера. По умолчанию обработка выполняется в выделенном потоке.
postpone=время
Сохранять заполненный блок диска в памяти в течение числа секунд, указанного в аргументе времени, до физической записи на диск, если он постоянно изменяется. При установке значения опции postpone обеспечивается периодическая запись постоянно изменяемых блоков на диск (через число секунд, указанное в аргументе время). Значение по умолчанию определяется в опции delwri.
priority=приоритет
Установить приоритет периодических вызовов файловой системы. Значение по умолчанию – 21.
protect=число
Определить число защищенных дополнительных передач LRU. Значение по умолчанию – 2.
ra=мин[:макс]
Установить минимальный и максимальный размер буферов опережающего чтения. Значение по умолчанию – "4k:64k".
ramdisk=размер
Создать виртуального диска (/dev/ramX) указанного размера. Для переменной размер можно использовать описанные выше суффиксы. Исходное содержимое этого запоминающего устройства не определено, поэтому перед использованием в качестве файловой системы необходимо выполнить его форматирование (см. описание dinit в руководстве по утилитам).
rmvpoll=период
Период опроса в секундах для съемных носителей (значение по умолчанию – 0).
rmvto=задержка
Указать для съемного носителя таймаут, соответствующий значению задержка в секундах (по умолчанию – 2 секунды). После неактивности в течение числа секунд, указанных в аргументе задержка, при доступе к диску у драйвера запрашивается подтверждение наличия носителя; если поступает сообщение об изменении носителя, все блоки данных и кэшированная информация для этого устройства отбраковываются и заменяются другими данными.
thread=[макс][:низкий[:высокий]]
Установить параметры пула потоков (максимальный уровень, низкая загрузка и высокая загрузка). Значение по умолчанию – 12:2:5.
verbose[=уровень]
Вывести расширенную информацию. Вывод направляется в системный журнал slogger. Аргумент уровень не является обязательным и представляет собой последовательность буквенных символов, которая определяет категории событий для записи в журнал:
b
сбойные блоки
c
конфигурация
i
ввод
o
вывод
d
прямой ввод/вывод
r
съемный носитель
v
виртуальная файловая система (virtual filesystem; VFS)
f
модуль файловой системы ( fs-*)

blk verbose означает все уровни, blk verbose=io означает ввод и вывод, blk verbose=!r означает все, кроме съемных носителей и т.д. Значение по умолчанию – bcdfiorv.
vnode=размер
Указать число записей виртуального дескриптора (независимых от индексных дескрипторов файловой системы), значение по умолчанию – 1280 записей. Виртуальные дескрипторы остаются активными до достижения размера, указанному в аргументе размер. Виртуальные дескрипторы остаются в кэш-памяти при закрытии соответствующего файла, что сокращает время, требуемое на последующие операции открытия файла.
wipe=размер
Установить размер кэш-памяти, которую может занимать один файл. Эта опция предназначена для предотвращения ситуации стирания кэша, при которой чтение файла большого размера может занять большую часть кэш-памяти буфера. В значении размер можно указать описанные выше суффиксы; значение по умолчанию – 100%% (т.е. ограничение не применяется).

Опции файловой системы:

Следующие опции можно применять глобально (в группе blk) или для конкретной файловой системы (например, в группе qnx4 для файловой системы QNX 4):

after
Монтировать файловую систему с выполнением ее разрешения после всех других файловых систем, смонтированных с этим путевым именем (другими словами, поместить файловую систему после всех существующих монтируемых систем). Для получения доступа к файлу поиск в этой файловой системе осуществляется в последнюю очередь и только в том случае, если файл не был найден во всех остальных файловых системах.
before
Монтировать файловую систему с выполнением ее разрешения до всех других файловых систем, смонтированных с этим путевым именем (другими словами, поместить файловую систему перед всеми существующими смонтированными системами). Для получения доступа к файлу в первую очередь осуществляется поиск в файловой системе.
commit=уровень
Установить уровень использования файловой системы для управления процедурой записи заполненных системных/пользовательских блоков на диск. Аргумент уровень может иметь значение:
none
low
medium (по умолчанию)
high

Если выбрано значение none, все операции записи выполняются с задержкой (установленной посредством опции delwri); при выборе значения high все операции записи выполняются синхронно. Для получения дополнительной информации см. раздел "Управление операциями записи" ниже.
error=действие
Определить действие, выполняемое при обнаружении модулем файловой системы fs-* внутренней ошибки. Возможные значения аргумента действие:
ebadfsys (по умолчанию)
возврат EBADFSYS клиенту.
mountro
возврат EBADFSYS клиенту и повторное монтирование соответствующей файловой системы с атрибутом "только для чтения".
marking=режим
Установить поведение маркирования заполнения файловой системы. Аргумент режим может иметь значение none или mount (по умолчанию). Если маркирование активировано, то файловая система отмечается как заполненная при монтировании и как очищенная при размонтировании. Метод маркирования зависит от файловой системы.
[no]atime
Обновлять/не обновлять запись в каталоге файла, если изменилось только время доступа. Опция noatime не соответствует POSIX 1003.2, но позволяет работать быстрее.
[no]creat
Разрешить/запретить создание файлов в этой файловой системе.
[no]exec
Разрешить/запретить выполнение файлов из этой файловой системы.
[no]lock
Блокировать/не блокировать съемный носитель. Если носитель блокирован, то он обрабатывается как стационарный.
[no]rmv
Запретить/разрешить монтирование на съемных носителях (повторная вставка).
[no]suid
Игнорировать/не игнорировать бит SUID в файлах этой файловой системы.
ro
Выполнить монтирование всех дисков/файловых систем с атрибутом "только для чтения".
rw
Выполнить монтирование всех дисков/файловых систем с атрибутом "чтение и запись" (если разрешено физическим носителем). Используется по умолчанию. Для получения дополнительной информации об опциях before и after см. раздел «Порядок точек монтирования» в главе «Менеджер процессов» документа «Описание применения. Часть 1. Системная архитектура» КПДА.10964-01.


Caution: Для разделения опций используется запятая (,).

Платформы:

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

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

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

Описание:

Библиотека io-blk.so обеспечивает поддержку блочного ввода/вывода, используемого драйверами devb-*, и загружает требуемые драйверы файловых систем ( fs-*).

Значения по умолчанию опций map и ncache зависят от значения опции vnode. Это условие позволяет конфигурировать систему путем определения размера кэш-памяти и числа файлов. Помимо этого обеспечивается возможность установки библиотекой и других опций.

Управление операциями записи

Типы операций записи:

Синхронно (SYNC)
Начать немедленно и ожидать завершения.
Асинхронно (ASYNC)
Запустить немедленно, но не ожидать завершения.
С задержкой (DELWRI)
Не запускать до окончания периода таймаута, затем выполнить асинхронно. Опция __blk delwri=__ контролирует таймаут для формата с задержкой; если для этой опции указано значение 0, операция отложенной записи выполняется аналогично операции асинхронной записи.
При необходимости
Записывать только в случае необходимости.

Возможные типы данных:

Пользовательские данные
Объекты операций чтения и записи: read() и write().
Метаданные
Данные, связанные с командой stat(), например время и идентификаторы.
Данные файловой системы
Файлы побитовой карты (bitmap), экстенты и т.д.
Если для файла отсутствуют ссылки, используется операция записи типа "при необходимости". При этом обращение к жесткому диску выполняется только в случае необходимости буфера или кэш-памяти (поскольку файл не имеет ссылок, обеспечивать доступность данных в случае сбоя питания не предполагается). При открытии файла с помощью O_SYNC всегда используется синхронный формат.

В противном случае тип записи для каждого уровня данных определяется уровенем blk commit:

commit= Данные файловой системы Метаданные Пользовательские данные
none DELWRI DELWRI DELWRI
low ASYNC DELWRI DELWRI
medium SYNC DELWRI DELWRI
high SYNC SYNC SYNC


Note: Если используется commit=none, теряется весь порядок записи (для единичных многоблочных обновлений и операций с участием нескольких пользователей). Следовательно, вероятность корректного восстановления после сбоя питания невелика. Опцию рекомендуется использовать только при наличии источника бесперебойного питания иначе не удастся использовать dinit для восстановления файловой системы.

При вызове close() возможно принудительное обновление метаданных. Пользовательские данные не изменяются. При вызове fsync() выполняется запись всех блоков файла с отложенной записью, поэтому использовать эту функцию полезно в случае, если значение commit отличается от high.

Схемы присвоения имен

Опция naming=схема используется для определения схемы присвоения имен для устройств и разделов. Параметр схема может быть указан в следующем формате:

0# (где 0 соответствует любой цифре и определяет первое/базовое число)
Устройства получают имена 0, 1 и т.д., а разделы – на основе имени устройства с добавлением t после типа ОС раздела (см. «Разделы» в главе «Файловые системы» документа «Описание применения. Часть 1. Системная архитектура» КПДА.10964-01 31 01). Например, разделу ЗОСРВ «Нейтрино» может быть присвоено имя hd0t77. Для дублируемых разделов добавляется точка (.) и порядковый номер (например, hd0t12, hd0t12.1 и hd0t12.2 для логических/расширенных разделов DOS). Это схема присвоения имен ЗОСРВ «Нейтрино».
0a (фактически любая цифра или буква; определяет первое/базовое имя)
Устройства получают имена 0, 1, ..., а разделы – a, b и т.д. (например, /dev/hd0, /dev/hd0a, /dev/hd0b, /dev/hd0c и т.д.). В имени не указывается тип ОС для разделов, а только порядок их обнаружения.
a1 (фактически любая буква или цифра; определяет первое/базовое имя)
Устройствам присваиваются имена a, b и т.д. Первичные разделы имеют имена 1, 2, 3 и 4; если их меньше четырех, неиспользуемые номера пропускаются. Все расширенные разделы нумеруются без пропусков после 5 (например, /dev/hda, /dev/hda1, /dev/hda2, /dev/hda5 и т.д.). В имени не указывается тип ОС раздела, а только его местоположение. Это схема присвоения имен используется в Linux.

Значение по умолчанию – 0#.


Note: Смена схемы осуществляется на свой страх и риск.
  • Для некоторых компонентов системы могут существовать жестко закодированные предположения об именах жесткого диска.

  • Смена схемы возможна только при условии контроля всей системы (например, ее не следует изменять в настольной установленной системе, где diskboot выполняет сканирование известных имен со стилем hd0t77).

  • При использовании другой схемы потребуются дополнительные знания о файловой системе, которая монтируется в разделе, поскольку подсказка по присвоению имен tXXX не доступна.

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

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

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

devb-*, fs-*, mount, diskboot




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