Gostaria de desativar o descarregamento de segmentação TCP em um servidor CentOS5. Usando o ethtool, o comando é ethtool -K eth0 tso off
No entanto, essa configuração persiste apenas para esta sessão. Como faço para persistir durante as reinicializações?
centos
linux-networking
ethtool
Gus E
fonte
fonte
Respostas:
Nesta página :
Você pode inserir os comandos ethtool
/etc/rc.local
(ou o equivalente da sua distribuição) em que os comandos são executados após a conclusão do nível de execução atual, mas isso não é o ideal. Os serviços de rede podem ter sido iniciados durante o nível de execução e os comandos ethtool tendem a interromper o tráfego de rede. Seria mais preferível aplicar os comandos à medida que a interface é exibida.O serviço de rede no CentOS tem a capacidade de fazer isso. O script
/etc/sysconfig/network-scripts/ifup-post
verifica a existência/sbin/ifup-local
e, se existir, o executa com o nome da interface como parâmetro (por exemplo/sbin/ifup-local eth0
:)Podemos criar esse arquivo com o toque,
/sbin/ifup-local
torná-lo executável,chmod +x /sbin/ifup-local
definir o contexto do SELinuxchcon --reference /sbin/ifup /sbin/ifup-local
e abri-lo em um editor.Um script simples para aplicar as mesmas configurações a todas as interfaces seria algo como
Lembre-se de que isso tentará aplicar as configurações em TODAS as interfaces, mesmo no loopback.
Se tivermos interfaces diferentes para as quais queremos aplicar configurações diferentes ou para pular o loopback, podemos fazer uma declaração de caso
Agora, as configurações ethtool são aplicadas às interfaces quando elas são iniciadas, todas as possíveis interrupções na comunicação da rede são feitas à medida que a interface é criada, e o servidor pode continuar a inicialização com todos os recursos de rede.
fonte
Para RHEL7 em / etc / sysconfig / network-scripts / ifcfg- *, você pode ter:
ETHTOOL_OPTS = "- K $ {DISPOSITIVO} desativa e desativa"
se houver mais opções, use como
ETHTOOL_OPTS = "- K $ {DEVICE} desabilitado; -K $ {DEVICE} desabilitado; -K $ {DEVICE} desabilitado"
você precisa ter naturalmente DEVICE definido no seu arquivo ifcfg.
Não são necessários scripts ifc.rc.local nem extra. Fácil para você em sistemas de implantação genéricos.
fonte
Se você estiver no RHEL7 (ou similar) e usar o Network Manager em vez do /etc/init.d/network para controlar suas interfaces, a resposta proposta não funcionará, já que / sbin / ifup-local (assim como ifdown-pré-local) e ifdown-local ) nunca serão executados.
Em vez disso, coloque seus scripts em /etc/NetworkManager/dispatcher.d/ e verifique se o serviço NetworkManager-dispatcher está ativado
Dica: o despachante só entra em ação quando o NetworkManager faz alterações em uma interface, não precisa estar em execução nem nada, portanto, se o status indicar
tudo bem!
Verifique também se o seu script é:
Agora o NetworkManager passará duas (2) variáveis para o expedidor:
e permite encadear os scripts (assim como / etc / rc ...) para ter algum controle sobre a ordem na qual o expedidor os executará:
O pedido será crescente em uma conexão
e descendo em uma desconexão
e assim por diante.
Portanto, para realizar o que o OP estava procurando, você poderia colocar algo assim:
em /etc/NetworkManager/dispatcher.d/20-ethtool
E termine um dia.
Felicidades
fonte
if [ "$1" = "eth0" ] && [ "$2" = "up" ]; then
Encontrei problemas com a resposta aceita (que, apressadamente, acrescento, achei muito útil) porque estava usando interfaces vinculadas.
Demorei um pouco para descobrir o que estava acontecendo, mas descobri que, ao criar um vínculo, ou mesmo ao criar um escravo de vínculo individualmente, o
ifup-local
script não seria chamado para as interfaces de escravo. Suponho que isso ocorre porque as interfaces escravas não tinham nenhum endereço IP atribuído a elas.Para contornar isso, modifiquei o meu
ifup-local
para analisar o conteúdo da/proc/bonding/bondX
interface criada, se fosse um vínculo, para obter os nomes da interface escrava e, em seguida, fiz as coisas necessárias com elas.No final, eu
ifup-local
parecia o seguinte:Advertência: o conteúdo de / proc / net / bonding / bondX pode ser diferente para versões diferentes do RedHat / Fedora / CentOS do que eu estava usando quando escrevi o script, portanto, o comando para retirar os nomes das interfaces escravas pode não funcionar .
fonte
Fora do tópico, para usuários do Ubuntu que vieram aqui, como eu, isso como uma nota:
No Ubuntu, a maneira mais prática de fazer isso é editar o arquivo / etc / network / interfaces, que por sua vez é lido pelos scripts init.d / pre-up -up, etc. Portanto, um arquivo / etc / network / interfaces pode ter a seguinte aparência:
É o que dizem os documentos, mas não funciona . Pode ser que a lógica de análise nos scripts de pré-up e up esteja um pouco desatualizada e eles não analisem as configurações necessárias no arquivo de interfaces. Não sei. Pelo menos, não estava funcionando para mim.
Portanto, a solução hack-ish, mas que está funcionando no momento, ainda é criar / editar um arquivo local /etc/rc.local e declarar o comando a ser executado lá (mas observe que isso pode interromper a rede por alguns segundos após a interface já ter sido trouxe). Então, tendo isso:
em /etc/rc.local é a solução que funciona para diminuir a velocidade da interface, conforme planejado acima.
No Ubuntu 17.04 e superior
Ubuntus mais recente usa o Systemd e, portanto, o arquivo rc.local não é necessariamente executado ao atingir o nível de execução 'start', por exemplo. O serviço "rc-local" deve estar ativado. Embora pareça estar por padrão, provavelmente por motivos de compatibilidade com versões anteriores - verifique o status com
sudo systemctl status rc-local
fonte
pre-up
directiva trabalhou para mim em Linux Mint 17,3 para definir o sinalizador TSO, graças :)Eu descobri que definir esse tipo de configuração
/etc/network/interfaces
realmente funciona para o Ubuntu (desde que eu o usei para desligarlarge-receive-offload
, mas isso não deveria importar):fonte
Para o Ubuntu, você pode fazer isso adicionando a seguinte linha
/etc/network/interfaces
:o post-up aqui executará a operação especificada após exibir a interface específica.
fonte
Sim, não pode ser feito usando arquivos de configuração no momento. Você pode colocar o comando
/etc/init.d/rc.local
e deve ser feito.Esse arquivo é executado no final da sequência de inicialização e, portanto, é desativado para a interface.
fonte