Ubuntu Weekly Recipe

第559回 デバイスの認識をモニタリング・コントロールできる「udevadm」

この記事を読むのに必要な時間:およそ 8 分

第555回ではデバイスの自動認識やデバイス名の設定など,システムの裏方として大活躍しているudevの基本とルールファイルの書き方について紹介しました。今回はルールを書く上で便利なツールであるudevadmを紹介します。

udevのデバッグ方法

udevはまずinitシステムからudevdが起動され,以降はudevdが諸々の処理を行います。よってudevの挙動をより細かく知るためには,udevdのログレベルを初期状態のinfoからdebugにあげて起動しておくと便利です。udevdのログレベルを変更するには4種類の方法が存在します。

  • カーネルパラメーターから指定する
  • /etc/udev/udev.confから設定する
  • udevadmコマンドから設定する
  • 環境変数SYSTEMD_LOG_LEVELで設定する

このうち起動直後からdebugレベルにしたり,恒久的に設定したいなら,カーエネルパラメーターかudev.confを使うことになります。起動後に一時的にオン・オフするならudevadmコマンドが便利です。

カーネルパラメーターから指定する

比較的設定しやすいのがカーネルパラメーターに設定する方法です。次のようなパラメーターを設定します。

udev.log_priority=debug rd.udev.log_priority=debug

rd.で始まっているパラメーターは,initramfs環境でのみ効きます。通常の環境と両方で有効化したいなら,前者だけでかまいません。

カーネルパラメーターは/etc/default/grubGRUB_CMDLINE_LINUXに設定します。具体的には次のような値になります。

GRUB_CMDLINE_LINUX="udev.log_priority=debug"

エディタを使用しないなら次のコマンドを実行します。

$ sudo sed -i 's/^\(GRUB_CMDLINE_LINUX=".*\)"/\1 udev.log_priority=debug"/' /etc/default/grub
$ sudo update-grub

エディタを使用するしないに関わらず,更新したらupdate-grubを実行してください。変更したら再起動しましょう。

カーネルパラメーターに指定したパラメーターが表示されていることを確認しましょう。

$ cat /proc/cmdline
(略) ro udev.log_priority=debug quiet splash vt.handoff=1

ログを見るとudev関連のログが大量に出ています。たとえば次の内容から,ロードされているルールファイルがわかります。

$ journalctl -b 0 | grep Reading
(略) systemd-udevd[304]: Reading rules file: /lib/udev/rules.d/39-usbmuxd.rules
(略) systemd-udevd[304]: Reading rules file: /lib/udev/rules.d/40-usb-media-players.rules
(後略)

デバッグログはかなりの量が出力されますし,起動時間も長くなってしまいます。必要がなくなったら元に戻しておきましょう。

/etc/udev/udev.confから設定する

もうひとつよく紹介されるのがudev.confに設定する方法です。特定のinitramfsでのみログレベルなどの設定を反映したい場合に使えますし,カーネルパラメーターと異なり,ログレベル以外も設定できます。

設定ファイルは/etc/udev/udev.confです。#で始まる行はコメント行なので,次のように設定します。

udev_log="debug"

さらにこの設定ファイルはudevが起動するinitramfsの中に含まれている必要があります。Ubuntuの場合,initramfsを更新したら最新のudev.confが含まれるようになっています。

$ sudo update-initramfs -u

ちなみに/usr/share/initramfs-tools/scripts/init-top/udevはinitramfs内部のudevの起動スクリプトです。ログレベル以外の挙動を一時的に変えたいなら,こちらのファイルを直接編集してupdate-initramfsを実行しても良いでしょう。ただしこのファイルはudevパッケージのアップデートによって上書きされるので注意してください。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。