新しく作成されたルールが機能するように、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 triggerCentOS 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