Виды устройств в linux

Обновлено: 04.07.2024

Теперь взглянем на аспекты работы Gentoo Linux и Linux в общем, связанные с дисковой подсистемой, включая блочные устройства, разделы и файловые системы Linux. Как только основные понятия о дисках и файловых системах будут изучены, можно будет приступать к созданию разделов и файловых систем для установки.

Для начала, рассмотрим блочные устройства. Устройства SCSI и Serial ATA обозначаются как /dev/sda , /dev/sdb , /dev/sdc и так далее. На более современных компьютерах твердотельные накопители NVMe на базе PCI Express имеют дескриптор вида /dev/nvme0n1 , /dev/nvme0n2 и так далее.

Следующая таблица поможет определить необходимый тип блочного устройства в системе:

Тип устройства Дескриптор устройства по умолчанию Примечания и полезные сведения
NVM Express (NVMe) /dev/nvme0n1 Передовая на данный момент технология твердотельных накопителей. Устройства NVMe подключаются к шине PCI Express и обладают наиболее быстрой скоростью передачи блочных данных, доступной на рынке. Системы образца 2014 года и новее могут иметь поддержку устройств NVMe.
SATA, SAS, SCSI или USB flash /dev/sda Данный тип устройств стал доступным примерно с 2007 года и встречается до сих пор, являясь, пожалуй, самым используемым типом в Linux. Устройства могут подключаться через шины SATA, SCSI или USB в виде устройства блочного хранилища.
MMC, eMMC и SD /dev/mmcblk0 Устройства embedded MMC, SD-карты и другие типы карт памяти могут использоваться для хранения данных. Однако не все системы могут позволить загружаться с данного типа устройств. Не рекомендуется использовать данные устройства для установки Linux; лучше используйте их по прямому назначению — для переноса файлов. Также их можно использовать для кратковременного резервного копирования.
IDE/PATA /dev/hda Так старые драйверы ядра Linux отображают диски IDE/Parallel ATA, подключённые к шине IDE. Строго говоря, подобный тип устройств постепенно исчезает из компьютеров с 2003 года, когда компьютерная индустрия переключилась на SATA. Большинство систем с одним контроллером IDE могут поддерживать до четырёх устройств ( hda - hdd )
Альтернативное именование для этих устаревших интерфейсов включают в себя Extended IDE (EIDE) и Ultra ATA (UATA).

Данные блочные устройства представляют абстрактный интерфейс к диску. Пользовательские приложения могут использовать их для взаимодействия с диском, не заботясь о том, какой это диск — SATA, SCSI или какой-либо ещё. Программа просто адресует пространство на диске как совокупность следующих друг за другом 4096-байтных (4K) блоков с произвольным доступом.

Introduction to block devices

Block devices

Заметка
Placeholder for introduction to block devices specific to that architecture

Designing a partition scheme

Заметка
Placeholder for designing a partition scheme specific to that architecture

Создание файловых систем

Введение

Теперь, когда разделы созданы, пора разместить на них файловые системы. В следующем разделе описаны различные поддерживаемые в Linux файловые системы. Те из читателей, кто уже знает, какую файловую систему будет использовать, могут продолжить с раздела Создание файловой системы. Другим стоит продолжить чтение, чтобы узнать о доступных вариантах…

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

Linux поддерживает несколько десятков файловых систем, хотя для большинства из них необходимы достаточно веские причины их использовать. Лишь только некоторые из них можно считать стабильными на архитектуре amd64. Рекомендуется прочитать информацию о файловых системах и об их состоянии поддержки перед тем, как останавливать свой выбор на экспериментальных.

btrfs Файловая система следующего поколения, обеспечивающая множество дополнительных функций, таких как мгновенные снимки, самовосстановление с помощью контрольных сумм, поддержка прозрачного сжатия, субтомов и интегрированный RAID. Ядра старше ветки 5.4 не обеспечивают безопасную работу btrfs, так как исправления наиболее серьёзных проблем стабильности появились только в более поздних ветках долговременной поддержки ядра. Ошибки с повреждением файловой системы довольно часты для старых версий ядра, особенно небезопасны и нестабильны версии старше 4.4. Повреждения файловой системы для ядер старше 5.4 обычно характерны при включении сжатия. RAID 5/6 и quota groups небезопасны для всех версий btrfs. Более того, btrfs может неявным образом нарушить работу с файловыми операциями с ошибкой ENOSPC (при этом df сообщает, что свободное место есть) из-за внутренней фрагментации (свободное место высчитывается из расчёта DATA + SYSTEM участков, но при этом этом не учитывается в участках METADATA). Также, единственная ссылка 4K на экстент 128M внутри btrfs может отображать свободное место, которое недоступно для использования. Всё это приводит к тому, что btrfs возвращает ENOSPC, а df говорит, что есть свободное пространство. Установка sys-fs/btrfsmaintenance и конфигурация сценариев на периодический запуск поможет сократить количество проблем с ENOSPC путём ребалансировки btrfs, но не устранит их окончательно. Некоторые системы могут никогда не получить ошибку ENOSPC, когда как другие будут встречать её часто. Если риск получения ошибки ENOSPC недопустим, следует использовать другую файловую систему. При использовании btrfs убедитесь, что не собираетесь использовать конфигурацию, которая известна своей нестабильностью. За исключением проблемы ENOSPC, информация о существующих проблемах btrfs в последних ветках ядра доступна на вики-странице состояния btrfs. ext2 Это проверенная и надежная файловая система Linux, но она не обладает средствами журналирования метаданных, что означает, что проверка файловой системы ext2 при запуске может занимать довольно много времени. Существует достаточно широкий выбор журналируемых файловых систем нового поколения, целостность которых может быть проверена очень быстро, что является преимуществом перед нежурналируемыми системами. Журналирование файловой системы позволяет избежать долгих задержек при загрузке системы, а также избежать её нестабильного состояния. ext3 Журналируемая версия файловой системы ext2, обеспечивающая журналирования метаданных для быстрого восстановления в дополнение к другим режимам журналирования, таким как журналирование всех данных и упорядоченных данных. В данной ФС используются индексы на базе деревьев хешей, что в большинстве случаев обеспечивает высокую производительность. Вкратце, ext3 — это очень хорошая и надёжная файловая система. ext4 Изначально созданная как ответвление от ext3, ext4 реализует новые возможности, повышение производительности и устранение ограничений на размер раздела на диске ценой незначительного изменения формата данных на диске. Она может быть размером до 1 ЭБ, а максимальный размер файла может составлять 16 ТБ. Вместо классического ext2/3 блочного распределения ext4 использует экстенты, которые улучшают производительность при работе с большими файлами и уменьшают фрагментацию. Ext4 также обеспечивает более сложные алгоритмы распределения блоков (отложенное распределение и мультиблочное распределение), дающие драйверу файловой системы больше возможностей по оптимизации размещения данных на диске. Ext4 рекомендуется как универсальная файловая система для всех платформ. f2fs Файловая система (Flash-Friendly File System) была создана Samsung для использования на NAND-накопителях. По состоянию на 2 квартал 2016 года файловая система считается не завершенной, но она может быть достойным выбором при установке на microSD карту, USB-накопитель или другие накопители. JFS Высокопроизводительная журналируемая файловая система от IBM. JFS — это легкая, быстрая и надежная файловая система, основанная на двоичных деревьях с хорошей производительностью в различных условиях. ReiserFS Основанная на двоичных деревьях журналируемая файловая система с хорошей общей производительностью, особенно при работе с множеством мелких файлов ценой чутью больших затрат центрального процессора. ReiserFS версии 3 включена в ядро Linux, однако не рекомендуется использовать её для первичной установки системы Gentoo. Существуют более новые версии ReiserFS, но для своей работы они требуют дополнительных патчей ядра. XFS Файловая система с журналированием метаданных, которая поставляется с мощным набором функций и оптимизирована для масштабируемости. XFS менее снисходительно относится к различным аппаратным проблемам, однако непрерывно обновляется, обрастая новым возможностями. VFAT Так же известна как FAT32, поддерживается Linux, но не имеет поддержку стандартных файловых разрешений UNIX. В основном используется для взаимодействия с другими операционными системами (в основном Microsoft Windows и Apple OSX), но также необходима при использовании некоторых системных прошивок загрузчика (например, UEFI). NTFS New Technology Filesystem является основной файловой системой для Microsoft Windows начиная с NT 3.5. Как и vfat, она не сохраняет настройки UNIX разрешений и расширенные атрибуты, необходимые для нормальной работы BSD или Linux, поэтому её не следует использоваться в качестве корневой файловой системы. Её необходимо использовать только для взаимодействия с системами Microsoft Windows (обратите внимание на акцент слова только).

Создание файловой системы

Для создания файловых систем на разделе или томе существуют пользовательские утилиты для каждого возможного типа файловой системы. Нажмите на имя файловой системы в таблице ниже для получения дополнительной информации о каждой файловой системе:

Например, чтобы создать корневой раздел ( ) в ext4 при использовании структуры разделов из примера, используются следующие команды:

При использовании ext2, ext3 или ext4 на малых разделах (менее 8 ГиБ) файловая система должна быть создана с особыми параметрами для резервирования достаточного количества индексных дескрипторов (inodes). Приложение mke2fs ( mkfs.ext2 ) использует настройки «bytes-per-inode» для вычисления количества необходимых дескрипторов. На небольших разделах рекомендуется увеличивать расчётное количество дескрипторов.

Данные команды учетверяют количество индексных дескрипторов для такой ФС, так как «bytes-per-inode» уменьшает количество байт на каждый дескриптор с 16 кб до 4 кб. Это соотношение может быть изменено в любую сторону с помощью команды:

Теперь создайте файловые системы на только что созданных томах (или логических разделах).

Активация раздела подкачки

Для инициализации разделов подкачки используется команда mkswap :

Чтобы активировать раздел подкачки, используйте swapon :

Создайте и активируйте раздел подкачки командами выше.

Монтирование корневого раздела

Теперь, когда созданы разделы и размещённые на них файловые системы, настало время их смонтировать. Используйте команду mount , только не забудьте предварительно создать каталоги для монтирования каждого созданного раздела. В качестве примера мы смонтируем корневой раздела:

Заметка
Если /tmp/ находится на отдельном разделе, не забудьте после монтирования изменить права доступа:

Позже в инструкции будут смонтированы файловая система proc (виртуальный интерфейс к ядру) и другие псевдофайловые системы ядра. Но сначала мы установим установочные файлы Gentoo.

В системе UNIX, а следовательно и Linux, существует два типа устройств: блочные устройства с прямым доступом (такие как диски) и символьные устройства (такие как ленточные накопители и последовательные порты), некоторые из них могут быть последовательными, а некоторые - с прямым доступом. Каждое поддерживаемое устройство представляется в файловой системе файлом устройства. При выполнении операций чтения или записи с подобным файлом, происходит обмен данными между устройством, на которое указывает этот файл. Такой способ доступа к устройствам позволяет не использовать специальные программы (а также специальные методы програмирования, такие как работа с прерываниями). Например, для распечатки файла на принтере, используется следующая команда:

Однако, для распечатки файлов используется специальная программа (обычно lpr(1)), которая контролирует поток поступающих файлов во избежание возникновения конфликтных ситуаций, например, при попытке распечатать на одном принтере одновpеменно несколько разных файлов. По мере распечатки, новые файлы поступают автоматически. По подобной схеме работает большинство устройств. Однако с файлами устройств проблемы возникают очень редко.

Так как устройства отображаются как файлы в файловой системе (в каталоге /dev), несложно обнаружить с помощью команды ls(1) какие существуют файлы устройств. После выполнения команды ls -l на экран выводится список файлов, причем в первой колонке содержится тип файла и права доступа к нему. Например, для просмотра файла, соответствующего последовательному порту, используется следующая команда:

Первый символ в первой колонке, т.е. 'c', показывает тип файла, в данном случае символьное устройство. Для обычных файлов используется символ '-', для каталогов - 'd', для блочных устройств - 'b' (см. pуководство к команде ls(1) для более подробной информации).

Наличие большого количества файлов устройств совсем не означает, что эти устройства на самом деле установлены. Наличие файла /dev/sda ни о чем не говорит и совсем не означает, что в компьютере установлен жесткий диск SCSI. Это предусмотрено для облегчения установки программ и нового оборудования (нет необходимости искать нужные параметры и создавать файлы для новых устройств).

4.2. Жесткие диски

В этом разделе рассматриваются термины, связанные с использованием жестких дисков.

Жесткий диск состоит из одной или нескольких круглых пластин, одна или обе стороны которой покрыты магнитным материалом, используемым для хранения информации. Для каждой стороны предусмотрена головка, позволяющая считывать или записывать информацию. Пластины вращаются на одной оси обычно со скоростью 3600 оборотов в минуту, хотя в более быстрых пpиводах используются более высокие скорости. Головки перемещаются вдоль радиуса поверхности пластин, что позволяет получить доступ к любой точке поверхности.

Центральный процессор (CPU) и жесткий диск обмениваются информацией через дисковый контроллер. Это упрощает схему обращения и работы с диском, так как контроллеры для разных типов дисков могут быть построены с использованием одного интерфейса для связи с компьютером. Поэтому, например, для считывания сектора можно воспользоваться всего лишь одной командой вместо сложных последовательностей электрических сигналов для того, чтобы переместить головки к нужной позиции, синхронизировать вращение диска и считывание или запись данных и др. (на самом деле, интерфейс между компьютером и контроллером тоже достаточно сложен, но не на столько, на сколько он был бы без использования контроллера). Котроллер также выполняет и некоторые другие функции, такие как буфеpизация информации или автоматическая замена плохих секторов.

Существуют еще некоторые понятия, знание которых необходимо для понимания работы жесткого диска. Обычно поверхности делятся на концентрические кольца, называемые дорожками или трэками, которые, в свою очередь, делятся на сектора. Такое разделение нужно для указания нужных позиций на диске и для распределения дискового пространства на файлы. Для нахождения нужной информации на диске достаточно примерно следующих данных: "поверхность 3, дорожка 5, сектор 7". Обычно количество секторов на дорожке одинаково для всех дорожек на диске, хотя в некоторых устройствах на внешних трэках размещается большее количество секторов (все сектора имеют один и тот же физический размер, поэтому на более длинных дорожках помещается больше секторов). Стандартный размер сектора равен 512 байт. Диск не может оперировать данными, объем которых менее одного сектора.

Каждая поверхность разделена на дорожки (и сектора) таким образом, что при перемещении головки одной поверхности к какой-либо дорожке, головки остальных поверхностей будут установлены на этой же дорожке. Совокупность всех таких дорожек называется цилиндром. Для перемещения головок от одной дорожки (цилиндра) к другой требуется какое-то количество времени. Таким образом, если разместить данные, доступ к которым чаще всего производится сразу (например, файл), в одном цилиндре, то необходимость в перемещении головок отпадает. Это повышает производительность работы диска. Не всегда представляется возможным разместить файл подобным образом. Файлы, которые хранятся в разных местах на диске, называются фрагментированными.

Количество поверхностей (или головок, что в принципе одно и то же), цилиндров и секторов сильно различается у разных устройств. Совокупность таких параметров называется структурой диска, которая хранится в специальной памяти, для питания которой используются аккумуляторы. Эта память называется CMOS RAM, откуда операционная система может считывать информацию во время ее загрузки или во время установки драйвера.

К сожалению, BIOS построен так, что не представляется возможным указать дорожку, номер которой превышает 1024, для записи в CMOS RAM, что является серьезным ограничением для дисков больших объемов. Для решения этой проблемы контроллер жесткого диска передает заведомо неправильную информацию о структуре диска и преобразует данные, представляемые компьютером, в нечто, соответсвующее реальности. Например, жесткий диск может состоять из 8 головок, 2048 дорожек с 35 секторами в каждой. В то время как контроллер может утверждать, что диск имеет 16 головок и 1024 дорожки с 35 секторами в каждой, не превышая предела на хранение в CMOS RAM числа дорожек и преобразуя адресацию уменьшая номер головки вдвое и удваивая номер дорожки. Преобразование адресов искажает представление операционной системы о структуре диска, что усложняет размещение требуемой информации на одном цилиндре для увеличения производительности.

Преобразование используется только для IDE дисков. В SCSI дисках используется доступ с применением последовательного номера сектора (который контроллер преобразует в номер головки, цилиндра и сектора диска) и другой метод обмена информацией с процессором. Однако, процессор может не иметь представления о реальной структуре диска.

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

Каждый жесткий диск представлен отдельным файлом. Для IDE дисков обычно существует только два таких файла. Они известны как /dev/hda и /dev/hdb соответственно. Для SCSI дисков используются файлы /dev/sda и /dev/sdb и т.д. Подобные обозначения применяются и для других типов дисков. Файлы устройств для жестких дисков предоставляют доступ к целому диску, не рассматривая разделы (которые будут описаны ниже) и поэтому не составляет труда перепутать разделы диска или информацию в них, если не быть достаточно осторожным. Файлы жестких дисков обычно используются для доступа к информации в MBR (которые также рассмотрены ниже).

Способ видения устройств в Linux разделяется на три фундаментальных типа. Каждый модуль обычно реализован как один из этих типов и таким образом классифицируется как символьный модуль , блочный модуль , или сетевой модуль . Такое разделение модулей на разные типы или классы не является жёстким; программист может при желании создавать большие модули, содержащие разные драйверы в одном куске кода. Хорошие программисты, тем не менее, обычно создают разные модули для каждой новой функциональности, потому что декомпозиция является ключом к масштабируемости и расширяемости.

Этими тремя классами являются:

Символьное устройство - это такое устройств, к которому можно обращаться как к потоку байтов (так же как к файлу); драйвер символьного устройства отвечает за реализацию такого поведения. Такой драйвер обычно, по крайней мере, поддерживает системные вызовы open , close , read и write . Текстовый экран ( /dev/console ) и последовательные порты ( /dev/ttyS0 и подобные) являются примерами символьных устройств, так как они хорошо представлены абстракцией потока. Для обращения к символьным устройствам используют узлы (node) файловой системы, такие как /dev/tty1 и /dev/lp0 . Единственное важное отличие между символьными устройствами и обычными файлами - вы всегда можете двигаться вперед и назад в обычном файле, в то время как большинство символьных устройств - это только каналы данных, к которым вы можете обращаться только последовательно. Существуют, однако, символьные устройства, которые выглядят как области данных, и вы можете двигаться по ним назад и вперёд; к примеру, это обычно используется в грабберах экрана, где приложения могут получать доступ ко всему полученному изображению используя mmap или lseek .

Так же как символьные устройства, блочные устройства доступны через узлы файловой системы в директории /dev . Блочное устройство - это устройство (например, диск) который может содержать файловую систему. В большинстве систем Unix блочное устройство может поддерживать только операции ввода-вывода, которые передают один или более целых блоков, обычно равных 512 байт (или большей степени числа два). Linux, однако, разрешает приложению читать и писать в блочное устройство, так же как и в символьное устройство - это позволяет передавать любое число байт за раз. В результате, блочные и символьные устройства отличаются только способом управления данными внутри ядра и, соответственно, программным интерфейсом в ядре/драйвере. Как и символьное устройство, каждое блочное устройство доступно через узел файловой системы, так что различия между ними не видны пользователю. Блочные драйверы имеют интерфейс для ядра полностью отличный от символьных устройств.

Любой сетевой обмен данными делается через интерфейс, то есть устройство, которое в состоянии обменяться данными с другими узлами сети. Обычно, интерфейс - это аппаратное устройство, но также он может быть чисто программным устройством, наподобие интерфейса loopback (локальное петлевое устройство). Сетевой интерфейс отвечает за отсылку и приём пакетов данных, управляемых подсистемой сети в ядре, без знания кому предназначены передаваемые пакеты.

Многие сетевые соединения (особенно использующие TCP) являются поточно-ориентированными, но сетевые устройства обычно разработаны для передачи и приёма пакетов. Сетевой драйвер ничего не знает об отдельных соединениях; он только обрабатывает пакеты. Не будучи поточно-ориентированным устройством, сетевой интерфейс нелегко представить как узел в файловой системе наподобие /dev/tty1 . Unix всё же обеспечивает доступ к интерфейсам через назначение им уникальных имён (таких как eth0 ), но это имя не имеет соответствующего элемента в файловой системе. Обмен между ядром и сетевым устройством сильно отличается от используемого в символьных и блочных драйверах. Вместо read и write ядро вызывает функции, относящиеся к передаче пакетов.

Есть другие пути классификации модулей драйверов, которые по-другому подразделяют устройства. Вообще, некоторые типы драйверов работают с дополнительными наборами функций ядра для данного типа устройств. К примеру, можно говорить о модулях универсальной последовательной шины (USB), последовательных модулях, модулях SCSI, и так далее. Каждое USB устройство управляется модулем USB, который работает с подсистемой USB, но само устройство представлено в системе или как символьное устройство (последовательный порт USB, к примеру), или как блочное устройство (USB устройство чтения карт памяти), или как сетевой интерфейс (например, сетевой USB интерфейс).

В последнее время в ядро были добавлены другие классы драйверов устройств, включающие драйверы FireWire и I2C. Таким же образом, как они добавили поддержку драйверов USB и SCSI, разработчики ядра собрали особенности всего класса и передали их разработчикам драйверов, чтобы избежать двойной работы и ошибок, упростив и стабилизировав таким образом процесс написания этих драйверов.

В дополнение к драйверам устройств в ядре в виде модулей реализованы и другие функциональные возможности, включающие и аппаратные средства и программное обеспечение. Общий пример - файловые системы. Тип файловой системы определяет, как организована информация на блочном устройстве, чтобы показать дерево файлов и директорий. Это не драйвер устройства, здесь нет какого-либо устройства, связанного со способом размещения информации; вместо этого, тип файловой системы - это программный драйвер, потому что он отображает структуры данных нижнего уровня на структуры данных верхнего уровня. Он и является файловой системой, которая определяет, какой длины может быть имя файла и какая информация о каждом файле хранится в записи каталога. Модуль файловой системы должен осуществить самый низкий уровень системных вызовов, которые обращаются к каталогам и файлам, отображая имена файла и пути (так же как другую информацию, такую как режимы доступа) к структурам данных, сохранённым в блоках данных. Такой интерфейс полностью независим от фактической передачи данных на и от диска (или другого носителя), что достигнуто с помощью драйвера блочного устройства.

Если вы подумаете о том, как сильно система Unix зависит от нижележащей файловой системы, то вы поймете, что такое программное понятие жизненно важно для функционирования системы. Способность декодировать информацию файловой системы остаётся на самом низком уровне иерархии ядра и имеет предельно важное значение; даже если вы напишете блочный драйвер для своего нового CD-ROM, это будет бесполезно, если вы не в состоянии выполнить команды ls или cp для данных этого устройства. Linux поддерживает понятие модуля файловой системы, программный интерфейс которого декларирует различные операции, которые могут быть выполнены с индексом файловой системы (inode), каталогом, файлом и суперблоком. Вряд ли в действительности программисту потребуется написать модуль файловой системы, потому что официальное ядро уже включает код для самых важных типов файловых систем.

Файлы устройств не являются обычными файлами: с ними не связаны блоки данных на диске. Данные, помещаемые в такой файл или извлекаемые из него, передаются соответствующему драйверу устройства или принимаются от него, а драйвер, в свою очередь, осуществляет обмен данными с обслуживаемым устройством. Устройства классифицируются по двум типам.

? Символьные (байт-ориентированные) устройства читают и записывают данные в виде потока байтов. Сюда входят последовательные и параллельные порты, накопители на магнитной ленте, терминалы и звуковые платы.

? Блочные (блок-ориентированные) устройства читают и записывают данные блоками фиксированного размера. В отличие от символьных устройств блочные устройства предоставляют произвольный доступ к своим данным. В качестве примера можно назвать жесткий диск.

Как правило, приложения не работают с блочными устройствами. В каждом разделе жесткого диска содержится файловая система, которая монтируется к дереву корневой файловой системы Linux. Лишь ядро, реализующее функции файловой системы, получает прямой доступ к блочному устройству. Программы обращаются к содержимому диска через обычные файлы и каталоги.

Опасность доступа к блочному устройству

Драйверы блочных устройств имеют прямой доступ к данным, хранящимся на диске. В большинстве Linux-систем прямой доступ к таким устройствам разрешен лишь процессам, выполняющимся от имени пользователя root, но и они способны нанести непоправимый ущерб, изменив содержимое диска. Осуществляя запись в блочное устройство, программа может модифицировать или уничтожить не только управляющую информацию, хранящуюся в файловой системе, но и таблицу разделов диска и даже главную загрузочную запись. Вследствие этого жесткий диск или вся система может оказаться разрушенной.

Приложениям иногда приходится иметь дело с символьными устройствами: об этом пойдет речь в разделе 6.5, "Специальные устройства".

Драйверы устройств

Драйверы устройств Драйверы устройств обеспечивают интерфейс между ядром UNIX и аппаратной частью компьютера. Благодаря этому от остальной части ядра скрыты архитектурные особенности компьютера, что значительно упрощает перенос системы и поддержку работы различных

Значки устройств

Значки устройств Значок – это небольшой графический элемент, который указывает на приложение, документ, каталог, устройство или какой-то другой объект. Любой значок имеет подпись, которая является именем представляемого объекта. Значки в Windows служат для обозначения

9.1. Драйверы устройств

9.1. Драйверы устройств Как уже говорилось выше, одной из основных задач операционной системы является управление аппаратной частью. Ту программу или тот кусок программного кода, который предназначен для управления конкретным устройством, и называют обычно драйвером

1.4.2. Файлы устройств

1.4.2. Файлы устройств Абстракция - это великая сила. Возьмем, например, DOS (именно DOS, потому что с нее началась история Microsoft). Разные разделы жесткого диска в DOS представляются как отдельные диски (в DOS они называются логическими дисками), В Windows то же самое - открываем окно Мой

Диспетчер устройств

Диспетчер устройств Как и в более ранних операционных системах Windows, компонент Диспетчер устройств используется для отображения и настройки оборудования, которое в данный момент установлено в компьютере и используется операционной системой. Здесь вы можете управлять

Диспетчер устройств

Диспетчер устройств Диспетчер устройств входит в стандартную консоль devmgmt.msc и имеет GUID-номер . После вызова данной консоли откроется окно, подобное приведенному на рис. 10.3.Окно Диспетчера устройств отображает все установленное на компьютере

8.3. Подключение устройств

8.3. Подключение устройств Аппетит всегда приходит во время еды. Когда вы покупаете свой первый компьютер, кажется, что в нем есть все. В нем столько «всего», что вам никогда не освоить всех его возможностей. Но проходит время, технологии развиваются, ваши запросы растут, и

Типы, характеризуемые значениями, ссылочные типы и оператор присваивания

Типы, характеризуемые значениями, ссылочные типы и оператор присваивания Теперь изучите следующий метод Main() и рассмотрите его вывод, показанный на рис. 3.12.static void Main(string[] args) < Console.WriteLine("*** Типы, характеризуемые значением / Ссылочные типы ***"); Console.WriteLine(-› Создание p1"); MyPoint

Типы, характеризуемые значениями и содержащие ссылочные типы

Типы, характеризуемые значениями и содержащие ссылочные типы Теперь, когда вы чувствуете разницу между типами, характеризуемыми значением, и ссылочными типами, давайте рассмотрим более сложный пример. Предположим, что имеется следующий ссылочный тип (класс),

Типы, характеризуемые значениями, и ссылочные типы: заключительные замечания

Типы, характеризуемые значениями, и ссылочные типы: заключительные замечания Чтобы завершить обсуждение данной темы, изучите информацию табл. 3.8, в которой приводится краткая сводка основных отличий между типами, характеризуемыми значением, и ссылочными типами.Таблица

Обнаружение устройств

5.11.2. Файлы устройств

5.11.2. Файлы устройств Отдельного разговора заслуживают файлы устройств. Для Linux нет разницы между устройством и файлом. Все устройства системы представлены в корневой файловой системе в виде обычных файлов. Как уже упоминалось, файлы устройств хранятся в каталоге /dev.

Профили устройств

Профили устройств Что делать, если один и тот же файл на разных мониторах выглядит по-разному? И откуда берутся различия в картинке, если один и тот же снимок распечатать на разных принтерах? В таких случаях устройства чаще всего оказываются в полном порядке. Но прежде, чем

11.6. Диспетчер устройств

11.6. Диспетчер устройств Диспетчер устройств — это специальная программа, с помощью которой мы можем узнать, какие устройства установлены в нашей системе. Также Диспетчер устройств позволяет определить состояние любого устройства нашей системы.Чтобы открыть Диспетчер

Работа с устройствами в Linux очень сильно отличается от Windows. Главная концепция Linux в том, что все есть файл, не только пользовательские файлы с информацией, но и различные настройки ядра, подключенные устройства, память, сетевые соединения, все это представлено в виде файлов, которые размещены в специальных файловых системах.

С помощью этих файлов система работает с устройствами, и вы можете ими управлять с помощью различных утилит. В этой статье мы рассмотрим как выполняется работа с устройствами Linux, что из себя представляют устройства Linux, а также рассмотрим несколько примеров создания файлов устройств и обращения к ним. Это довольно интересная тема.

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

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

Самое важное, что нужно знать об этих файлах - это не драйверы устройств, их лучше рассматривать как интерфейс доступа к драйверам устройств. Приложение отправляет данные в файл устройства, откуда они читаются драйвером устройства и отправляются на физическое устройства. Обратная передача от физических устройств тоже проходит по этому пути через файл устройства. Давайте посмотрим как будет выглядеть поток передачи данных для типичной команды, например, cat:

dboth-dev-dir_0

На схеме приведена схема передачи данных для команды cat /etc/resolv.conf. Вы выполняете команду из терминала, утилита отправляет запрос файла драйверу, который ищет файл на диске и читает его содержимое. Данные передаются через файл устройства, а затем опять же, через файл устройства псевдо-терминала передаются в эмулятор терминала 6, где они будут отображены.

Если мы перенаправим вывод команды в файл, например, cat /etc/resolv.conf > /etc/resolv.bak, то левая часть схемы останется неизменной, а правая сторона будет вести к файлу устройства /dev/sda2. Эти устройства делают очень простым использование стандартных потоков ввода/вывода для доступа к каждому устройству. Простое перенаправление потока данных в файл устройства приведет к записи данных на устройство.

Классификация файлов устройств

Файлы устройств можно классифицировать по меньшей мере двумя способами. Первая и наиболее широкая классификация - на основе потока данных. В устройствах TTY и других символьных устройствах, данные обрабатываются по одному символу или байту за раз. В блочных устройствах, таких как жесткие диски данные передаются блоками, как правило, с размером, кратным 256 байт.

Если вы еще этого не делали, то перейдите в папку /dev/ и посмотрите список находящихся там файлов с помощью команды ls. Вы увидите очень длинный список файлов с их правами доступа, владельцами и группами - это список устройств linux. Обратите внимание на самый первый символ в каждой строке. Он указывает тип устройства. Символом "b" - обозначаются блочные устройства linux (block), а символом "c" - символьные (character).

device

Более точно можно идентифицировать устройства по их младшему и старшему номеру. Например, жесткие диски имеют старший номер 8, что обозначает их как блочные устройства SCSI. Обратите внимание, что все жесткие диски PATA и SATA находятся под управлением SCSI. Раньше использовалась подсистема ATA, но она уже устарела, поэтому диски, которые раньше обозначались как hd[a-z] теперь обозначаются sd[a-z].

Младший номер диска означает раздел устройства, например, номера 8/0 - это весь диск /dev/sda, а 8/1 уже файл первого раздела на диске, 8/6 - /dev/sda6. Файлы TTY именуются немного по-другому, от tty0 до tty63. Все значения старших номеров устройств Linux вы можете найти на официальном сайте ядра.

Работа с устройствами в Linux

Давайте проведем несколько экспериментов, которые помогут вам понять как работают устройства Linux и как ими управлять в этой операционной системе. Большинство дистрибутивов Linux имеют несколько виртуальных консолей, обычно от 1 до 7, которые могут использоваться для входа в сеанс командной оболочки. К этим виртуальным консолям можно получить доступ с помощью сочетаний клавиш Ctrl+Alt+Fn, например, Ctrl+Alt+F1 для первой консоли, Ctrl+Alt+F2 для второй и так далее.

Сейчас нажмите Ctrl+Alt+F2 для перехода во вторую консоль, в некоторых дистрибутивах, кроме запроса логина и пароля, будет выведена информация про активную TTY связанную с этой консолью. Но этой информации может и не быть. В данном случае консоль будет связана с устройством tty2.

Войдите от имени обычного пользователя, затем наберите такую команду, чтобы посмотреть номер устройства tty:

device4

У меня вы видите устройство /dev/pts/0, это виртуальное устройство эмулятора терминала, но если вы будете выполнять задачу в tty2, то отобразиться именно она. Теперь давайте посмотрим список tty устройств с помощью команды ls:

device1

Нас будут интересовать не все устройства, а только первые три. В этих устройствах нет ничего особенного, это обычные устройства символьного типа. Устройство tty2 подключено к консоли 2, устройство tty3 подключено к консоли 3.

Нажмите сочетание клавиш Ctrl+Alt+F3, чтобы переключиться в третью консоль, затем выполните команду:

echo "Hello world" > /dev/tty2

device6

Затем вернитесь во вторую консоль. Здесь вы увидите отправленную строку, Hello World. Все это можно повторить с помощью эмуляторов терминала в графическом интерфейсе, только здесь будут использоваться псевдо-терминальные устройства /dev/pts/*. Теперь попробуем отобразить содержимое файла fstab с помощью cat в другом терминале:

cat /etc/fstab > /dev/tty2

device5

cat test.pdf > /dev/usb/lp0

Каталог /dev/ содержит много интересных файлов устройств. Это интерфейсы доступа к аппаратному обеспечению и вам не нужно думать, что это, жесткий диск или экран. Например, вся оперативная память компьютера доступна в виде устройства /dev/mem. С помощью него вы можете иметь прямой доступ к памяти. Мы можем вывести содержимое памяти в терминал:

dd if=/dev/mem bs=2048 count=100

device2

Утилита dd, в отличие от cat дает больше контроля над процессом и позволяет указать сколько данных нужно прочитать. Но не ко всей памяти вы можете получить доступ. В ядре встроена защита, поэтому обычно, вы можете читать память, только для своего процесса.

Также тут есть файлы, которые несвязанны ни с какими реальными устройствами, это null, zero, random и urandom. Устройство /dev/null может использоваться для перенаправления вывода команд, чтобы данные никуда не выводились. Устройство /dev/zero используется для получения строки, заполненной нулями.

Вы можете использовать ту же команду dd, чтобы попытаться вывести ряд символов с устройства /dev/null:

dd if=/dev/null bs=512 count=500 | od -c

device7

Обратите внимание, что ничего выведено не будет, потому что это устройство пусто, оно только принимает данные и никуда их не сохраняет.

Устройства /dev/random и /dev/urandom позволяют получить случайные комбинации чисел или байт. Вы можете использовать такую команду, чтобы получить случайные байты информации:

device3

Для остановки нажмите Ctrl+C. Устройство urandom позволяет генерировать случайные последовательности независимые от предыдущего числа, в качестве источника энтропии используется нажатия клавиш и движения мыши.

Устройство /dev/zero позволяет получить строку, заполненную нулями. Для проверки используйте такую команду:

dd if=/dev/zero bs=512 count=500 | od -c

device8

Обратите внимание, что восьмеричные нули и нули ASCII это не одно и то же.

Создание устройств в Linux

В прошлом все устройства из каталога /dev создавались во время установки системы, а это означало, что каталог содержал все возможные поддерживаемые устройства, даже если они не использовались. Если вам нужно было создавать или переинициализировать файлы устройств, использовалась утилита mknod. Но для работы с ней вам нужно знать старший и младший номер устройства.

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

Команда mknod все еще есть, но уже существует более новая разработка - makedev. Она предоставляет очень простой интерфейс для создания устройств.

Выводы

В этой статье мы рассмотрели подключенные устройства linux, а также как выполняется работа с устройствами в Linux. Конечно, в одной статье невозможно полностью охватить такую огромную тему, но я надеюсь что у вас появились некоторые базовые навыки работы использования файлов устройств и эта статья была вам полезной.

Читайте также: