символические ссылки udev – на что указывает /dev/sda

Вопрос или проблема

Говорят, что udev создает символические ссылки, идентифицируя фактическое устройство, и /dev/disk/by-uuid – это пример.

[root@centos1 by-uuid]# pwd

/dev/disk/by-uuid

[root@centos1 by-uuid]# ls -l

total 0 lrwxrwxrwx 1 root root 10 Jun 26 00:59 4cfc879d-1d4e-4289-856c-5f532a74bb2d -> ../../sda

Означает ли это, что
a) /dev/sda указывает на uuid 4cfc879d-1d4e-4289-856c-5f532a74bb2d

или

b) uuid 4cfc879d-1d4e-4289-856c-5f532a74bb2d указывает на /dev/sda ?

==================================================

Если ответ a, я всегда думал, что ссылка должна идти слева направо? и как кто-то будет ссылаться на uuid, чтобы перейти к /dev/sda ?
Также я думал, что /dev/sda должен динамически добавляться udev и его наименование базируется на некоторых правилах.

Если ответ b, то на что указывает sda? Говорят, что ядро добавляет устройства в папку /dev/ динамически, и с помощью udev мы можем обеспечить постоянство наименования устройств в ней.

[root@centos1 dev]# pwd

/dev

[root@centos1 dev]# ls -lt sda

brw-rw—- 1 root disk 8, 0 Jun 26 00:59 sda

==================================================

Я пытался найти правила в /etc/udev/rules.d/, но безрезультатно.
Я использую CentOS.

Я ищу в /lib/udev/rules.d/, но не могу найти правила, которые добавляют sda в /dev/

Пожалуйста, посоветуйте.

Ссылка указывает на /dev/sda1. Вы можете это установить с помощью команды file: на моей системе, например,

  # file *
  ff28e743-4409-41b3-99ea-f133cdcc86be: symbolic link to `../../sda1' 

Таким образом, ваш вариант b верен. /dev/sda это не ссылка, следовательно, она ни на что не указывает: это просто специальный (устройство) файл, см. например эту статью в Википедии.

Я не использую CentOS, но в моих системах Debian/Kubuntu правила для дисков расположены в /lib/udev/rules.d, в

   # ls -lh 60-per*
     -rw-r--r-- 1 root root  616 apr 15 22:33 60-persistent-alsa.rules
     -rw-r--r-- 1 root root 2,5K apr 15 22:33 60-persistent-input.rules
     -rw-r--r-- 1 root root  947 apr 15 22:33 60-persistent-serial.rules
     -rw-r--r-- 1 root root  929 mag  4  2012 60-persistent-storage-dm.rules
     -rw-r--r-- 1 root root 5,6K apr 15 22:33 60-persistent-storage.rules
     -rw-r--r-- 1 root root 1,4K apr 15 22:33 60-persistent-storage-tape.rules
     -rw-r--r-- 1 root root  769 apr 15 22:33 60-persistent-v4l.rules

Соответствующий файл, конечно же, 60-persistent-storage.rules. Если вы не можете найти его в вашей системе, я предлагаю попробовать:

    find / -type f -name '*persistent-storage*.rules'

Редактировать:

будет ли /sda добавлен в /dev посредством udev?

Да.

как мы можем гарантировать, что “sda” всегда останется “sda”?

Мы не можем. Правило автоматически генерируется udev во время установки. В действительности, вышеупомянутый файл содержит следующее правило:

   # scsi устройства
   KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", IMPORT{program}="scsi_id --export --whitelisted -d $devnode", ENV{ID_BUS}="scsi"

РЕДАКТИРОВАНИЕ 2

Самое простое, учитывая, что вы не можете определиться, это установить свои собственные правила. Предположим, у вас есть устройство, называемое сейчас sdd, но вы хотите назвать его sda при следующей перезагрузке.

Сначала вам нужно выяснить некоторые параметры:

   udevadm info -a -p $(udevadm info -q path -n /dev/sdd)

Это выдаст много информации. Найдите строки, такие как эти (ваши будут другими, конечно):

  ATTRS{idVendor}=="18a5"
  ATTRS{idProduct}=="0302"
  ATTRS{serial}=="TT0E4E008XW3DT9H"

Теперь вы можете использовать эти параметры для создания своего собственного правила, которое будет добавлено в /etc/udev/rules.d/10-local.rules:

 ATTRS{idVendor}=="18a5", ATTRS{idProduct}=="0302", ATTRS{serial}=="TT0E4E008XW3DT9H", KERNEL=="sd?", NAME="sda", RUN+="/home/my_name/bin/my_program"

Последняя часть, RUN+="/home/my_name/bin/my_program", является необязательной: вы можете использовать ее для выполнения команды, если хотите, но можете и вовсе ее опустить.

Ответ или решение

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

Теория

udev — это компонент системы, который отвечает за управление устройствами в Linux. Он динамически настраивает имена устройств в каталоге /dev, обеспечивая доступ к физическим устройствам, таким как жесткие диски, флеш-накопители и другие. Каждый раз, когда новое устройство подключается или отключается, udev реагирует на это, создавая или удаляя соответствующие файлы устройств в /dev.

Одним из важнейших аспектов работы udev является система правил, которая контролирует, как и где эти устройства будут отображаться в файловой системе. Правила udev определяют, какие символические ссылки будут созданы, какие атрибуты будут назначены и какие дополнительные команды могут быть выполнены при обнаружении устройства. Это происходит через набор правил, находящихся в каталогах /etc/udev/rules.d/ и /lib/udev/rules.d/.

Пример

Вопрос, заданный в исходной проблеме, касается следующих символических ссылок и их назначения. В примере указано, что в каталоге /dev/disk/by-uuid существует символическая ссылка, которая указывает на устройство /dev/sda:

[root@centos1 by-uuid]# ls -l
total 0 lrwxrwxrwx 1 root root 10 Jun 26 00:59 4cfc879d-1d4e-4289-856c-5f532a74bb2d -> ../../sda

Это то, что может вызвать некоторую путаницу, и важно разобраться в направлении этой ссылки. На самом деле, UUID (например, 4cfc879d-1d4e-4289-856c-5f532a74bb2d) указывает на физических устройство /dev/sda. Это подтверждает версия ответа, представленного в качестве варианта (b): UUID является символической ссылкой на /dev/sda.

Символические ссылки работают слева направо: они показывают путь от файла-ссылки к целевому объекту. Когда вы видите символическую ссылку, она указывает, что вы начнете с места, где находится ссылка, и следуете по пути, чтобы добраться до файла назначения, в данном случае, до /dev/sda.

Применение

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

  1. Понимание работы системных правил udev: Файлы правил в /lib/udev/rules.d/ содержат базовые настройки, управляющие поведением udev. Изучение этих правил позволит вам понять, как и почему определенные устройства получают свои имена.

  2. Создание пользовательских правил: Если вам нужно привязать устройство к определенному имени или задать конкретные параметров, вы можете создать свои правила в каталоге /etc/udev/rules.d/. Например, чтобы связать определенное устройство с уникальным именем, вам потребуется определить его по свойствам, таким как серийный номер или ID продукта, как показано в примере выше.

  3. Обновление и перезапуск udev: После внесения изменений в правила, требуется обновить настройки udev, обычно это делается с помощью команд udevadm control --reload-rules и udevadm trigger.

  4. Мониторинг изменений: Вы можете использовать команду udevadm monitor для отслеживания действий udev в реальном времени. Это полезно для диагностики проблем и отладки пользовательских правил.

Таким образом, понимание и управление системой udev в Linux — это важный аспект для IT специалистов, который требует как теоретических знаний о принципах работы операционной системы, так и практических умений в организации и настройке собственных правил для специфических нужд. Вопросы о направлениях символических ссылок и их использовании на примере UUID и устройств, таких как /dev/sda, иллюстрируют сложность, но и возможность тонкой настройки этой системы.

Оцените материал
Добавить комментарий

Капча загружается...