Linux: история номенклатуры накопителей
Linux: история номенклатуры накопителей
Номенклатура дисковых устройств в Linux на протяжении жизни этой ОС менялась неоднократно. Остановлюсь вкратце на этой истории, потому что старые имена файлов устройств до сих пор можно встретить в толстых книгах и даже в относительно актуальных журнальных и сетевых материалах.
Испокон веков, во времена статического заполнения каталога /dev, файлы дисковых устройств в именовались так: hd?
-- для дисков с интерфейсом IDE (который ныне мы обычно называем PATA) и sd?
-- для SCSI-дисков. Далее они маркировались литерой в зависимости от положения на IDE-канале или SCSI-шине. В первом случае, при подключении к основному контроллеру материнской платы, это выглядело так:
Имя файла | Устройство | ||
/dev/hda |
1-й диск на 1-м IDE-канале | ||
/dev/hdb |
2-й диск на 1-м IDE-канале | ||
/dev/hdc |
1-й диск на 2-м IDE-канале | ||
/dev/hdd |
2-й диск на 2-м IDE-канале |
Имена устройств, подсоединённых к дополнительным контроллерам IDE, маркировались следующими литерами: /dev/hde
и /dev/hdf
. Именование устройств было статическим, то есть 2-й диск на 2-м IDE-канале всегда получал имя /dev/hdd
, даже если он был единственным в данной машине.
Эта номенклатура распространялась не только на собственно винчестеры, но на любые накопители с IDE-интерфейсом, например, ATAPI CD-ROM и Zip-приводы.
Имена SCSI-устройств выглядели так: /dev/sda
-- первый SCSI-диск, /dev/sdb
-- второй, и так далее.
В качестве SCSI-дисков воспринимались системой и любые накопители с интерфейсом, отличным от IDE, например, Zip-приводы на параллельном порту, встроенные и сменные носители цифровых камер, а затем и флэшки и внешние винчестеры с USB-интерфейсом.
А вот флоппи-дисководы в общем виде именовались /dev/fd
, а конкретные устройствап маркировались цифрами -- /dev/fd0
и, во времена, когда в машинах бывало ещё по два привода для дискет (5" и 3,3"), /dev/fd1
. Собственное имя имел обычно и CD-привод -- /dev/cdrom
, но это была символическая ссылка на файл реального устройства -- например, /dev/hdc
.
Разделы на дисках маркировались цифрами. За первичными разделами резервировались цифры от 1 до 4. В случае объявления одного из разделов расшиненным он получал номер соответствующего расширенного раздела, а логические разделы в нём маркировались цифрами, начиная с 5. В общем виде это выглядело так (на примере 1-го диска на 1-м IDE-канале):
Имя файла | Раздел |
/dev/hda1 |
Первичный раздел |
/dev/hda2 |
Расширенный раздел |
/dev/hda5 |
Первый логический раздел |
/dev/hda6 |
Второй логический раздел |
... | ... |
/dev/hda# |
Последний логический раздел |
/dev/hda3 |
Первичный раздел |
/dev/hda4 |
Первичный раздел |
Разделы на SCSI-дисках именовались аналогично -- /dev/sda1
, /dev/sda2
и так далее. А со сменными носителями дело обстояло по разному: на них либо фабричным образом размечался один первичный раздел -- например, при остуствии настоящих SCSI-винчестеров, /dev/sda1
или, иногда, почему-то /dev/sda4
, либо они воспринимались как raw-устройства. то есть файловая система могла создаваться непосредственно на устройстве -- например, на /dev/sda
, а не на его разделе.
Отступление: надо отметить, что первые флэшки вообще размечались иногда самым причудливым образом. Например, мне попадалась флэшка, размеченная на один расширенный раздел -- /dev/sda4
, в котором было создано два логических -- совсем маленький /dev/sda5
с какой-то служебной информацией для шифрования, и большой /dev/sda6
собственно для данных.
Именно при работе с устройствами "горячего" подключения, типа флэшек и носителей цифровых камер, наиболее отчётливо проявлялись недостатки статически созданных файлов устройств. А поскольку они получали всё большее распространение, для борьбы с этими недостатками была придумана специальная виртуальная файловая система устройств -- devfs. Точнее, она была придумана, насколько я знаю, для ОС Solaris, но поддержка её скоро появилась в ядре Linux версии 2.4. Ныне в этой ОС она представляет только исторический интерес, поэтому лишь вкратце остановлюсь на изменениях, которые она внесла в номенклатуру накопителей -- именование устройств по её правилам может встретиться в литературе.
В соответствие с правилами 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#
), для файлов CD-приводов -- в каталоге /dev/cdrom
) . И потому к приведённому в качестве примера разделу можно было обратиться и так:
/dev/discs/disc0/part1
Наконец, для совместимости со старыми временами (и старыми привычками) в большинстве дистрибутивов поддерживалась и "старая" номенклатура. То есть все тот же дисковый раздел из примера можно было обозвать просто — /dev/hda1
. В отличие от первого случая, это будет уже другой файл — символическая ссылка на истинный файл устройства,
/dev/ide/host0/bus0/target0/lun0/part1
.
Однако "ссылочное" именование устройств проходило не всегда, в некоторых ситуациях приходилось прибегать к полной нотации по правилам devfs.
Помимо неудобоваримых имён файлов устройств, devfs имела и другие недостатки. В частности, она таки и не избавила окончательно от проблем при работе с устройствами "горячего" подключения. И потому просуществовала она в Linux'е недолго, не успев даже вытеснить полностью статическую систему создания файлов устройств.
На смену devfs пришёл механизм udev. В детали его вдаваться здесь не будем (на сей предмет будут специальные страницы). Врамках же нынешней темы важно, что файлам устройств, в том числе и накопителей, при использовании udev можно давать абсолютно произвольные имена -- достаточно составить соответствующие правила для разных их классов.
Этим немедленно воспользовались разработчики, избавившись от неуклюжей нотации по правилам devfs и вернувшись к традиционным именам файлов дисковых устройств -- типа /dev/hd?
для IDE и /dev/sd?
для SCSI и внешних носителей. Практически одновременно в обиход вошли диски с интерфейсом SATA -- именно тогда прежние IDE-накопители стали обычно называть PATA-дисками. Будучи не совсем настоящими IDE (или, скорее, совсем не настоящими), SATA-диски также воспринимались системой как SCSI и файлы их устройств именовались аналогично -- /dev/sda
, /dev/sdb
и так далее. Однако здесь история номенклатуры накопителей заканчивается -- пора переходить к современному её состоянию.
- Разметка дисков: общее введение
- Введение в “геометрию”
- MBR: ключ к дисковой разметке
- Таблица идентификаторов типа файловой системы
- Разметка в стиле DOS
- Использование разметки DOS-стиля в Linux
- BSD-стиль разметки
- Особенности разметки в стиле Sun/Solaris
- Общие вопросы номенклатуры накопителей
- Linux: история номенклатуры накопителей
- Linux: современная номенклатура накопителей
- FreeBSD: номенклатура дисков
- FreeBSD: номенклатура разделов
- DragonFlyBSD: особенности номенклатуры дисков и разделов
Теги: linux, имена устройств