udev
udev - management tool
Почему появилась статья:
Я бы хотел оставить себе задокументированное послание, которое легко можно было найти, о том как восстановить работоспособность сети для сервера, у которого сменилась платформа или сетевое устройство. При этом мне придется обьяснить как себе, так и возможным читателям статьи как и почему указанное решение работает.
Решение проблемы:
rm /etc/udev/rules.d/70-persistent-net.rules
Описание проблемы:
В случае деградации железного сервера и последующей замены материнской платы или сетевых контроллеров или установки дисков в новую платформу, при загрузке сервера не произойдет корректной загрузки сети, т.к при использовании linux операционных систем в файле /etc/udev/rules.d/70-persistent-net.rules
хранится информации о PCI-netwokr устройствах и для конкретных сетевых интерфейсов назначен mac-адрес, поэтому при загрузке операционной системы с подключенным новым устройством ядро при инициилизации устройств проверяет записи существующих ранее устройства в каталоге /sys/devices и соответсвенно находит конфигурацию прежнего с сетевого контроллера(интерфейса) с прежним адресным пространством, но автоматически не переинициилизирует новое устройство, поэтому ядру следует дать понять что адресное пространство изменилось удалив указанный в решении конфигурационный файл, который будет сгенерирован при новой загрузке ядра, согласно правилам в исполняемом скрипте /lib/udev/write_net_rules
.
Нужно сделать:
- провести эксперимент - при замене платформы не удалять файл, а запустить скрипт /lib/udev/write_net_rules
- провести эксперемент - при замене платформы запустить утилиту udevadm control с опцией –reload
##Что такое udev?
udev - набор утилит для управления устройствами, используемая linux ядром начиная с версии 2.6, используется для всевозможных действий с подключаемыми устройствами, например такими как управление правами, переименование устройств, хранение информации об устройствах. Важно знать, что хранение информации происходит в файловой системе sysfs, где хранятся файлы содержащие атрибуты для устройств. Для упрощения управления устройствами разработчиками sysfs было предложено правило, что в одном файле хранится один атрибут.
Подкаталоги каталога /sys:
- block - Информация о блочных устройствах (например, о жестких дисках)
- bus - Шины, известные ядру: PCI-E, SCSI, USB и др.
- class - Дерево, организованное функциональными типами устройств, например устройства ввода и сетевые интерфейсы.
- dev - Информация об устройствах, разделенная между символьными и блочными устройствами.
- devices - Корректное представление (с точки зрения наследственности) всех обнаруженных устройств
- firmware - Интерфейсы с такими зависимыми от платформы подсистемами, как ACPI
- fs - Каталог для хранения некоторых (но не всех) файловых систем, известных ядру
- kernel - Значение таких внутренних характеристик ядра, как кеш и виртуальная память
- module - Динамические модули, загруженные ядром
- power - Некоторые сведения о состоянии производительности системы (обычно не используется)
Первоначально информация о конфигурации устройств, если таковая существовала, хранилась в файловой системе /ргос. Хотя информация о процессах и ядре, связанная со временем выполнения, и в дальнейшем будет храниться в каталоге /ргос, предполагается, что со временем вся информация об устройствах будет перемещена в каталог /sys.
udev состоит из следующих частей и утилит:
- udeмd - демон менеджера событий
- udevadm - утилита для управления и диагностики
- libudev - библиотека для предоставления доступа к информации об устройствах
- udevrules - база данных sysfs, контролирующая создаине и переименование устройств
udevd
udevd стартует при загрузке системы и ожидает событий называемых uevents. При получении uevents демон сравнивает информацию с текущими правилами. Новые правила для устройств должны быть обнаружены автоматически.
udevadm
Пользовательская утилита для управления, запросов, тестирования, небольшого мониторинга и отладки устройств.
Синтаксис:
udevadm [команда] [опции команды]
udevadm -h
Usage: udevadm [--help] [--version] [--debug] COMMAND [COMMAND OPTIONS]
info query sysfs or the udev database
trigger request events from the kernel
settle wait for the event queue to finish
control control the udev daemon
monitor listen to kernel and udev events
test test an event run
test-builtin test a built-in command
Примеры использования:
udevadm info - получение информации об устройстве из базы данных sysfs
udevadm info --query=property --name=/dev/xvda
DEVNAME=/dev/xvda
DEVPATH=/devices/vbd-51712/block/xvda
DEVTYPE=disk
ID_PART_TABLE_TYPE=dos
MAJOR=202
MINOR=0
SUBSYSTEM=block
USEC_INITIALIZED=31247
udevadm info --query=property --name=/dev/input/by-id/usb-Logitech_USB_Optical_Mouse-mouse
DEVLINKS=/dev/input/by-id/usb-Logitech_USB_Optical_Mouse-mouse /dev/input/by-path/pci-0000:00:12.1-usb-0:3:1.0-mouse
DEVNAME=/dev/input/mouse0
DEVPATH=/devices/pci0000:00/0000:00:12.1/usb4/4-3/4-3:1.0/0003:046D:C05A.0008/input/input19/mouse0
ID_BUS=usb
ID_INPUT=1
ID_INPUT_MOUSE=1
ID_MODEL=USB_Optical_Mouse
ID_MODEL_ENC=USB\x20Optical\x20Mouse
ID_MODEL_ID=c05a
ID_PATH=pci-0000:00:12.1-usb-0:3:1.0
ID_PATH_TAG=pci-0000_00_12_1-usb-0_3_1_0
ID_REVISION=6300
ID_SERIAL=Logitech_USB_Optical_Mouse
ID_TYPE=hid
ID_USB_DRIVER=usbhid
ID_USB_INTERFACES=:030102:
ID_USB_INTERFACE_NUM=00
ID_VENDOR=Logitech
ID_VENDOR_ENC=Logitech
ID_VENDOR_ID=046d
MAJOR=13
MINOR=32
SUBSYSTEM=input
USEC_INITIALIZED=2668007573
udev rules
Правила определяют какие дейвайсы готовы к созданию на основании имен и прав.
По умолчанию могут располагаться в каталогах /lib/udev/rules.d/
или /etc/udev/rules.d/
.
Файлы правил должны иметь расширение .rules
.
Правила содержат пары ключ-значение, множество пар позволяют более детально управлять устройствами.
Пример простого правила на основе файла /etc/udev/rules.d/70-persistent-net.rules
# PCI device 0x10ec:0x8168 (r8169)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="1c:6f:65:ab:cd:a0", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
# PCI device 0x8086:/sys/devices/pci0000:00/0000:00:01.0/0000:01:00.1 (igb)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="0c:c4:7a:66:33:66", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
Более подробную документацию о udev можно получить тут: https://www.freedesktop.org/software/systemd/man/#U