Het bestand /etc/udev/rules.d/70-persistent-net.rules
wordt automatisch gegenereerd op een Linux-systeem met udev, als het niet bestaat, tijdens herstart. Maar ik zou graag willen weten hoe ik dit regelbestand (met een commando) kan maken zonder de server opnieuw op te starten.
Ik was een tijdje aan het googlen en ontdekte dat het regelsbestand wordt gegenereerd door dit script:
/lib/udev/write_net_rules
Het is echter onmogelijk om dit script vanaf de opdrachtregel uit te voeren, aangezien (ik neem aan) het wil worden gestart door udev, met een aantal omgevingsvariabelen correct ingesteld. Als u het handmatig start, wordt de foutmelding “missing $ INTERFACE” afgedrukt. Zelfs als ik de env-variabele INTERFACE = eth0 instel voordat het script wordt gestart, wordt nog steeds de fout “missing valid match” afgedrukt. Om nog maar te zwijgen van het feit dat ik twee interfaces heb (eth0
en eth1
) en ik wil dat het regelsbestand voor beide wordt gegenereerd.
Ik dacht er ook aan om udev-evenementen als deze te activeren, in de hoop dat het script vanuit udev zelf start, maar er verandert niets:
udevadm trigger --type=devices --action=change
Dus, weet iemand dat hoe de persistente netregels in het bestand /etc/udev/rules.d/70-persistent-net.rules
opnieuw te genereren zonder opnieuw op te starten?
Opmerkingen
Answer
Volgens man pagina --action=change
is de standaardwaarde voor udevadm
.
-c, --action=ACTION Type of event to be triggered. The default value is change.
Daarom kunt u beter --action=add
proberen. Het zou moeten helpen:
/sbin/udevadm trigger --type=devices --action=add
Reacties
- intel_rapl: geen geldige rapl-domeinen gevonden in pakket 0
Answer
In Ubuntu Server 16.04LTS bestaat de 70-persistent-net.rules niet.
alles wat ik deed, was:
ln -s /dev/null /etc/udev/rules.d/80-net-setup-link.rules
Maak vervolgens het bestand met
sudo vi /etc/systemd/network/10-internet.link
en voeg het volgende toe
[Match] Path=pci-0000:(your device mac address) [Link] Name=eth0 (or whatever you want to name it)
:wq
om het bestand op te slaan
start vervolgens opnieuw op en pas je / etc / network / interfaces-bestand aan. Start vervolgens opnieuw op.
Opmerkingen
- De vraag is " Hoe 70-persistent-net.rules opnieuw te genereren zonder opnieuw op te starten? " Je antwoord bevat twee keer opnieuw opstarten. Hoe is dit een antwoord op de vraag?
Antwoord
Ik had hetzelfde probleem, maar ik merkte dat ik kon nog steeds de interfaces zien in de ip addr
lijst. Ik heb het volgende gebruikt (als root):
# ip addr # to get my mac addresses # export INTERFACE=eth0; export MATCHADDR="xx:xx:xx:xx:xx:xx"; /lib/udev/write_net_rules # replace the 00"s with the real mac addr
Herhaal voor elke interface. Dit werd gebruikt om mijn bestand te “herstellen”. (Opmerking: één aanroep zal alle interfaces weergeven + hernoemen voor overeenkomende, dus ik raad je aan om het uitvoerbestand na één aanroep te bekijken)
Er zijn zeker verschillen tussen besturingssysteem en huidige UDEV-implementaties en ondersteuningsscripts . Merk op dat ik CentOS 6.8 gebruikte toen ik dit met succes deed.
Credit – ik verwees meestal naar deze site. Er is een opmerking een paar threads verderop die praten over het aanpassen van het script, maar ik gaf er de voorkeur aan om omgevingsvariabelen zoals het was schoner: https://access.redhat.com/discussions/1240213
Reacties
- Crap – wacht. Ik ' m sorry, dat was de opdracht die niet werkte. Ik moet het antwoord bijwerken met de stap die ik deed
- Oké, ik ' heb bijgewerkt naar hoe ik de mijne heb gerepareerd. Ik hoop dat het werkt als het van toepassing is op jouw situatie.
70-persistent-net.rules
noch de/lib/udev/write_net_rules
script. Daarom kan ik ' niet controleren, maar vermoedelijk is de variabele$INTERFACE
in het script zelf ingesteld. Hoogstwaarschijnlijk wordt het aangenomen als argument. Kunt u ons de inhoud van het script laten zien?$INTERFACE
. Er zijn veel meer variabelen die eenvoudigweg worden gebruikt, nooit worden verklaard. Het ' is omdat het wordt aangeroepen door udev, en udev stelt alle env-variabelen in voordat het script bij het opstarten wordt uitgevoerd.