Блочное устройство
Основное понятие дисковой подсистемы в Unix и Linux — Блочные устройства.
Блочное устройство (block device) — вид файла устройств в UNIX/Linux-системах, обеспечивающий интерфейс к устройству, реальному или виртуальному, в виде файла в файловой системе. С блочным устройством обеспечивается обмен данными блоками данных. Как правило, это устройства произвольного доступа, то есть можно указать, из какого именно места должен быть прочитан или записан блок данных. Данные при чтении или записи на блочное устройство буферизуются.
Если говорить проще, то блочное устройство обеспечивает интерфейс к устройству.
Пример:
# ls -la /dev/sd*
Блочное устройство обеспечивает обмен блоками данных.
Блок (chunk) — это единица данных фиксированного размера. Размер блока определяется ядром, чаще всего совпадает с размером страницы аппаратной архитектуры. Для 32-архитектуры x86 составляет 4096 байт.
# fdisk -l /dev/sda
Существующие подходы к организации /dev
- Статическая организация — специальные файлы для всех возможных устройств вне зависимости от того, загружен драйвер соответствующего устройства или нет.
- Динамическая организация — специальные файлы в /dev создаются по мере инициализации устройств и загрузки драйверов, и удаляются при выгрузке соответствующего драйвера или удалении устройства.
Процесс работы со статическим /dev особых проблем не вызывает – системный администратор при необходимости просто создает отсутствующие файлы командой mknod.
DevFS
Ядро монтирует к каталогу /dev специальную файловую систему, называемую devfs:
- Целиком находится в оперативной памяти
- Драйвер devfs динамически создает специальный файл
- Динамически же удаляет его
Udev
В отличие от devsfd, который требовал поддержки со стороны ядра, udev
такой поддержки не требует.
● Постоянно закрепленные за устройствами имена, которые не зависят от
того, какое положение они занимают в дереве устройств.
● Уведомление внешних по отношению к ядру программ, если устройство
было заменено
● Гибкие правила именования устройств.
Devtmpfs
На текущий момент используется devtmpfs + udev
После монтирования корневой файловой системы, этот экземпляр tmpfs перемонтируется ядром в каталог /dev
devtmpfs отвечает за заполнение каталога /dev
udev за права доступа, необходимые симлинки и запуск скриптов
пользователя