Когда подключается диск, сетевой адаптер или USB-устройство, файл в
/dev не появляется сам по себе.Сначала kernel обнаруживает устройство и генерирует событие, затем
udev обрабатывает его и создаёт нужные device nodes и symlink.Посмотреть эти события в реальном времени:
udevadm monitor
Подключаем USB-накопитель и можем увидеть события от kernel и udev
KERNEL[...] add /devices/.../usb1/1-2
UDEV [...] add /devices/.../usb1/1-2
Это позволяет увидеть разницу между двумя этапами.
KERNEL - устройство обнаружено ядромUDEV - событие обработал userspace udevОтфильтровать только устройства
udevadm monitor --kernel --udev --subsystem-match=block
Теперь интересуют только block devices
При подключении диска можно увидеть цепочку событий для самого устройства и его разделов
add → nvme0n1
add → nvme0n1p1
add → nvme0n1p2
Узнать, почему устройство получило именно такое имя
После обнаружения:
udevadm info --query=all --name=/dev/sda
Можно посмотреть свойства, по которым udev идентифицирует устройство
Например:
ID_SERIAL=...
ID_WWN=...
ID_FS_UUID=...
ID_PATH=...
Именно на основе таких атрибутов создаются стабильные ссылки вроде:
/dev/disk/by-id/
/dev/disk/by-path/
/dev/disk/by-uuid/
Полезный кейс
Допустим, после перезагрузки диск иногда становится
/dev/sdb, а иногда /dev/sdcОриентироваться на имя
sdX в такой ситуации ненадёжноМожно посмотреть стабильный идентификатор:
udevadm info --query=property --name=/dev/sdb
А затем использовать
/dev/disk/by-id/...Так можно понять не только что система обнаружила, но и почему конкретное устройство получило конкретные свойства и имена

