Linuxのudevについて

Linuxでは各種デバイス(HDDとか)はデバイスファイル(/dev下にあるファイル)として存在し、各種デバイスをファイルとして扱うことができる。(このファイルのどうやって扱うのかは、デバイスドライバによって定義されている。)このデバイスファイルを操作することで、ユーザー空間からカーネル空間にあるデバイスを操作できる。

このデバイスファイルはudevというデーモンが管理している。udevが常に監視しており、デバイスが接続されたら/devの下に登録する。このudevの動きと使い方についてまとめる。

動作

ひとまず、udevの動作を見てみる。USBメモリを指してみてudevデーモンのログを見てみる。

$ systemctl status -l udev
● systemd-udevd.service - udev Kernel Device Manager

~~~~

 3月 30 23:44:59 ZV mtp-probe[26105]: checking bus 2, device 6: "/sys/devices/pci0000:00/0000:00:14.0/usb2/2-4"
 3月 30 23:44:59 ZV mtp-probe[26105]: bus: 2, device: 6 was not an MTP device
 3月 30 23:44:59 ZV mtp-probe[26108]: checking bus 2, device 6: "/sys/devices/pci0000:00/0000:00:14.0/usb2/2-4"
 3月 30 23:44:59 ZV mtp-probe[26108]: bus: 2, device: 6 was not an MTP device

USBにデバイスが検出されている。そしてこのUSBは/dev/sddというファイルとして登録されていた。

バイスファイル

先程のUSBは/dev/sddという名前であったが、USBが複数あったりすると/dev/sdfとかに名前が変わってしまう。これではいろいろと面倒が生じるので、固有情報によってデバイスファイルを固定させる。udevは下にある命名規則等がかかれたファイルに基づいて、デバイスファイルを生成している。

  • /lib/udev/rules.d/
    • デフォルトのルールが記載されている場所。
  • /etc/udev/rules.d/
    • ユーザー定義のルールを記載する場所。

自分の環境のUSBメモリ命名規則の記載したファイルは60-persistent-storage.rulesであった。中身のUSBメモリ命名規則場所は以下のようになっている。

# Fall back usb_id for USB devices
KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id"

udev(7) - Linux manual page