Meu sistema está executando 20.04.3 LTS e estou usando-o como um Plex Media Server (entre outros serviços). Estou usando uma rede vinculada para balanceamento de carga adaptável no sistema. Estou esbarrando em um problema com o sistema quando ele recebe uma nova atualização do kernel.
Existem 2 placas de rede no sistema. Um está em um slot (Controlador PCI Gigabit Ethernet RTL8169) e o outro está integrado (Controlador PCI Express Gigabit Ethernet RTL8111/8168/8411). O problema que estou encontrando é que o RTL8111/8168/8411 não gosta do driver r8169 (coisas imprevisíveis acontecerão como não conseguir se comunicar com a internet) então eu tenho que executar os seguintes comandos para desvincular o driver r8169 e vincular o driver r8168:
address=$(lspci | awk '/8168/ {print "0000:"$1}')
echo $address | sudo tee /sys/bus/pci/drivers/r8169/unbind
echo $address | sudo tee /sys/bus/pci/drivers/r8168/bind
Depois de executar esses comandos, o driver aparece corretamente no lshw
comando e não tenho problemas quando o driver correto é definido para a placa correta:
terrance@Intrepid:~$ sudo lshw -C network
*-network
description: Ethernet interface
product: RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
vendor: Realtek Semiconductor Co., Ltd.
physical id: 0
bus info: pci@0000:02:00.0
logical name: eth0
version: 03
serial: c8:3a:35:d6:ec:a0
size: 1Gbit/s
capacity: 1Gbit/s
width: 64 bits
clock: 33MHz
capabilities: pm msi pciexpress msix vpd bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
configuration: autonegotiation=on broadcast=yes driver=r8168 driverversion=8.048.00-NAPI duplex=full latency=0 link=yes multicast=yes port=twisted pair slave=yes speed=1Gbit/s
resources: irq:25 ioport:d800(size=256) memory:fdfff000-fdffffff memory:fdff8000-fdffbfff
*-network
description: Ethernet interface
product: RTL8169 PCI Gigabit Ethernet Controller
vendor: Realtek Semiconductor Co., Ltd.
physical id: 5
bus info: pci@0000:03:05.0
logical name: eth1
version: 10
serial: bc:5f:f4:79:66:fe
size: 1Gbit/s
capacity: 1Gbit/s
width: 32 bits
clock: 66MHz
capabilities: pm bus_master cap_list rom ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd 1000bt 1000bt-fd autonegotiation
configuration: autonegotiation=on broadcast=yes driver=r8169 driverversion=5.13.0-30-generic duplex=full latency=64 link=yes maxlatency=64 mingnt=32 multicast=yes port=twisted pair slave=yes speed=1Gbit/s
resources: irq:20 ioport:e800(size=256) memory:febffc00-febffcff memory:febc0000-febdffff
*-network
description: Ethernet interface
physical id: 1
logical name: bond0
serial: bc:5f:f4:79:66:fe
capabilities: ethernet physical
configuration: autonegotiation=off broadcast=yes driver=bonding driverversion=5.13.0-30-generic duplex=full firmware=2 ip=10.0.0.220 link=yes master=yes multicast=yes
Isso dura por meio de reinicializações até a próxima atualização do kernel. Mas, se eu executar exatamente os mesmos comandos em um script, ele me diz "No such device"
terrance@Intrepid:~/bin$ sudo ./driver_fix.bsh
0000:02:00.0
tee: /sys/bus/pci/drivers/r8169/unbind: No such device
0000:02:00.0
tee: /sys/bus/pci/drivers/r8168/bind: No such device
Qual seria a melhor maneira de tornar isso permanente para que ele faça essa alteração durante a inicialização ou mude apenas quando ocorrer uma atualização do kernel?
Obrigado!
Como se vê, você precisa criar o
unbind
antes de executar abind
linha. Você pode adicionar isso a um script e, em seguida, executar com cron na reinicialização ou outras coisas, como possivelmente systemd.Eu adicionei as seguintes linhas a um arquivo de script:
Em seguida, adicione a seguinte linha a
/etc/crontab
:E agora, quando o sistema é reinicializado, o driver correto é conectado à NIC correta.