udev & sysfs (переименование устройства)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

minder
Сообщения: 331
ОС: AIX, Solaris,RHEL,SLES,Gentoo

udev & sysfs

Сообщение minder »

Добрый день!
В процессе переименования устройств в /dev путем создания плавил udev столкнулся с недопониманием.
Правила udev меняют имя устройства в ФС /dev, но не меняется имя в sysfs (/sys).

Например,
Имеется устройство в системе /dev/sr0 (оптический привод)
Создаю правило:
KERNEL=="sr*", SUBSYSTEM=="block", ATTR{removable}=="1", ATTR{size}=="130904", NAME="sr99"

После применения правила (echo change > /sys/block/sr0/uevent или reboot) имя устройства успешно изменилось:
# ls /dev/sr*
/dev/sr99

Но, в /sys оно осталось в старом виде:
# ls -ld /sys/block/sr*
/sys/block/sr0 -> ../devices/pci0000:00/.../2:0:0:0/block/sr0

Тоже самое показывает lsscsi - файл устройства новый, а само устройство старое:
[2:0:0:0] cd/dvd NECVMWar VMware IDE CDR10 1.00 /dev/sr99
dir: /sys/bus/scsi/devices/2:0:0:0 [/sys/devices/pci0000:00/.../2:0:0:0]

Iostat так же ссылается на старое имя, при том, что его нет в /dev
# iostat | grep sr
sr0 0.00 0.00 0.00 1016 0


Отсюда возникает вопрос:
Можно ли изменить имя в sysfs или как пользоваться системой при работе с подобным шаблоном, где устройства в /dev и /sys не совпадают ?
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: udev & sysfs

Сообщение drBatty »

дык само устройство в /sys, а в /dev его псевдоним.

minder писал(а):
16.12.2013 16:40
Можно ли изменить имя в sysfs

AFAIK можно, но не нужно.
minder писал(а):
16.12.2013 16:40
как пользоваться системой при работе с подобным шаблоном, где устройства в /dev и /sys не совпадают ?

как обычно. Они и не должны совпадать. А вот eth* так вообще в /dev/ нету.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: udev & sysfs

Сообщение IMB »

Имя в sysfs формируется ядром на основе информации от драйвера, например:

Код: Выделить всё

static ssize_t show_model(struct device *dev, struct device_attribute *attr,
            char *buf)
{
    return sprintf(buf, "%s\n",
            ov2715_data.fake_lupa ? "FakeLUPA300" : "OV2715 HD");
}

static DEVICE_ATTR(ov2715_model, S_IRUGO, show_model, NULL);

Код создает файл ov2715_model, который можно будет обнаружить в /sys/devices/platform/imx-i2c.0/i2c-0/0-005c и /sys/bus/i2c/devices/0-005c, устройство зарегестрировано как I2C-устройство с адресом 0x5C.
Спасибо сказали:
minder
Сообщения: 331
ОС: AIX, Solaris,RHEL,SLES,Gentoo

Re: udev & sysfs

Сообщение minder »

drBatty писал(а):
17.12.2013 06:40
дык само устройство в /sys, а в /dev его псевдоним.

minder писал(а):
16.12.2013 16:40
Можно ли изменить имя в sysfs

AFAIK можно, но не нужно.
minder писал(а):
16.12.2013 16:40
как пользоваться системой при работе с подобным шаблоном, где устройства в /dev и /sys не совпадают ?

как обычно. Они и не должны совпадать. А вот eth* так вообще в /dev/ нету.

Ну, устройство не в /sys, оно в железной коробке, в разъеме, на плате :)
/sys - это отражение ядра, его драйверов, атрибутов объекта и прочее.
Технически, согласен, могут не совпадать, но работать неудобно. Допустим, диски переименованы в /dev как disk_alpha, disk_beta, disk_gamma. Администратор работает именно с этими именами, а в /sys они sdy, sdx, sdw. В момент просмотра дисковой активности получается неразбериха - неясно где какой диск. Настройка значений атрибутов неудобная: /sys/block/<devnode>/[queue/scheduler,quqeue_depth,...] - приходится делать лишнюю работу по сопоставлению дисков, что отнимает время.
Тот же сетевой интерфейс, на сколько я понимаю, в /sys переименовывается.


IMB писал(а):
17.12.2013 08:46
Имя в sysfs формируется ядром на основе информации от драйвера, например:

Код: Выделить всё

static ssize_t show_model(struct device *dev, struct device_attribute *attr,
             char *buf)
 {
     return sprintf(buf, "%s\n",
             ov2715_data.fake_lupa ? "FakeLUPA300" : "OV2715 HD");
 }

 static DEVICE_ATTR(ov2715_model, S_IRUGO, show_model, NULL);

Код создает файл ov2715_model, который можно будет обнаружить в /sys/devices/platform/imx-i2c.0/i2c-0/0-005c и /sys/bus/i2c/devices/0-005c, устройство зарегистрировано как I2C-устройство с адресом 0x5C.


Является ли эта связь двусторонней? Ведь если ядро имя формирует, то может учесть и данные с userspace


Вообще, в документации о sysfs пишется о возможности переименования kernel object, но не нигде не нашел примера как это делается и реального использования.
С другой стороны, если нет инструментов для пользователя переименовать объект, зачем тогда в udev имеет возможность переименовывать файл устройства (ведь и так понятно, что работать с одним и тем же устройством с разными именами в каждой виртуальной ФС неудобно)?
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21499
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: udev & sysfs

Сообщение Bizdelnick »

А зачем вообще понадобилось переименовывать устройство? Так никто не делает. В абсолютном большинстве случаев достаточно симлинка. И путаницы не будет.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: udev & sysfs

Сообщение IMB »

minder писал(а):
17.12.2013 10:35
Является ли эта связь двусторонней? Ведь если ядро имя формирует, то может учесть и данные с userspace

Не проблема, реализуйте свой драйвер принимающий в виде параметра строку с именем файла, после загрузки получите файл с нужным именем.
Спасибо сказали:
minder
Сообщения: 331
ОС: AIX, Solaris,RHEL,SLES,Gentoo

Re: udev & sysfs

Сообщение minder »

Bizdelnick писал(а):
17.12.2013 10:42
А зачем вообще понадобилось переименовывать устройство? Так никто не делает. В абсолютном большинстве случаев достаточно симлинка. И путаницы не будет.


Необходимости сильной нет, и симлинк вполне устраивает почти всегда. Меня лишь заинтересовал сам вопрос, ибо возможность переименования файлов устройств в руководствах по написанию правил UDEV имеется и как пример приводится, но не говориться, что это не является best practices. Сам udev на сетевые устройства генерирует правила переименования для привязки имен сетевым интерфейсам, но на другие устройства он уже генерирует симлинки, оставляя в покое оригинальное имя.
В общем, вопрос скорее для общего понимания как работает и как лучше делать, чем необходимость.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: udev & sysfs

Сообщение drBatty »

minder писал(а):
17.12.2013 10:35
Ну, устройство не в /sys, оно в железной коробке, в разъеме, на плате

драйверу удобнее, когда оно "в /sys".

minder писал(а):
17.12.2013 10:35
Технически, согласен, могут не совпадать, но работать неудобно. Допустим, диски переименованы в /dev как disk_alpha, disk_beta, disk_gamma. Администратор работает именно с этими именами, а в /sys они sdy, sdx, sdw. В момент просмотра дисковой активности получается неразбериха - неясно где какой диск.

неразберихи никакой нет, ибо все утилиты и программы работают исключительно с /dev/*.

Вы берёте какие-то специальные случаи, когда возможна неоднозначность. К примеру устройство /sys/xyz разделено на два логических /dev/zzz1 /dev/zzz2. При этом вся работа идёт с /dev/zzz{1,2}, и тем не менее, "активность" отдельно /dev/zzz1 не имеет никакого смысла, т.к. такого устройства не существует IRL.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: