Вопрос или проблема
Говорят, что 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
может быть глубоким и сложным. Вот несколько шагов, которые могут помочь в управлении этими процессами:
-
Понимание работы системных правил
udev
: Файлы правил в/lib/udev/rules.d/
содержат базовые настройки, управляющие поведениемudev
. Изучение этих правил позволит вам понять, как и почему определенные устройства получают свои имена. -
Создание пользовательских правил: Если вам нужно привязать устройство к определенному имени или задать конкретные параметров, вы можете создать свои правила в каталоге
/etc/udev/rules.d/
. Например, чтобы связать определенное устройство с уникальным именем, вам потребуется определить его по свойствам, таким как серийный номер или ID продукта, как показано в примере выше. -
Обновление и перезапуск
udev
: После внесения изменений в правила, требуется обновить настройкиudev
, обычно это делается с помощью командudevadm control --reload-rules
иudevadm trigger
. -
Мониторинг изменений: Вы можете использовать команду
udevadm monitor
для отслеживания действийudev
в реальном времени. Это полезно для диагностики проблем и отладки пользовательских правил.
Таким образом, понимание и управление системой udev
в Linux — это важный аспект для IT специалистов, который требует как теоретических знаний о принципах работы операционной системы, так и практических умений в организации и настройке собственных правил для специфических нужд. Вопросы о направлениях символических ссылок и их использовании на примере UUID и устройств, таких как /dev/sda
, иллюстрируют сложность, но и возможность тонкой настройки этой системы.