Рассказы о ZFS. Из истории имён

По мере изменения механизмов управления устройствами в Linux неоднократно менялись и модели именования устройств, в том числе и номенклатура разного рода накопителей, интересующих нас нынче в первую очередь. Так что я вкратце остановлюсь на этой «номенклатурной» истории по следующим причинам:

  • во-первых, «исторические» (или, если угодно, «доисторические») имена файлов устройств можно встретить в старых добрых толстых книгах по UNIX и Linux, которые и поныне во-многом не потеряли актуальности — ибо новых равноценных никто уже не напишет, по крайней мере, на русском языке;
  • во-вторых, вследствие широко практикуемого при создании контента метода копипаста «исторические» имена файлов устройств проникают даже в относительно свежие журнальные и сетевые материалы;
  • и в-третьих, историю просто не вредно знать.

Испокон веков, со времён статического заполнения каталога /dev, файлы дисковых устройств в именовались так: hd? — для дисков с интерфейсом IDE (который ныне мы обычно называем PATA) и sd? — для SCSI-дисков. А других дисков в те времена и не было.

Далее они маркировались литерой в зависимости от положения на IDE-канале или SCSI-шине. То есть в случае IDE-интерфейса master-дискe на первом канале соответствовал файл /dev/hda, slave на нём же — /dev/hdb, и так далее: основной контроллер материнской платы обеспечивал подключение до четырёх устройств, особо навороченные «мамы» имели дополнительный контроллер на пару дисков. Имена SCSI-устройств выглядели так: /dev/sda — первый диск на SCSI-шине, /dev/sdb — второй, далее по всем пунктам: SCSI-устройств к одному контроллеру можно было подключить до 16-ти.

Именование устройств было статическим, то есть 2-й диск на 2-м IDE-канале всегда получал имя /dev/hdd, даже если он был единственным в данной машине.

Со сменными носителями информации дело обстояло по разному. Например, номенклатура IDE-дисков распространялась на любые накопители с соответствующим интерфейсом, такие, как LS-120 и Zip-приводы. А в качестве SCSI-дисков системой воспринимались любые накопители с интерфейсом, отличным от IDE: Zip-приводы на параллельном порту, встроенные и сменные носители цифровых камер, позднее флэшки и внешние винчестеры с USB-интерфейсом.

Разделы на дисках маркировались цифрами. В те годы в Linux’е практиковалась разметка исключительно по схеме msdos. За первичными её разделами резервировались цифры от 1 до 4. В случае объявления одного из разделов расширенным он получал номер соответствующего физического раздела, а логические разделы в нём маркировались цифрами, начиная с 5. То есть первый физический раздел на первом диске первого IDE-канала получал имя /dev/hda1. Если второй его раздел определялся как расширенный, то он сохранял имя /dev/hda2, а первый логический раздел на нём становился /dev/hda5… Дальше, я думаю, всё понятно, как и с именованием SCSI-дисков.

А вот на сменных носителях либо фабричным образом размечался один первичный раздел — например, при отсутствии настоящих SCSI-винчестеров, /dev/sda1, — либо они воспринимались как raw-устройства. То есть файловая система могла создаваться непосредственно на неразмеченном пространстве — например, на /dev/sda.

Именно при работе со сменными носителями, особенно «горячего» подключения, типа флэшек и накопителей цифровых камер, наиболее отчётливо проявлялись недостатки статически созданных для них файлов. А поскольку такие устройства получали всё большее распространение, для борьбы с ними и была придумана специальная виртуальная файловая система устройств — devfs. Ныне в Linux’е она отошла в область преданий. Однако вкратце остановлюсь на изменениях, которые она внесла в номенклатуру накопителей — ибо с неё и началось запутывание ранее простой UNIX-подобной номенклатуры файлов устройств.

В соответствие с правилами devfs, для файлов любых ATA-накопителей был предназначен каталог /dev/ide (в некоторых дистрибутивах файловая система устройств монтировалась в каталог /devices, а каталог /dev сохранялся для совместимости). Файлы накопителей на встроенном основном IDE-контроллере локализовались в подкаталоге /dev/ide/host0 (если использовался ещё и дополнительный IDE-контроллер, встроенный или внешний, можно было увидеть и каталог /dev/ide/host1). А внутри него было два подкаталога, соответствующие IDE-каналам — /dev/ide/host{/bus0,/bus1}), каждый из которых опять же мог делиться надвое — на каталоги target0 и target1, по количеству подключённых устройств. Внутри каталога target0(1) имелся минимум ещё один подкаталог lun0. А уж в нём размещались непосредственно файлы устройств — disc для всего накопителя, part1, … part4 для физических разделов и part5, … part# — для логических. Таким образом, полное обозначение дискового раздела для первого первичного раздела на первом диске первого канала основного IDE-контроллера выглядело так:

/dev/ide/host0/bus0/target0/lun0/part1

Предусмотрен был и более краткий способ обращения к файлам устройств — через жёсткие ссылки (то есть иные имена для тех же наборов данных). Для файлов дисковых накопителей (независимо от интерфейса — IDE или SCSI) они были собраны в каталоге /dev/discs (с подкаталогами disc0, … , disc#). И потому к приведённому в качестве примера разделу можно было обратиться и так:

/dev/discs/disc0/part1

Наконец, для совместимости со старыми временами (и старыми привычками) в большинстве дистрибутивов поддерживалась и «доисторическая» номенклатура. То есть всё тот же дисковый раздел из примера можно было обозвать просто — /dev/hda1. В отличие от первого случая, это был уже другой файл — символическая ссылка на истинный файл устройства:

/dev/ide/host0/bus0/target0/lun0/part1.

Подозреваю, что неудобоваримые имена файлов устройств и их запутанные взаимоотношения были одной из причин отказа от devfs. И с приходом менеджера устройств udev разработчики немедленно избавились от её неуклюжей нотации и вернувшись к традиционным именам файлов дисковых устройств — типа /dev/hd? для IDE и /dev/sd? для SCSI и внешних USB-носителей. Однако здесь история номенклатуры накопителей заканчивается — и начинается обзор современного её состояния.


Назад | Рассказы о ZFS | Вперёд