Европейский Университет в Санкт-Петербурге
Опубликован: 04.07.2008 | Доступ: свободный | Студентов: 1309 / 258 | Оценка: 4.34 / 3.65 | Длительность: 21:13:00
Лекция 6:

Файловая система

Файлы устройств в Solaris

Каждому физическому устройству в Solaris обязательно соответствует файл устройства. Файл устройства по сути – это указатель на область кода ядра, в которой находится драйвер устройства. Файлы устройств располагаются в каталоге /dev и его подкаталогах. Такое расположение является стандартным для всех систем UNIX. Однако на самом деле в Solaris все файлы в каталоге /dev являются символьными ссылками на "настоящие" файлы устройств, которые располагаются в подкаталогах каталога /devices. Там эти файлы сгруппированы по отношению к своему месту в конфигурации компьютера. Подробнее это рассмотрено ниже в разделе "каталог /devices". О символьных ссылках подробнее рассказано в "Устройство и администрирование файловой системы UFS" в разделе "ссылки".

Файлы устройств имеют специальные типы:

  • файл символьного устройства;
  • файл блочного устройства.

Вывод программы ls иллюстрирует это:

ls -l /devices/pseudo/
...
crw-rw-rw- 1 root sys 26, 0 Мар 17 10:56 ptsl@0:ttyp0
crw-rw-rw- 1 root sys 26, 1 Мар 17 10:56 ptsl@0:ttyp1
crw-rw-rw- 1 root sys 26, 2 Мар 17 10:56 ptsl@0:ttyp2
crw-rw-rw- 1 root sys 26, 3 Мар 17 10:56 ptsl@0:ttyp3
...
ls -l /devices/pci@0,0/pci-ide@7,1/ide@0
...
brw-r----- 1 root sys 102, 0 Мар 17 10:56 cmdk@0,0:a
crw-r----- 1 root sys 102, 0 Мар 17 10:56 cmdk@0,0:a,raw
brw-r----- 1 root sys 102, 1 Мар 24 21:19 cmdk@0,0:b
crw-r----- 1 root sys 102, 1 Мар 17 10:56 cmdk@0,0:b,raw
...

Файл устройства является псевдофайлом, он не размещен на диске, о нем есть только запись, которая используется при доступе к устройству. Первое число, которое стоит в поле длины файла в выводе программы ls для файлов устройств – это major номер, а второе, после запятой – minor номер. Первый из них означает номер типа устройств и одновременно – позицию в ядре, в которой следует искать драйвер устройства. Второй – номер экземпляра устройства данного типа. Поэтому файлы однотипных устройств в вышеприведенном выводе ls имеют одинаковые major номера.

Устройство каждого типа имеет свой major номер. Major номера назначаются автоматически программой add_drv. Соответствие имени драйвера и major номера определяется в файле /etc/name_to_major.

В Solaris все устройства имеют три имени разных типов: логическое имя, физическое имя и экземплярное имя.

Логические имена – это имена файлов устройств, которые хранятся в /dev.

Физические имена – это имена файлов устройств, хранящихся в /devices.

Экземплярные имена – это укороченные физические имена устройств, которые ядро назначает устройствам.

Ниже рассмотрен пример назначения всех перечисленных типов имен.

Файлы устройств для разделов дисков в Solaris

Мы предполагаем, что читатель знаком с физическим устройством жестких дисков, поэтому здесь не объясняются термины "головка", "дорожка", "цилиндр", "сектор" и другие. Все они являются общими для описания любых жестких дисков в любых компьютерах, независимо от архитектуры или используемой операционной системы.

Жесткий диск принято делить на разделыSolaris их называют slices). Раздел – это группа расположенных рядом цилиндров. Смысл разделения диска на разделы состоит в том, чтобы:

  1. минимизировать расстояние, которое потребуется головке диска для считывания фрагментов одного файла;
  2. разделить данные разных типов, чтобы обезопасить системные данные от возможной порчи пользовательскими программами;
  3. зарезервировать под системные нужды достаточное пространство на диске так, чтобы несистемные файлы не могли его занять.

Жесткие диски

В Solaris на одном физическом жестком диске может быть до восьми разделов, которые принято нумеровать цифрами от 0 до 7.

Каждому разделу соответствует свой файл устройства в каталоге /dev/dsk. Пространство под разделы выделяется цилиндрами. Раздел однозначно определяется номерами начального и конечного цилиндров. В Solaris принята следующая концепция именования таких файлов устройств: в имени устройства учитываются номер контроллера, SCSI ID (target number), номер диска (LUNlogical unit number) и номер раздела на диске. Если это диск IDE, то роль SCSI ID играет пара master/slave (соответственно, 0/1). Для встроенных дисков SCSI и любых дисков IDE номер диска равен 0. Это иллюстрирует рис. 6.1.


Рис. 6.1.

Так, для системы с дисками SCSI /dev/dsk/c0t0d0s0 будет указывать на нулевой контроллер SCSI (c0), диск со SCSI ID 0 (t0), диск номер 0 на этом SCSI контроллере (d0), нулевой раздел на этом диске (s0).

Как показано на рис. 6.2, при создании файла устройства для раздела, который находится на IDE-диске, в названии файла учитываются номер адаптера IDE (как правило, в компьютерах x86 используют системные платы с одним адаптером, который поддерживает два канала IDE), номер канала (он кодируется как SCSI ID, как показано в табл. 6.1), номер диска (всегда d0) и номер раздела (первый раздел на диске – s0 и т.д., подобно разделам на SCSI дисках).

Конфигурация с IDE-устройствами

увеличить изображение
Рис. 6.2. Конфигурация с IDE-устройствами

Сказанное выше о, именовании файлов устройств дисков IDE относится к системам на платформе SPARC. На платформе х86 файлы устройств, соответствующие разделам дисков IDE, именуются несколько иначе. Файлы, соответствующие разделам fdisk, обозначаются cNdMpK, где после с идет номер контроллера, после d – номер диска, а после p – номер раздела fdisk. На каждом из разделов fdisk может быть создано несколько подразделов (slices), если этот раздел fdisk является разделом типа solaris. Любой раздел fdisk имеет свой тип, который указывается в таблице Master Boot Record (MBR), где описаны все разделы fdisk диска.

По умолчанию при установке Solaris на IDE-диск на платформе x86 программа-установщик Solaris создает два раздела fdisk – загрузочный (примерно 20 Мб) с программой-загрузчиком и раздел, на котором будут находиться все остальные части системы, а также пользовательские файлы. Первый раздел fdisk имеет тип FAT, а второй – тип Solaris. На втором разделе создаются подразделы (slices). Они именуются подобно таким же разделам на дисках систем SPARC, но без указания SCSI ID: c0d0s0, c0d0s1 и т.д.

Таблица 6.1. Соответствие между SCSI ID и позиции IDE-диска в подсистеме IDE
Номер диска в подсистеме IDE Позиция диска в подсистеме IDE
0 primary master
1 primary slave
2 secondary master
3 secondary slave

Каждому файлу в каталоге /dev/dsk соответствует файл устройства прямого доступа (raw disk) в каталоге /dev/rdsk:

# ls /dev/dsk
c0d0p0  c0d0s1   c0d0s15  c0d0s7    c1t0d0p3   c1t0d0s12  c1t0d0s4
c0d0p1  c0d0s10  c0d0s2   c0d0s8    c1t0d0p4   c1t0d0s13  c1t0d0s5
c0d0p2  c0d0s11  c0d0s3   c0d0s9    c1t0d0s0   c1t0d0s14  c1t0d0s6
c0d0p3  c0d0s12  c0d0s4   c1t0d0p0  c1t0d0s1   c1t0d0s15  c1t0d0s7
c0d0p4  c0d0s13  c0d0s5   c1t0d0p1  c1t0d0s10  c1t0d0s2   c1t0d0s8
c0d0s0  c0d0s14  c0d0s6   c1t0d0p2  c1t0d0s11  c1t0d0s3   c1t0d0s9
# ls /dev/rdsk  
c0d0p0  c0d0s1   c0d0s15  c0d0s7    c1t0d0p3   c1t0d0s12  c1t0d0s4
c0d0p1  c0d0s10  c0d0s2   c0d0s8    c1t0d0p4   c1t0d0s13  c1t0d0s5
c0d0p2  c0d0s11  c0d0s3   c0d0s9    c1t0d0s0   c1t0d0s14  c1t0d0s6
c0d0p3  c0d0s12  c0d0s4   c1t0d0p0  c1t0d0s1   c1t0d0s15  c1t0d0s7
c0d0p4  c0d0s13  c0d0s5   c1t0d0p1  c1t0d0s10  c1t0d0s2   c1t0d0s8
c0d0s0  c0d0s14  c0d0s6   c1t0d0p2  c1t0d0s11  c1t0d0s3   c1t0d0s9

В Solaris принято, что раздел номер 2 (slice 2) представляет собой весь диск, т.е. является репрезентацией всего диска в целом, со всеми его разделами. Иначе говоря, на диске на самом деле может быть создано до 7 разделов, а восьмой (раздел 2) всегда охватывает все эти разделы вместе. Поэтому на разделе 2 нельзя создать файловую систему и записывать туда файлы: он служит для системных надобностей. В частности, в структурах, адресуемых через раздел 2, хранятся сведения о диске в целом: реальный размер, число цилиндров и т.п.

Говоря о разных типах имен устройств, можно рассмотреть пример именования разделов диска. Так, разделам SCSI-диска со SCSI ID, равным 6, присоединенному к нулевому контроллеру, будут соответствовать логические имена устройств (разделов диска) от /dev/dsk/c0t6d0s0 до /dev/dsk/c0t6d0s7, физические имена от /devices/pci@1f,0/pci@1,1/scsi@6/sd@0,0:a до /devices/pci@1f,0/pci@1,1/scsi@6/sd@0,0:g. При этом диску в целом будет соответствовать экземплярное имя sd6.

Приводы для CD- и DVD-дисков

Для того, чтобы узнать, какие приводы есть в вашей системе и какие имена им назначены, можно воспользоваться prtconf или cdrecord (последняя программа может не входить в поставку Solaris, но она доступна в исходных кодах в Сети). В нижеследующем примере видно, что в компьютере установлен один привод, и если вставить в него диск, то можно увидеть, что автомонтирование диска произойдет для устройства /dev/dsk/c1t0d0s2, что соответствует устройству с параметрами 1,0,0 из вывода cdrecord.

/opt/schily/bin/cdrecord -scanbus
Cdrecord-ProDVD-ProBD-Clone 2.01.01a40 (i386-pc-solaris2.11)
Copyright (C) 1995-2008 Jorg Schilling
Warning: Using USCSI interface.
Using libscg version 'schily-0.9'.
scsibus1:
   1,0,0 100) 'MATSHITA' 'DVD-RAM UJ-85JS ' 'F100' Removable CD-ROM
   1,1,0 101) *
   1,2,0 102) *
   1,3,0 103) *
   1,4,0 104) *
   1,5,0 105) *
   1,6,0 106) *
   1,7,0 107) *

Каталог /devices

Каталог /devices отражает аппаратную конфигурацию компьютера. Дерево его подкаталогов строится в соответствии с реальными подключениями устройств к шинам и контроллерам. Поэтому для компьютеров различных архитектур структура дерева подкаталогов /devices будет разной. Содержание этих подкаталогов будет разным для разных компьютеров, даже если они имеют одинаковую архитектуру, потому что компьютеры могут иметь разную конфигурацию: неодинаковое количество жестких дисков, различные контроллеры интерфейсов (SCSI, IDE), по-разному подсоединенные к ним диски. Например, для компьютера x86 дерево может быть таким:

./pseudo
./isa
./isa/fdc@1,3f0
./isa/i8042@1,60
./pci@0,0
./pci@0,0/pci8086,7191@1
./pci@0,0/pci-ide@2,1/ide@0
./pci@0,0/pci-ide@2,1/ide@1
./pci@0,0/pci-ide@2,1

Это пример дерева подкаталогов каталога /devices Solaris, установленного на ноутбук IBM ThinkPad 390X.

Полный список всех устройств компьютера, с которыми система Solaris готова работать, содержится в файле /etc/path_to_inst.

Файл /etc/path_to_inst содержит соответствия физических имен устройств и номеров экземпляров устройств (тех, что называются minor номерами устройств). Чтобы эти соответсвия сохранялись от загрузки к загрузке, система записывает их в файл /etc/path_to_inst. Этот файл во время загрузки доступен только для чтения, он может быть изменен с помощью программ add_drv(1M) и drvconfig(1M).

Обычно системному администратору незачем изменять этот файл. Для просмотра полного списка устройств следует применять команду prtconf:

prtconf

Для просмотра списка устройств, фактически работающих в системе, используйте

prtconf | grep –v not

Это позволяет отфильтровать в выводе prtconf строки, содержащие слово "not", например, "device not attached". Более подробно об изменении аппаратной конфигурации и добавлении драйверов устройств рассказывается в лекции 2 курса "Системное администрирование ОС Solaris 10".

Александр Тагильцев
Александр Тагильцев

Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение.

Александр Васильченко
Александр Васильченко
Россия
Денис Гайдуль
Денис Гайдуль
Россия, Подольск