Поддержка блочного ввода/вывода
драйвер [blk опция[,опция...]] [тип_файловой_системы [опции]]
- драйвер
- Один из драйверов devb-*, например devb-eide
- тип_файловой_системы
- Один из драйверов файловой системы fs-*; после него можно указать опции, специфичные для конкретной файловой системы.
Суффиксы для размеров памяти
Значения размера используемой памяти можно определить путем запуска команды io-blk.so с любым из следующих суффиксов:
-
b
– байты -
k
– килобайты -
m
– мегабайты -
p
– страницы -
g
– гигабайты -
%
– процент от общего размера кэша, выделения памяти и т.д. в зависимости от опции
Для параметров, характеризующих время, употребимы следующие суффиксы:
-
h
— часы -
m
— минуты -
s
— секунды
Следующие опции можно определить только в группе 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
Если значение не указано, библиотека выполняет попытку выбора файловой системы автоматически.
Если в качестве устройство указано "@имя_файла", точки монтирования соответствуют указанным в данном файле. Файл представляет собой список точек понтирования (с применением указанного выше синтаксиса), позиции в котором разделены символами новой строки или запятыми.
 | Разместить файл имя_файла в файловой системе, автоматическое монтирование которой выполняется, невозможно: он должен быть доступен в существующей файловой системе, например, в файловой системе образа. Например, его можно расположить в любой запущенной файловой системе devb-*. |
Для монтирования нескольких файловых систем в (съемном) устройстве с помощью префикса +
следует указать, что устройство является разделяемым. Пример:
automount=+fd0:/dos/a:dos,automount=+fd0:/fd:qnx4
Список общих типов разделов приведен в главе «Файловые системы» документа «Описание применения. Часть 1. Системная архитектура» КПДА.10964-01.
- bufsz=мин:макс
- Размер наименьшего и наибольшего физического сектора в байтах. Значение по умолчанию – 512:8K.
- cache=общий_размер
- Общий допустимый размер кэша в оперативной памяти. Кэш-память выделяется по мере необходимости сверх исходного объема, указанного с помощью опции alloc, до достижения размера, определенного аргументом общий_размер. Для размера памяти используются описанные выше суффиксы; значение по умолчанию – 15%% от ОЗУ системы с минимумом в 512Кб и максимумом в 512Мб.
 | Размер кэша по умолчанию является избыточным для 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.
 | Для разделения опций используется запятая (,). |
ЗОСРВ «Нейтрино»
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 |
 | Если используется 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#
.
 | Смена схемы осуществляется на свой страх и риск. - Для некоторых компонентов системы могут существовать жестко закодированные предположения об именах жесткого диска.
- Смена схемы возможна только при условии контроля всей системы (например, ее не следует изменять в настольной установленной системе, где diskboot выполняет сканирование известных имен со стилем
hd0t77 ).
- При использовании другой схемы потребуются дополнительные знания о файловой системе, которая монтируется в разделе, поскольку подсказка по присвоению имен
tXXX не доступна. |
Базовые подсистемы ЗОСРВ «Нейтрино», Драйверы
devb-*, fs-*, mount, diskboot
Предыдущий раздел: Драйверы