新しく作成されたルールが機能するように、udevルールをどのようにリロードする必要がありますか?
私はArch Linuxを実行していますが、udevstart
ここにはコマンドがありません。
また/etc/rc.d
、そこにudevサービスはありません。
udev
?それはマネージャー/dev
ですか?
新しく作成されたルールが機能するように、udevルールをどのようにリロードする必要がありますか?
私はArch Linuxを実行していますが、udevstart
ここにはコマンドがありません。
また/etc/rc.d
、そこにudevサービスはありません。
udev
?それはマネージャー/dev
ですか?
回答:
# udevadm control --reload-rules && udevadm trigger
udevtrigger
後で必要ですか?
udevtrigger
(またはudevadm trigger
、ほとんどのディストリビューションで)必要になる場合があります(つまり、デバイスを接続して、それを元に戻します)。--reload-rules
自動的に行われるため、ほとんどの場合は役に立ちません。
udevadm trigger
CentOS 6で私のためにトリックをしました。
udevtrigger
またはudevadm trigger
私のために働いていませんでした。一部のデバイスは、同じモジュールのアンロードとロード後に機能します(ロード可能なモジュールであると仮定)。私が見つけたのは、必ずしもシステムをリブートする必要がないことです。ネットワークデバイスの例として、私はrmmod ixgbe
、rmmod tg3
、rmmod e1000
その後modprobe ixgbe
、modprobe tg3
、modprobe e1000
ネットワークドライバの種類に応じ。
ip link set $oldname name $newname
記載されています。私の場合、私は名前lan
付きのifaceを(KVM用の)ブリッジされたifaceに置き換える必要がありました。そのため、元の(現在は基礎となっている)ifaceは古い名前eth1
を取り戻す必要がありました。トリックは次のとおりです。1)ifaceをダウンさせます。2)ネットワーク設定を修正します。3)udev命名規則ファイルを更新します。4)を使用してifaceの名前を変更しip link...
ます。5)ブリッジを上げます。
Udevは、inotifyメカニズムを使用して、ライブラリとローカル構成ツリー(通常、/lib/udev/rules.d
とにある/etc/udev/rules.d
)の両方で、ルールディレクトリの変更を監視します。そのため、ほとんどの場合、ルールファイルを変更するときに何もする必要はありません。
他のディレクトリのファイルを含むルールがある場合など、異常なことをしている場合にのみ、udevデーモンに明示的に通知する必要があります。次に、デーモンに設定をリロードするように要求する通常の規則を使用できます:SIGHUP(pkill -HUP udevd
)を送信します。または、udevadm
次のコマンドを使用できますudevadm control --reload-rules
。
ただし、udevのバージョンが異なると、ルールを自動的にリロードするためのトリガーが異なることに注意してください。疑わしい場合は、電話してくださいudevadm control --reload-rules
:とにかく害はありません。
udevルールは、デバイスが追加されたときにのみ適用されます。すでに接続されているデバイスにルールを再適用したい場合は、呼び出すことで、明示的にこれを実行する必要がudevadm trigger
設定変更されている、例えばデバイス(複数可)と一致する権利のオプションでudevadm trigger --attr-match=vendor='Yoyodyne' --attr-match=model='Frobnicator 300'
。
inotify
メカニズムは、常にudevルールファイルの変更をキャッチするとは限りません。たとえばcat > 10-name.rules
、コンテンツを貼り付けてルールファイルを変更する場合、を使用してルールを手動でリロードする必要がありudevadm
ます。Raspbian Stretchでテスト済み。
--reload-rules
ため、まれにしか必要ありませんでした。
inotify
メカニズムが機能しました。
いつか必要になるので、これを追加します...再び。
イーサネットデバイス番号とMACアドレスの一致が正しくない場合があります。VMで実行し、各デバイスが異なるVLANに割り当てられている場合のように、これは非常に重要な場合があります。
/etc/udev/rules.d/70-persistent-net.rules
(またはその同等)udevadm control --reload-rules
udevadm trigger --attr-match=subsystem=net
私はこれがどれほどうまく機能したかに驚いた。
service network stop && udevadm control --reload-rules; udevadm trigger --attr-match=subsystem=net; service network start
これが当てはまるかどうかはわかりませんが、これは間違いなく古い投稿ですが、udev情報のWeb検索がかなり高くなったので、知識を共有できると思いました。
特定のデバイスに対してudevルールを手動でトリガーできます。これはredhat関連のディストリビューション(centos fedoraなどなど)にのみ適用されます
ルールファイル(/etc/udev/rules.d/whateveryoucalledyourrules
)で関連する変更を行ったらchange
、デバイスのueventにエコーインできます。
echo change > /sys/block/devname/partname1/uevent
これにより、このデバイスのみに対してudevルールの読み取りが強制されます。私の意見でははるかに良く、よりターゲットを絞っています。
私にとって、以下のコマンドシーケンスは期待どおりに機能しています。
番号/etc/udev/rules.d/70-persistent-net.rules
を変更し、eth
再起動せずにそれらをリロードするために変更を加えました。
/etc/init.d/networking stop
/etc/init.d/udev stop
udevadm control --reload-rules
/etc/init.d/udev start
/etc/init.d/networking start
これに従うことにより、マシンを再起動せずに実行時に正常にロードされました。
これに関する提案や推奨事項は歓迎します。マニュアルページを読んで自分でこれを発見したからです。
@enthusiasticgeekのコメントで気づくまでに時間がかかったため、ここに正しい答えを追加します。あなたがする必要があるのは、あなたがサーバーのコンソール上にいると仮定します-明らかに、あなたがssh'dにいる場合はこれは悪いことです!):
cat /etc/udev/rules.d/70-persistent-net.rules | grep "PCI device" | perl -pe 's/.*\((\w+)\).*/$1/g'| uniq
私の場合、それigb
はですので、それだけを出力します。
sudo rmmod igb
(igb
手順1から取得したカードドライバーに置き換えます。次に、/etc/udev/rules.d/70-persistent-net.rules
必要に応じて編集し、を使用してモジュールを再度ロードします。再び自分のものにmodprobe igb
置き換えigb
ます。
複数のネットワークの場合
cat /etc/udev/rules.d/70-persistent-net.rules | grep "PCI device" | awk '{print $NF}'|sed -e 's/(//g' -e 's/)//g'| uniq > /tmp/listnet
rm -rf /etc/udev/rules.d/70-persistent-net.rules
for i in $(cat /tmp/listnet); do rmmod $i; modprobe $i;done
service network restart
rm -rf /tmp/listnet