답변:
이 웹 페이지에서 :
/etc/rc.local
현재 런레벨이 완료된 후 명령이 실행되는 곳에 ethtool 명령을 입력 할 수 있지만 (이상은 배포판에 상응하는) 가능합니다. 네트워크 서비스는 실행 수준에서 시작되었을 수 있으며 ethtool 명령은 네트워크 트래픽을 방해하는 경향이 있습니다. 인터페이스가 시작될 때 명령을 적용하는 것이 더 바람직합니다.
CentOS의 네트워크 서비스는이를 수행 할 수 있습니다. 스크립트 /etc/sysconfig/network-scripts/ifup-post
의 존재를 확인 /sbin/ifup-local
하고, 존재하는 경우, 매개 변수로 인터페이스 이름으로 실행 (예 : /sbin/ifup-local eth0
)
SELinux 컨텍스트를 설정하여 터치하여이 파일을 /sbin/ifup-local
실행 가능하게 한 다음 편집기에서 열 수 있습니다.chmod +x /sbin/ifup-local
chcon --reference /sbin/ifup /sbin/ifup-local
모든 인터페이스에 동일한 설정을 적용하는 간단한 스크립트는 다음과 같습니다.
#!/bin/bash
if [ -n "$1" ]; then
/sbin/ethtool -G $1 rx 4096 tx 4096
/sbin/ethtool -K $1 tso on gso on
fi
이것은 루프백을 포함하여 모든 인터페이스에 설정을 적용하려고 시도합니다.
인터페이스가 다르면 다른 설정을 적용하거나 루프백을 건너 뛰고 싶다면 case 문을 만들 수 있습니다.
#!/bin/bash
case "$1" in
eth0)
/sbin/ethtool -G $1 rx 16384 tx 16384
/sbin/ethtool -K $1 gso on gro on
;;
eth1)
/sbin/ethtool -G $1 rx 64 tx 64
/sbin/ethtool -K $1 tso on gso on
/sbin/ip link set $1 txqueuelen 0
;;
esac
exit 0
이제 ethtool 설정이 시작될 때 인터페이스에 적용되고, 인터페이스가 시작될 때 네트워크 통신에 대한 모든 잠재적 중단이 이루어지며 서버는 완전한 네트워크 기능으로 계속 부팅 할 수 있습니다.
/ etc / sysconfig / network-scripts / ifcfg- *의 RHEL7의 경우 다음이있을 수 있습니다.
ETHTOOL_OPTS = "-K $ {DEVICE} gso off gro off tso off"
더 많은 옵션이 있다면
ETHTOOL_OPTS = "-K $ {DEVICE} gso off; -K $ {DEVICE} gro off; -K $ {DEVICE} tso off"
ifcfg 파일에 자연스럽게 DEVICE가 정의되어 있어야합니다.
rc.local이나 추가 ifup 스크립트가 필요하지 않습니다. 일반 배포 시스템에서 쉽게 사용할 수 있습니다.
당신은에있는 경우 RHEL7 (또는 모두) 및 사용하는 네트워크 관리자를 대신 을 /etc/init.d/ ,하지 않습니다 작업하여 인터페이스 이후 제안 된 답변을 제어 할 경우 / sbin / ifup을 로컬 (뿐만 아니라 ifdown을-사전 지역을 및 ifdown을 로컬이 ) 실행되지 얻을 않습니다.
대신 스크립트를 /etc/NetworkManager/dispatcher.d/에 넣고 NetworkManager-dispatcher 서비스가 활성화 되어 있는지 확인하십시오
systemctl enable NetworkManager-dispatcher
힌트 : 디스패처는 NetworkManager가 인터페이스를 변경 한 후에 만 실행되며, 실행 중이거나 다른 항목이 없어도됩니다.
Active: inactive (dead)
완전히 괜찮습니다!
또한 스크립트가 다음과 같은지 확인하십시오.
이제 NetworkManager는 두 개의 변수를 디스패처에 전달합니다.
인터페이스가 $ 1 ( eno16777984 , eth0 , ppp0 등)
상태를 유지하는 $ 2 ( up 또는 down )
그리고 / etc / rc와 같이 스크립트를 연결하여 디스패처가 스크립트를 실행하는 순서를 제어 할 수 있습니다.
10 초, 20 초 등 ...
연결 순서가 오름차순
[$ 2 = "up"] 인 경우 10 번째, 20 초
연결이 끊어지면 내림차순으로
[$ 2 = "down"]이면 20 초, 10 초가 표시됩니다
등등.
따라서 OP가 찾고 있던 것을 달성하기 위해 다음과 같은 것을 넣을 수 있습니다.
#!/bin/bash
if [ "$1" = "eth0" && "$2" = "up" ]; then
/sbin/ethtool --offload eth0 tso off
fi
에서 /etc/NetworkManager/dispatcher.d/20-ethtool
그리고 그것을 하루라고 부릅니다.
건배
if [ "$1" = "eth0" ] && [ "$2" = "up" ]; then
나는 결합 된 인터페이스를 사용하고 있었기 때문에 수용 된 답변에 문제가 발생했습니다 (추가하고 싶습니다. 매우 도움이되었습니다).
무슨 일이 일어나고 있는지 알아내는 데 시간이 걸렸지 만 본드를 가져 오거나 본드 슬레이브를 개별적으로 가져올 때 ifup-local
슬레이브 인터페이스에 대한 스크립트가 호출되지 않는다는 것을 알았습니다 . 슬레이브 인터페이스에 할당 된 IP 주소가 없기 때문이라고 가정합니다.
이 문제를 해결하기 위해 필자 가 가져온 인터페이스 ifup-local
의 내용을 구문 분석 /proc/bonding/bondX
하여 슬레이브 인터페이스 이름을 가져 와서 필요한 내용을 수행하도록 수정했습니다.
결국 내 ifup-local
모습은 다음과 같습니다.
#!/bin/bash
if [ -n "$1" ]
then
IFACE="$1"
# If interface is physical
if [[ $IFACE =~ ^eth[0-9]+$ ]]
then
# Do whatever you need for a physical interface here
# example below
/sbin/ethtool -K $IFACE rx off
# Else if it's a bond
elif [[ $IFACE =~ ^bond[0-9]+$ ]]
then
# Do whatever you need for the bond here
# example below
/sbin/ethtool -K $IFACE gso off
# Now deal with slaves
# Pull out slave interface names from /proc/net/bonding/bondX
SLAVES=$(/bin/grep -oP "Slave Interface: \K(eth[0-9]+)" /proc/net/bonding/$IFACE)
for SLAVE in $SLAVES
do
# Do whatever you need with the slave here
# example below
/sbin/ethtool -K $SLAVE tso off gso off
done
fi
fi
주의 사항 : / proc / net / bonding / bondX의 내용은 스크립트를 작성할 때 사용했던 버전과 RedHat / Fedora / CentOS 버전마다 다를 수 있으므로 슬레이브 인터페이스 이름을 가져 오는 명령이 작동하지 않을 수 있습니다 .
나처럼 여기에 온 Ubuntu 사용자의 경우 주제를 벗어난 주제입니다.
우분투에서 교과서 로 수행하는 방법은 / etc / network / interfaces 파일 을 편집 하여 init.d / pre-up -up 등의 스크립트로 읽습니다. 따라서 / etc / network / interfaces 파일은 다음과 같습니다.
auto eth0
iface eth0 inet static
pre-up /sbin/ethtool -s eth0 speed 10 duplex full
그 문서가 말하는 것이지만 작동하지 않습니다 . pre-up 및 up 스크립트의 구문 분석 논리는 약간 날짜가 있으며 인터페이스 파일에서 필요한 설정을 구문 분석하지 않습니다. 몰라 적어도 그것은 나를 위해 작동하지 않았습니다.
따라서 지금까지 해킹이지만 작동하는 솔루션은 여전히 로컬 /etc/rc.local 파일 을 작성 / 편집하고 거기에서 명령을 끝내도록 명령하는 것입니다 (그러나 인터페이스가 이미 끝난 후 1 초 동안 네트워킹이 중단 될 수 있음에 유의하십시오) 제기). 그래서 이것을 갖는 것 :
ethtool -s eth0 속도 10 이중 전이중 자동 켜짐
에 /etc/rc.local에 이상 의도 한대로 인터페이스를 느리게하는 작업 솔루션입니다.
에 우분투 17.04 이상
보다 최근의 Ubuntus는 Systemd를 사용하므로 예를 들어 '시작'실행 수준에 도달 할 때 rc.local 파일이 반드시 실행되는 것은 아닙니다. "rc-local"서비스를 활성화해야합니다. 기본적으로 호환성이 있기 때문에 이전 버전과의 호환성을 위해 다음과 같이 상태를 확인하십시오.sudo systemctl status rc-local
pre-up
, 감사합니다 :)이 TSO 플래그를 설정하기위한 리눅스 민트 17.3에 나를 위해 일한 지침