2004 г
FreeBSD 5.2: файловая система устройств
Алексей Федорчук, UNIX4all
Обновления материалов Алексея Федорчука публикуются на http://unix.ginras.ru/freebsd/
Первая заметка про FreeBSD 5.2 вызвала чувство разочарования у некоторых моих читателей. Вдаваться в объяснения, почему я написал ее именно так, а не иначе, не буду. Скажу только, что в дальнейших заметках по мере сил и возможностей буду освещать те новшества 5-й ветки, с которыми столкнулся (и понял, как и для чего использовать их в мирных целях).
И еще: нынче речь идет конкретно о версии 5.2. Однако все сказанное здесь (и в последующих заметках) относится ко всей 5-й ветке (вероятно, даже и к будущим ее версиям:-))
Одно из существенных новшеств, привнесенных во FreeBSD 5-й ветки - это файловая система устройств, devfs. Конечно, по замыслу она призвана облегчить жизнь разработчиков, в первую очередь - создателей драйверов устройств. Однако и простому пользователю она дает множество преимуществ.
Ранее файлы устройств (а напомню, что все физические устройства в POSIX-системах по определению суть файлы), размещающиеся в каталоге /dev, создавались при установке системы по принципу явной избыточности. Например, любая современная машина имеет минимум два канала IDE, к каждому из которых можно подключить по два устройства. Так вот, для всех этих теоретически возможных устройств создавались файлы вида /dev/ad0, /dev/ad1, /dev/ad2, /dev/ad3. Вне зависимости от реального наличия дисков, CD-приводов или иных ATA-устройств. А поскольку каждый диск может нести по четыре первичных раздела (называемых во Free слайсами - slices), то и для каждого эвентуального слайса создавалось по файлу: /dev/ad0s1, /dev/ad0s2 и так далее.
В результате каталог /dev сразу же после установки был загроможден немерянным количеством файлов всевозможных устройств - дисков, слайсов, партиций, терминалов и псевдотерминалов, и так далее. Что на начинающего пользователя производит впечатление просто устрашающее. Тем паче что обращаться к большей части этого списка ему не приходилось никогда.
В то же время по умолчанию в /dev подчас отсутствовали файлы для устройств необходимых, дополнительных виртуальных консолей, например, или устройств, которые допускают горячее подключение (типичный пример - получившие нынче широкое распространение флэш-драйвы). И недостающие файлы приходилось создавать с помощью специального сценария /dev/MAKEDEV, или просто вручную - командой /sbin/mknod.
Нынче же файловая система устройств (монтируемая в тот же каталог /dev) сама проверяет устройства, реально подключенные к машине, во время ее старта, и создает для них (и только для них) соответствующие файлы. Файлы для устройств, реально не подключенных, при старте системы не создаются. Однако если некий девайс допускает горячее подключение, то после такового соответствуюший ему файл создается на лету. Что очень упрощает жизнь при использовании USB-флэшек, цифровых камер и тому подобных приспособлений. Плюс к чему исчезает необходимость в каком-либо конфигурировании USB-мыши: достаточно активизировать мышь (enable) в конфигурационном меню sysinstall или просто руками вписать в файл /etc/rc.conf строку
moused_enable="YES"
moused_type="auto"
Использование devfs во FreeBSD не требует (в отличие от большинства дистрибутивов Linux) абсолютно никаких манипуляций: нет нужды ни в пересборке ядра (она поддерживается ядром по определению, без какого-либо указания опций конфигурирования), ни в монтировании ее, руками ли или через /etc/fstab.
Очень радостно, что введение devfs во FreeBSD не изменило номенклатуры файлов устройств, подобно тому, как это произошло в Linux. То есть файлы дисковых устройств как были /dev/ad#, так ими и остались, без всяких устрашающих конструкций типа /dev/ide/.../disc, и так далее.
Кроме того, во FreeBSD можно практически полностью игнорировать пресловутую обратную совместимость новой нотации устройств со старой. Что понятно - ведь все низкоуровневые утилиты в этой ОС, напрямую взаимодействующие с устройствами, по определению являются неотъемлемыми компонентами системы, и переписаны в версиях 5-й ветки с учетом новых требований. В результате каталог /dev опять же не загромождается многочисленными символическими ссылками на реальные устройства.
Тем не менее, при необходимости обратную совместимость новой нотации со старой обеспечить можно. А необходимость такая иногда возникает. Так, давеча я столкнулся с тем, что программа mplayer при просмотре VideoCD по умолчанию пытается обратиться к файлу /dev/cdrom, какового, естественно, не имеется - файл устройства чтения CD носит во Free имя /dev/acd0 (если он единственный).
Вероятно, такое положение можно изменить в конфигурации самого mplayer (можно ли? - буду признателен за информацию). Однако я слишком редок смотрю VideoCD, и разбираться с этим мне было откровенно лень. К тому же можно предполагать, что и какие-то другие программы (например, проигрыватели компактов) поведут себя аналогично. Так что лучше проблему устройства /dev/cdrom решить раз и навсегда.
Для этого придется обратиться к файлу /etc/devfs.conf - аналогу /dev/devfsd.conf из дистрибутивов Linux, использующих эту файловую систему. Подобно совему полутезке, /etc/devfs.conf описывает, для каких устройств из каталога /dev нужно устанавливать симлинки при старте системы, и с какими именами. По умолчанию все строки в нем закомментированы. Однако мы легко находим там строки
# Commonly used by many ports
#link acd0 cdrom
и снимаем комментарий со второй из них. Характерно, что никаких демонов совместимости (типа devfsd) при этом специально запускать не нужно. Да вроде бы, их и не предусмотрено уставом. Или я ошибся?
Вот пока и все о devfs. В следующей заметке речь пойдет о mfs - файловой системе в оперативной памяти. Это - не новшество 5-й ветки, но используется она в последней существенно иначе, чем ранее.