4 デバイス管理
警告:
Oracle Linux 7は現在延長サポート中です。詳細は、Oracle Linux拡張サポートおよびOracleオープン・ソース・サポート・ポリシーを参照してください。
できるだけ早くアプリケーションとデータをOracle Linux 8またはOracle Linux 9に移行してください。
この章では、システムでデバイス・ファイルを使用する方法、およびudevデバイス・マネージャでデバイス・ノード・ファイルを動的に作成または削除する方法について説明します。
デバイス・ファイルについて
/dev
ディレクトリにはデバイス・ファイル(デバイス特殊ファイル、デバイス・ノードと呼ばれることがあります)が格納され、このファイルによって周辺機器(ハード・ディスクなど)、周辺機器上のリソース(ディスク・パーティションなど)および疑似デバイス(乱数ジェネレータなど)へのアクセスが可能になります。
/dev
ディレクトリには複数のサブディレクトリ階層が含まれ、各階層には特定タイプのデバイスに関連するデバイス・ファイルが保持されます。たとえば、/dev/disk/id-by-uuid
ディレクトリには、ディスクの汎用一意識別子(UUID)に従って指定されたハード・ディスクのデバイス・ファイルが格納されます。このようなサブディレクトリ内のデバイス・ファイルは、実際には/dev
内のデバイス・ファイルへのシンボリック・リンクとして実装されます。/dev
内のファイルを使用しても、/dev/disk/id-by-uuid
にリストされたファイルに対応するリンクを使用しても同じデバイスにアクセスできます。
ls -lコマンドを使用して/dev
の下のファイルをリストすると、一部のデバイス・ファイルは、タイプb
(ブロック)またはタイプc
(キャラクタ)として表示されます。これらのデバイスには、ファイル・サイズではなく、デバイスに関連する番号のペアが表示されます。これらのメジャー番号とマイナー番号によって、デバイスがシステムに対して識別されます。
ls -l /dev
total 0 crw-rw----. 1 root root 10, 56 Mar 17 08:17 autofs drwxr-xr-x. 2 root root 640 Mar 17 08:17 block drwxr-xr-x. 2 root root 80 Mar 17 08:16 bsg drwxr-xr-x. 3 root root 60 Mar 17 08:16 bus lrwxrwxrwx. 1 root root 3 Mar 17 08:17 cdrom -> sr0 drwxr-xr-x. 2 root root 2880 Mar 17 08:17 char crw-------. 1 root root 5, 1 Mar 17 08:17 console lrwxrwxrwx. 1 root root 11 Mar 17 08:17 core -> /proc/kcore drwxr-xr-x. 4 root root 100 Mar 17 08:17 cpu crw-rw----. 1 root root 10, 61 Mar 17 08:17 cpu_dma_latency drwxr-xr-x. 6 root root 120 Mar 17 08:16 disk brw-rw----. 1 root disk 253, 0 Mar 17 08:17 dm-0 brw-rw----. 1 root disk 253, 1 Mar 17 08:17 dm-1 ... crw-rw-rw-. 1 root root 1, 3 Mar 17 08:17 /dev/null ... drwxr-xr-x. 2 root root 0 Mar 17 08:16 pts ... crw-rw-rw-. 1 root root 1, 8 Mar 17 08:17 random ... brw-rw----. 1 root disk 8, 0 Mar 17 08:17 sda brw-rw----. 1 root disk 8, 1 Mar 17 08:17 sda1 brw-rw----. 1 root disk 8, 2 Mar 17 08:17 sda2 ... lrwxrwxrwx. 1 root root 15 Mar 17 08:17 stderr -> /proc/self/fd/2 lrwxrwxrwx. 1 root root 15 Mar 17 08:17 stdin -> /proc/self/fd/0 lrwxrwxrwx. 1 root root 15 Mar 17 08:17 stdout -> /proc/self/fd/1 ... crw--w----. 1 root tty 4, 0 Mar 17 08:17 tty0 crw--w----. 1 root tty 4, 1 Mar 17 08:17 tty1 ... crw-rw-rw-. 1 root root 1, 9 Mar 17 08:17 urandom ... crw-rw-rw-. 1 root root 1, 5 Mar 17 08:17 zero
ブロック・デバイスでは、データへのランダム・アクセス、データ用のメディアの検索がサポートされ、通常は、データの書込みまたは読取り中にデータのバッファリングが可能です。ブロック・デバイスの例として、ハード・ディスク、CD-ROMドライブ、フラッシュ・メモリー、その他のアドレス可能なメモリー・デバイスがあります。カーネルは、ブロック・デバイスに対して、特定のバイト数のブロック単位でデータの書込みまたは読取りを行います。出力例のsda
はハード・ディスクに対応するブロック・デバイス・ファイルで、メジャー番号が8、マイナー番号が0です。sda1
とsda2
はこのディスクのパーティションで、メジャー番号はsda
と同じ(8)ですが、マイナー番号は1と2です。
キャラクタ・デバイスではデバイスに対するデータのストリーミングがサポートされ、通常、データはバッファリングされず、デバイス上のデータへのランダム・アクセスも許可されません。カーネルは、キャラクタ・デバイスに対して、一度に1バイトずつデータの書込みまたは読取りを行います。キャラクタ・デバイスの例として、キーボード、マウス、端末、擬似端末およびテープ・ドライブがあります。tty0
とtty1
は端末デバイスに対応するキャラクタ・デバイス・ファイルで、ユーザーはシリアル端末または端末エミュレータからログインできます。これらのファイルのメジャー番号は4で、マイナー番号は0と1です。
擬似端末のワーカーまたはセカンダリ(スレーブ)デバイスは、実際の端末デバイスをエミュレートしてソフトウェアと相互作用します。たとえば、ユーザーは端末デバイス(/dev/tty1
など)にログインし、擬似端末のプライマリ(マスター)デバイス/dev/pts/ptmx
を使用して、基礎となる擬似端末デバイスと相互作用します。ワーカーおよびプライマリ擬似端末のキャラクタ・デバイス・ファイルは、/dev/pts
ディレクトリにあります。
ls -l /dev/pts
total 0 crw--w----. 1 guest tty 136, 0 Mar 17 10:11 0 crw--w----. 1 guest tty 136, 1 Mar 17 10:53 1 crw--w----. 1 guest tty 136, 2 Mar 17 10:11 2 c---------. 1 root root 5, 2 Mar 17 08:16 ptmx
stdin
(標準入力)など一部のデバイス・エントリは、proc
ファイル・システムのself
サブディレクトリを介してシンボリック・リンクされます。これらが実際に参照する擬似端末デバイス・ファイルは、プロセスのコンテキストによって異なります。 ls -l /proc/self/fd/[012]
total 0 lrwx------. 1 root root 64 Mar 17 10:02 0 -> /dev/pts/1 lrwx------. 1 root root 64 Mar 17 10:02 1 -> /dev/pts/1 lrwx------. 1 root root 64 Mar 17 10:02 2 -> /dev/pts/1
null
、random
、urandom
およびzero
などのキャラクタ・デバイスは、物理ハードウェアではなくソフトウェアに実装された仮想機能にアクセスできる擬似デバイスの例です。
/dev/null
はデータ・シンクです。/dev/null
に書き込むデータは実質的に消去されますが、書込み操作は成功します。/dev/null
から読み込むとEOF
(end-of-file)が返されます。
/dev/zero
は無制限のゼロ値バイトのデータ・ソースです。
/dev/random
および/dev/urandom
は、擬似ランダム・バイトのストリームのデータ・ソースです。高エントロピの出力を維持するために、エントロピ・プールにノイズの十分なビットが含まれない場合は/dev/random
がブロックされます。/dev/urandom
はブロックされないため、その出力のエントロピは/dev/random
のエントロピほど一貫して高くありません。ただし、/dev/random
と/dev/urandom
はいずれも、ミリタリーグレードの暗号化のようなセキュアな暗号化という目的に対して十分にランダムであるとはみなされません。
エントロピ・プールのサイズ、および/dev/random
のエントロピ値は、/proc/sys/kernel/random
下の仮想ファイルから検出できます。
cat /proc/sys/kernel/random/poolsize
4096
cat /proc/sys/kernel/random/entropy_avail
3467
詳細は、null(4)
、pts(4)
およびrandom(4)
の各マニュアル・ページを参照してください。
udevデバイス・マネージャについて
udevデバイス・マネージャでは、ブート時、または2.6バージョン以降のカーネルを含むシステムに対してデバイスの追加または削除を実行した場合に、デバイス・ノード・ファイルが動的に作成または削除されます。デバイス・ノードの作成時に、udevでは、ラベル、シリアル番号、バス・デバイス番号などの属性についてデバイスの/sys
ディレクトリが読み取られます。
udevでは、永続的なデバイス名を使用でき、検出の順序に関係なく、再起動をまたいでデバイスの一貫したネーミングが保証されます。永続的なデバイス名は、外部ストレージ・デバイスを使用する場合に特に重要です。
udevの構成ファイルは/etc/udev/udev.conf
です。ファイルには、ロギング優先度を示す変数udev_log
が含まれます。変数は、err
、info
およびdebug
に設定できます。デフォルト値はerr
です。
詳細は、udev(7)
マニュアル・ページを参照してください。
udevルールについて
udevでは、デバイスの識別方法およびデバイス名の作成方法を決定するルール・ファイルが使用されます。udevサービス(systemd-udevd
)によって、システム起動時にルール・ファイルが読み取られ、ルールがメモリーに格納されます。カーネルが新しいデバイス、または既存のデバイスがオフラインになったのを検出すると、カーネルによってイベント・アクション(uevent)通知がudevに送信され、udevdでは、デバイスを識別するために、/sys
のデバイス属性に対してインメモリー・ルールが照合されます。デバイス・イベント処理の一部として、ルールでは、デバイスを構成するために実行する必要がある追加のプログラムを指定できます。ファイル拡張子が.rules
のルール・ファイルは、次のディレクトリに格納されます。
-
/lib/udev/rules.d
-
デフォルト・ルール・ファイルが格納されます。これらのファイルは編集しないでください。
-
/etc/udev/rules.d/*.rules
-
カスタマイズ・ルール・ファイルが格納されます。これらのファイルは変更できます。
-
/dev/.udev/rules.d/*.rules
-
一時ルール・ファイルが格納されます。これらのファイルは編集しないでください。
Udevでは、ルール・ファイルが格納されているディレクトリに関係なく、ルール・ファイルが字句順に処理されます。/etc/udev/rules.d
内のルール・ファイルによって、/lib/udev/rules.d
内の同じ名前のファイルがオーバーライドされます。
次のルールはファイル/lib/udev/rules.d/50-udev- default.rules
から抽出したもので、udevルールの構文を示しています。
# do not edit this file, it will be overwritten on update SUBSYSTEM=="block", SYMLINK{unique}+="block/%M:%m" SUBSYSTEM!="block", SYMLINK{unique}+="char/%M:%m" KERNEL=="pty[pqrstuvwxyzabcdef][0123456789abcdef]", GROUP="tty", MODE="0660" KERNEL=="tty[pqrstuvwxyzabcdef][0123456789abcdef]", GROUP="tty", MODE="0660" ... # mem KERNEL=="null|zero|full|random|urandom", MODE="0666" KERNEL=="mem|kmem|port|nvram", GROUP="kmem", MODE="0640" ... # block SUBSYSTEM=="block", GROUP="disk" ... # network KERNEL=="tun", MODE="0666" KERNEL=="rfkill", MODE="0644" # CPU KERNEL=="cpu[0-9]*", MODE="0444" ... # do not delete static device nodes ACTION=="remove", NAME=="", TEST=="/lib/udev/devices/%k", \ OPTIONS+="ignore_remove" ACTION=="remove", NAME=="?*", TEST=="/lib/udev/devices/$name", \ OPTIONS+="ignore_remove"
コメント行は#
の文字で始まります。他のすべての空白以外の行でルールが定義され、これは、1つ以上のカンマ区切りのキーと値のペアのリストです。ルールでは、値がキーに割り当てられるか、またはその現在値と指定した値とを比較することによってキーに対する一致の検出が試行されます。次のリストに、使用可能な割当および比較演算子を示します。
-
=
: キーに値を割り当て、以前の値を上書きします。 -
+=
: キーの現在の値リストに値を追加することによって、値を割り当てます。 -
:=
: キーに値を割り当てます。この値は以降のいずれのルールによっても変更できません。 -
==
: キーの現在の値が指定した値と等しいかどうか照合します。 -
!=
: キーの現在の値が指定した値と等しいかどうか照合します。
次のシェル形式のパターン一致文字を値で使用できます。
-
?
: 1文字に一致します。 -
*
: ゼロを含めて、任意の数の文字に一致します。 -
[]
: カッコ内に指定された任意の1文字または文字範囲の文字に一致します。たとえば、tty[sS][0-9]
はttys7
またはttyS7
に一致します。
次のリストに、ルールでよく使用される一致キーを示します。
-
ACTION
イベントを発生させたアクションの名前を照合します。たとえば、
ACTION="add"
またはACTION="remove"
です。 -
ENV{key}
デバイス・プロパティkeyに対する値を照合します。たとえば、
ENV{DEVTYPE}=="disk"
です。 -
KERNEL
イベントによって影響を受けるデバイスの名前を照合します。たとえば、ディスク・メディアの場合は
KERNEL=="dm-*"
です。 -
NAME
デバイス・ファイルまたはネットワーク・インタフェースの名前を照合します。たとえば、1つ以上の文字で構成される任意の名前の場合は
NAME="?*"
です。 -
SUBSYSTEM
イベントによって影響を受けるデバイスのサブシステムを照合します。たとえば、
SUBSYSTEM=="tty"
です。 -
TEST
指定したファイルまたはパスが存在するかどうかをテストします。たとえば、
TEST=="/lib/udev/devices/$name"
であり、$name
は現在照合しているデバイス・ファイルの名前です。
その他の一致キーには、ATTR{filename}
、ATTRS{filename}
、DEVPATH
、DRIVER
、DRIVERS
、KERNELS
、PROGRAM
、RESULT
、SUBSYSTEMS
およびSYMLINK
があります。
次のリストに、ルールでよく使用される割当キーを示します。
-
ENV{key}
デバイス・プロパティkeyに対する値を指定します。たとえば、
GROUP="disk"
です。 -
GROUP
デバイス・ファイルのグループを指定します。たとえば、
GROUP="disk"
です。 -
IMPORT{type}
:typeに応じて、デバイス・プロパティの変数のセットを指定します。
-
cmdline
: ブートkernel
コマンドラインから単一のプロパティをインポートします。単純なフラグの場合、udevではプロパティの値が1に設定されます。たとえば、IMPORT{cmdline}="nodmraid"
です。 -
db
: 指定した値をデバイス・データベースの索引として解釈し、単一のプロパティをインポートしますが、この値は以前のイベントですでに設定されている必要があります。たとえば、IMPORT{db}="DM_UDEV_LOW_PRIORITY_FLAG"
です。 -
file
: 指定した値をテキスト・ファイルの名前として解釈し、その内容をインポートしますが、この値は環境キー形式である必要があります。たとえば、IMPORT{file}="keyfile"
です。 -
parent
: 指定した値をキー名のフィルタとして解釈し、親デバイスに対するデータベース・エントリから格納済のキーをインポートします。たとえば、IMPORT{parent}="ID_*"
です。 -
program
: 指定した値を外部プログラムとして実行し、その結果をインポートしますが、この値は環境キー形式である必要があります。たとえば、IMPORT{program}="usb_id --export %p"
です。
-
-
MODE
デバイス・ファイルの権限を指定します。たとえば、
MODE="0640"
です。 -
NAME
デバイス・ファイルの名前を指定します。たとえば、
NAME="em1"
です。 -
OPTIONS
ルールおよびデバイスのオプションを指定します。たとえば、
OPTIONS+="ignore_remove"
であり、これは、デバイスが削除された場合でもデバイス・ファイルが削除されないことを意味します。 -
OWNER
デバイス・ファイルの所有者を指定します。たとえば、
GROUP="root"
です。 -
RUN
デバイス・ファイルの作成後に実行するコマンドを指定します。たとえば、
RUN+="/usr/bin/eject $kernel"
であり、$kernel
はデバイスのカーネル名です。 -
SYMLINK
デバイス・ファイルへのシンボリック・リンクの名前を指定します。たとえば、
SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}"
であり、$env{}
は指定したデバイス・プロパティに置換されます。
その他の割当キーには、ATTR{key}
、GOTO
、LABEL
、RUN
およびWAIT_FOR
があります。
次のリストに、GROUP
、MODE
、NAME
、OWNER
、PROGRAM
、RUN
およびSYMLINK
キーとともによく使用される文字列置換を示します。
-
$attr{file}
または%s{file}
/sys
の下にあるファイルからデバイス属性の値を指定します。たとえば、ENV{MATCHADDR}="$attr{address}"
です。 -
$devpath
または%p
/sys
の下にあるsysfs
ファイル・システムのデバイスのデバイス・パス。たとえば、RUN+="keyboard-force-release.sh $devpath common-volume-keys"
です。 -
$env{key}
または%E{key}
デバイス・プロパティの値を指定します。たとえば、
SYMLINK+="disk/by-id/md-name-$env{MD_NAME}-part%n"
です。 -
$kernel
または%k
デバイスのカーネル名。
-
$major
または%M
デバイスのメジャー番号を指定します。たとえば、
IMPORT{program}="udisks-dm-export %M %m"
です。 -
$minor
または%m
デバイスのマイナー番号を指定します。たとえば、
RUN+="$env{LVM_SBIN_PATH}/lvm pvscan --cache --major $major --minor $minor"
です。 -
$name
現在のデバイスのデバイス・ファイルを指定します。たとえば、
TEST=="/lib/udev/devices/$name"
です。
udevでは、デバイスに対する他の全ルールの処理終了後である、そのプログラムの実行直前に、RUN
に対して指定した文字列が展開されます。その他のキーについては、ルールの処理中に文字列が展開されます。
詳細は、udev(7)
マニュアル・ページを参照してください。
udevおよびsysfsの問合せ
udevadmコマンドを使用すると、udevデータベースおよびsysfs
を問い合せることができます。
たとえば、デバイス・ファイル/dev/sda
に対応する、/sys
に相対的なsysfs
デバイス・パスを問い合せるには、次のようにします。
sudo udevadm info --query=path --name=/dev/sda
/devices/pci0000:00/0000:00:0d.0/host0/target0:0:0/0:0:0:0/block/sda
/dev/sda
を示すシンボリック・リンクを問い合せるには:
sudo udevadm info --query=symlink --name=/dev/sda
block/8:0 disk/by-id/ata-VBOX_HARDDISK_VB6ad0115d-356e4c09 disk/by-id/scsi-SATA_VBOX_HARDDISK_VB6ad0115d-356e4c09 disk/by-path/pci-0000:00:0d.0-scsi-0:0:0:0
/dev/sda
のプロパティを問い合せるには:
sudo udevadm info --query=property --name=/dev/sda
UDEV_LOG=3 DEVPATH=/devices/pci0000:00/0000:00:0d.0/host0/target0:0:0/0:0:0:0/block/sda MAJOR=8 MINOR=0 DEVNAME=/dev/sda DEVTYPE=disk SUBSYSTEM=block ID_ATA=1 ID_TYPE=disk ID_BUS=ata ID_MODEL=VBOX_HARDDISK ID_MODEL_ENC=VBOX\x20HARDDISK\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20... ID_REVISION=1.0 ID_SERIAL=VBOX_HARDDISK_VB579a85b0-bf6debae ID_SERIAL_SHORT=VB579a85b0-bf6debae ID_ATA_WRITE_CACHE=1 ID_ATA_WRITE_CACHE_ENABLED=1 ID_ATA_FEATURE_SET_PM=1 ID_ATA_FEATURE_SET_PM_ENABLED=1 ID_ATA_SATA=1 ID_ATA_SATA_SIGNAL_RATE_GEN2=1 ID_SCSI_COMPAT=SATA_VBOX_HARDDISK_VB579a85b0-bf6debae ID_PATH=pci-0000:00:0d.0-scsi-0:0:0:0 ID_PART_TABLE_TYPE=dos LVM_SBIN_PATH=/sbin UDISKS_PRESENTATION_NOPOLICY=0 UDISKS_PARTITION_TABLE=1 UDISKS_PARTITION_TABLE_SCHEME=mbr UDISKS_PARTITION_TABLE_COUNT=2 UDISKS_ATA_SMART_IS_AVAILABLE=0 DEVLINKS=/dev/block/8:0 /dev/disk/by-id/ata-VBOX_HARDDISK_VB579a85b0-bf6debae ...
/dev/sda
に関するすべての情報を問い合せるには:
sudo udevadm info --query=all --name=/dev/sda
P: /devices/pci0000:00/0000:00:0d.0/host0/target0:0:0/0:0:0:0/block/sda N: sda W: 37 S: block/8:0 S: disk/by-id/ata-VBOX_HARDDISK_VB579a85b0-bf6debae S: disk/by-id/scsi-SATA_VBOX_HARDDISK_VB579a85b0-bf6debae S: disk/by-path/pci-0000:00:0d.0-scsi-0:0:0:0 E: UDEV_LOG=3 E: DEVPATH=/devices/pci0000:00/0000:00:0d.0/host0/target0:0:0/0:0:0:0/block/sda E: MAJOR=8 E: MINOR=0 E: DEVNAME=/dev/sda E: DEVTYPE=disk E: SUBSYSTEM=block E: ID_ATA=1 E: ID_TYPE=disk E: ID_BUS=ata E: ID_MODEL=VBOX_HARDDISK E: ID_MODEL_ENC=VBOX\x20HARDDISK\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20... E: ID_SERIAL=VBOX_HARDDISK_VB579a85b0-bf6debae E: ID_SERIAL_SHORT=VB579a85b0-bf6debae E: ID_ATA_WRITE_CACHE=1 E: ID_ATA_WRITE_CACHE_ENABLED=1 E: ID_ATA_FEATURE_SET_PM=1 E: ID_ATA_FEATURE_SET_PM_ENABLED=1 E: ID_ATA_SATA=1 E: ID_ATA_SATA_SIGNAL_RATE_GEN2=1 E: ID_SCSI_COMPAT=SATA_VBOX_HARDDISK_VB579a85b0-bf6debae E: ID_PATH=pci-0000:00:0d.0-scsi-0:0:0:0 E: ID_PART_TABLE_TYPE=dos E: LVM_SBIN_PATH=/sbin E: UDISKS_PRESENTATION_NOPOLICY=0 E: UDISKS_PARTITION_TABLE=1 E: UDISKS_PARTITION_TABLE_SCHEME=mbr E: UDISKS_PARTITION_TABLE_COUNT=2 E: UDISKS_ATA_SMART_IS_AVAILABLE=0 E: DEVLINKS=/dev/block/8:0 /dev/disk/by-id/ata-VBOX_HARDDISK_VB579a85b0-bf6debae ...
udevによって/sys
で検出された/dev/sda
とその親デバイスのすべてのプロパティを表示するには:
sudo udevadm info --attribute-walk --name=/dev/sda
... looking at device '/devices/pci0000:00/0000:00:0d.0/host0/target0:0:0/0:0:0:0/block/sda': KERNEL=="sda" SUBSYSTEM=="block" DRIVER=="" ATTR{range}=="16" ATTR{ext_range}=="256" ATTR{removable}=="0" ATTR{ro}=="0" ATTR{size}=="83886080" ATTR{alignment_offset}=="0" ATTR{capability}=="52" ATTR{stat}==" 20884 15437 1254282 338919 5743 8644 103994 109005 ... ATTR{inflight}==" 0 0" looking at parent device '/devices/pci0000:00/0000:00:0d.0/host0/target0:0:0/0:0:0:0': KERNELS=="0:0:0:0" SUBSYSTEMS=="scsi" DRIVERS=="sd" ATTRS{device_blocked}=="0" ATTRS{type}=="0" ATTRS{scsi_level}=="6" ATTRS{vendor}=="ATA " ATTRS{model}=="VBOX HARDDISK " ATTRS{rev}=="1.0 " ATTRS{state}=="running" ATTRS{timeout}=="30" ATTRS{iocounterbits}=="32" ATTRS{iorequest_cnt}=="0x6830" ATTRS{iodone_cnt}=="0x6826" ATTRS{ioerr_cnt}=="0x3" ATTRS{modalias}=="scsi:t-0x00" ATTRS{evt_media_change}=="0" ATTRS{dh_state}=="detached" ATTRS{queue_depth}=="31" ATTRS{queue_ramp_up_period}=="120000" ATTRS{queue_type}=="simple" looking at parent device '/devices/pci0000:00/0000:00:0d.0/host0/target0:0:0': KERNELS=="target0:0:0" SUBSYSTEMS=="scsi" DRIVERS=="" looking at parent device '/devices/pci0000:00/0000:00:0d.0/host0': KERNELS=="host0" SUBSYSTEMS=="scsi" DRIVERS=="" looking at parent device '/devices/pci0000:00/0000:00:0d.0': KERNELS=="0000:00:0d.0" SUBSYSTEMS=="pci" DRIVERS=="ahci" ATTRS{vendor}=="0x8086" ATTRS{device}=="0x2829" ATTRS{subsystem_vendor}=="0x0000" ATTRS{subsystem_device}=="0x0000" ATTRS{class}=="0x010601" ATTRS{irq}=="21" ATTRS{local_cpus}=="00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000003" ATTRS{local_cpulist}=="0-1" ATTRS{modalias}=="pci:v00008086d00002829sv00000000sd00000000bc01sc06i01" ATTRS{numa_node}=="-1" ATTRS{enable}=="1" ATTRS{broken_parity_status}=="0" ATTRS{msi_bus}=="" ATTRS{msi_irqs}=="" looking at parent device '/devices/pci0000:00': KERNELS=="pci0000:00" SUBSYSTEMS=="" DRIVERS==""
コマンドはそのデバイス・パスで指定されたデバイスから開始し、親デバイスのチェーンを上にたどります。検出されたすべてのデバイスについて、デバイスとその親デバイスに対する考えられるすべての属性が、udevルールの一致キー形式で表示されます。
詳細は、udevadm(8)
マニュアル・ページを参照してください。
udevルールの変更
ルールが評価される順序は重要です。udevでは、ルールが字句順に処理されます。独自のルールを追加する場合は、デフォルト・ルールの前にudevによってこれらのルールが検出され、評価される必要があります。
次の例は、udevルール・ファイルを実装して、シンボリック・リンクをディスク・デバイス(/dev/sdb
)に追加する方法を示しています。
-
udevによって他のルール・ファイルの前に読み取られるルール・ファイルを、
/etc/udev/rules.d
の下に10-local.rules
などのファイル名で作成します。たとえば、次に示す
10-local.rules
のルールでは、/dev/sdb
を参照するシンボリック・リンク/dev/my_disk
を作成します。KERNEL=="sdb", ACTION=="add", SYMLINK="my_disk"
/dev
のデバイス・ファイルをリストすると、udevによってルールがまだ適用されていないことが示されます。sudo ls /dev/sd* /dev/my_disk
ls: cannot access /dev/my_disk: No such file or directory /dev/sda /dev/sda1 /dev/sda2 /dev/sdb
-
udevがそのルールを適用してデバイスを作成する手順をシミュレートするには、次のようにudevadm testコマンドと
/sys/class/block
階層の下にリストされたsdb
のデバイス・パスを使用できます。sudo udevadm test /sys/class/block/sdb
calling: test version ... This program is for debugging only, it does not run any program specified by a RUN key. It may show incorrect results, because some values may be different, or not available at a simulation run. ... LINK 'my_disk' /etc/udev/rules.d/10-local.rules:1 ... creating link '/dev/my_disk' to '/dev/sdb' creating symlink '/dev/my_disk' to 'sdb ... ACTION=add DEVLINKS=/dev/disk/by-id/ata-VBOX_HARDDISK_VB186e4ce2-f80f170d /dev/disk/by-uuid/a7dc508d-5bcc-4112-b96e-f40b19e369fe /dev/my_disk ...
-
systemd-udevd
サービスを再起動します。sudo systemctl restart systemd-udevd
udevでルール・ファイルが処理された後、シンボリック・リンク
/dev/my_disk
が追加されます。sudo ls -F /dev/sd* /dev/my_disk
/dev/my_disk@ /dev/sda /dev/sda1 /dev/sda2 /dev/sdb
変更を取り消すには、/etc/udev/rules.d/10-local.rules
および/dev/my_disk
を削除し、systemctl restart systemd-udevdを再度実行します。