Файлы блочных устройств linux

Device file (Русский)

Состояние перевода: На этой странице представлен перевод статьи Device file. Дата последней синхронизации: 8 января 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Специальный файл устройства, или просто файл устройства (англ. special device file) — это один из типов файлов в UNIX-подобной операционной системе. Специальные файлы устройств содержат данные, необходимые операционной системе для взаимодействия с физическими устройствами, такими как диски и дисководы, принтеры и факсы и т. п. Фактически, специальные файлы устройств являются указателями на драйверы устройств, и когда процесс обращается к файлу устройств, он по сути работает с драйвером этого устройства.

В Linux они располагаются в каталоге /dev в соответствии с Filesystem Hierarchy Standard.

В Arch Linux файлами устройств управляет udev.

Блочные устройства

Блочное устройство — это специальный файл, обеспечивающий буферизованный доступ к устройству.

Имена блочных устройств

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

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

SCSI

Устройства хранения, такие как жёсткие диски, SSD и флэш-накопители, которые поддерживают команду SCSI (SCSI, SAS, UASP), соединение ATA (PATA, SATA) или USB Mass Storage, обрабатываются драйвером SCSI. Все они имеют одну и ту же схему именования.

Имя этих устройств начинается с sd . Затем следует строчная буква, начиная с a для первого обнаруженного устройства ( sda ), b для второго ( sdb ) и так далее.

  • /dev/sda — устройство a , первое обнаруженное устройство.
  • /dev/sde — устройство e , пятое обнаруженное устройство.

NVMe

Имя устройств хранения, подключенных через NVM Express (NVMe), начинается с nvme . Затем следует порядковый номер контроллера устройства: nvme0 для первого обнаруженного контроллера NVMe, nvme1 для второго и так далее. Далее идет буква «n» и число, начинающееся с 1 , обозначающее устройство на контроллере: nvme0n1 для первого обнаруженного устройства на первом обнаруженном контроллере, nvme0n2 для второго обнаруженного устройства на первом обнаруженном контроллере и так далее.

  • /dev/nvme0n1 — устройство 1 на контроллере 0 , первое обнаруженное устройство на первом обнаруженном контроллере.
  • /dev/nvme2n5 — устройство 5 на контроллере 2 , пятое обнаруженное устройство на третьем обнаруженном контроллере.
Читайте также:  Linux grep точное совпадение

MMC

SD-карты, карты MMC и устройства хранения данных eMMC обрабатываются драйвером mmc , и имена этих устройств начинаются с mmcblk . Затем следует порядковый номер устройства: mmcblk0 для первого обнаруженного устройства, mmcblk1 для второго и так далее.

  • /dev/mmcblk0 — устройство 0 , первое обнаруженное устройство.
  • /dev/mmcblk4 — устройство 4 , пятое обнаруженное устройство.

Привод оптических дисков SCSI

Имена приводов оптических дисков, которые подключаются с через интерфейс, поддерживаемый драйвером SCSI, начинаются с sr . Затем следует порядковый номер устройства: sr0 для первого обнаруженного устройства, sr1 для второго и так далее.

Udev также предоставляет /dev/cdrom , который является символической ссылкой на /dev/sr0 . Имя всегда будет cdrom независимо от поддерживаемых приводом типов дисков или вставленного носителя.

  • /dev/sr0 — привод оптических дисков 0 , первый обнаруженный.
  • /dev/sr4 — привод оптических дисков 4 , пятый обнаруженный.
  • /dev/cdrom — символическая ссылка на /dev/sr0 .

virtio-blk

Имена дисков, подключенных к интерфейсу блочного устройства virtio (virtio-blk), начинаются с vd . Затем следует строчная буква, начиная с a для первого обнаруженного устройства ( vda ), b для второго ( vdb ) и так далее.

Примечание: Не путайте virtio-blk с virtio-scsi, который эмулирует контроллер SCSI и, таким образом, следует соглашению об именах SCSI.

  • /dev/vda — устройство a , первое обнаруженное устройство.
  • /dev/vde — устройство e , пятое обнаруженное устройство.

Разделы

Имена разделов представляют собой комбинацию имени устройства диска и номера раздела, присвоенного им в таблице разделов: /dev/устройствораздел . Для дисков, имя устройства которых заканчивается цифрой, имя диска и номер раздела разделяются буквой «p»: /dev/устройствоpраздел .

  • /dev/sda1 — раздел 1 на устройстве /dev/sda .
  • /dev/nvme2n5p3 — раздел 3 на устройстве /dev/nvme2n5 .
  • /dev/mmcblk3p4 — раздел 4 на устройстве /dev/mmcblk3 .
  • /dev/vda1 — раздел 1 на устройстве /dev/vda .
  • /dev/loop0p2 — раздел 2 на устройстве /dev/loop0 .
Читайте также:  Linux all loaded modules

Инструменты

lsblk

Пакет util-linux предоставляет утилиту lsblk(8) , которая выводит список блочных устройств, например:

NAME FSTYPE LABEL UUID MOUNTPOINT sda ├─sda1 vfat C4DA-2C4D /boot ├─sda2 swap 5b1564b2-2e2c-452c-bcfa-d1f572ae99f2 [SWAP] └─sda3 ext4 56adc99b-a61e-46af-aab7-a6d07e504652 /

Этот пример показывает только одно доступное устройство ( sda ), которое имеет три раздела (от sda1 до sda3 ), каждый из которых имеет свою файловую систему.

wipefs

wipefs может отображать сигнатуры файловой системы, RAID или таблицы разделов (магические строки) с указанного устройства и стирать их, чтобы сделать невидимыми для libblkid(3) . Он не стирает ни сами файловые системы, ни какие-либо другие данные с устройства.

Смотрите wipefs(8) для получения дополнительной информации.

Например, чтобы стереть все сигнатуры с устройства /dev/sdb и создать резервную копию ~/wipefs-sdb-смещение.bak для каждой сигнатуры:

Псевдоустройства

Эти файлы устройств не соответствуют никакому физическому устройству.

Смотрите также

Источник

Как создать файлы устройств в Linux с помощью команды mknod

Чтение файла именованного канала

Insomnia

Далее, давайте откроем другой терминал и запишем некоторые данные в /tmp/именованный канал файл:

$ echo "tecmint.com" > /tmp/named-pipe

Наконец, перейдите к первому терминалу, чтобы просмотреть результат:

Просмотр файла именованного канала

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

3. Создайте файл символьного устройства в Linux

Аналогичным образом мы можем использовать тип устройства как c для создания символьного устройства. Однако мы должны использовать старшие и младшие числа при создании символьного устройства.

Давайте использовать лс команда найти старшие и младшие числа /dev/полный устройство:

Найти основной и младший номер файла

В приведенном выше выводе пара чисел, разделенных запятыми, т.е. 1, 7 обозначают соответственно старшие и младшие числа.

В Linux /dev/полный устройство всегда возвращает На устройстве не осталось места ошибка. Чтобы понять это, давайте запишем некоторые данные в это устройство:

Запись данных в файл устройства

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

$ sudo mknod /tmp/full-device c 1 7

Далее изменим права доступа к файлу:

$ sudo chmod 666 /tmp/full-device $ ls -l /tmp/full-device

Наконец, запишите некоторые данные во вновь созданное устройство:

$ echo "tecmint" > /tmp/full-device

Создать новый файл устройства

Важно отметить, что вновь созданное символьное устройство ведет себя как /dev/полный устройства из-за одинаковых старших и младших номеров.

Читайте также:  Build android app on linux

4. Создайте файл блочного устройства в Linux

В дополнение к этому мы можем указать тип устройства как b для создания блочного устройства. Чтобы создать блочное устройство, мы должны использовать старший и младший номера.

В Linux, /dev/sr0 представляет CD/DVD-ROM устройство. Теперь давайте создадим новое блочное устройство, которое ведет себя так же, как /dev/sr0.

Во-первых, давайте узнаем старшие и младшие числа /dev/sr0:

Проверьте основные и второстепенные номера файлов устройств

В приведенном выше выводе мы видим, что его старший и младший номера равны 11 и 0 соответственно.

Теперь давайте создадим новое блочное устройство с такими же старшим и младшим номерами:

$ sudo mknod /tmp/dvd-rom b 11 0 $ ls -l /tmp/dvd-rom

Создать новое блочное устройство

Далее смонтируем образ ISO с CD/DVD ROM на диск. /млн каталог и убедитесь, что операция монтирования прошла успешно:

$ sudo mount /tmp/dvd-rom /mnt/ $ ls -1 /mnt/

Смонтировать новое блочное устройство

В этом примере мы видим, что /tmp/DVD-ROM блочное устройство может получить доступ к ISO-образу с CD/DVD-ROM.

5. Создайте файл устройства с разрешениями

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

Чтобы понять это, воспользуемся -m возможность установить права доступа при создании именованного канала:

$ sudo mknod -m 444 /tmp/pipe-with-permissions p

Теперь давайте проверим правильность установки разрешений:

$ ls -l /tmp/pipe-with-permissions

Создать файл устройства с разрешениями

В этом примере мы использовали -m вариант с именованным каналом. Однако мы можем использовать его и с символьными и блочными устройствами.

Знаете ли вы какой-либо другой лучший пример мкнод команда в линуксе? Сообщите нам свое мнение в комментариях ниже.

Источник

Оцените статью
Adblock
detector