Я хотел бы отключить разгрузку сегментации tcp на сервере CentOS5. При использовании команды ethtool, ethtool -K eth0 tso off
однако, этот параметр сохраняется только для этого сеанса. Как я могу сделать это через перезагрузки?
15
Я хотел бы отключить разгрузку сегментации tcp на сервере CentOS5. При использовании команды ethtool, ethtool -K eth0 tso off
однако, этот параметр сохраняется только для этого сеанса. Как я могу сделать это через перезагрузки?
Ответы:
С этой веб-страницы :
Вы можете вводить команды ethtool в
/etc/rc.local
(или эквивалент вашего дистрибутива), где команды запускаются после завершения текущего уровня выполнения, но это не идеально. Сетевые службы могут запускаться во время выполнения команд, а команды ethtool, как правило, прерывают сетевой трафик. Было бы предпочтительнее, чтобы команды применялись при запуске интерфейса.Сетевой сервис в CentOS имеет возможность сделать это. Скрипт
/etc/sysconfig/network-scripts/ifup-post
проверяет наличие/sbin/ifup-local
, и если она существует, запускает его с именем интерфейса в качестве параметра (например:/sbin/ifup-local eth0
)Мы можем создать этот файл одним касанием,
/sbin/ifup-local
сделать его исполняемым,chmod +x /sbin/ifup-local
установить его контекст SELinuxchcon --reference /sbin/ifup /sbin/ifup-local
и затем открыть его в редакторе.Простой скрипт для применения одинаковых настроек ко всем интерфейсам будет выглядеть примерно так:
Имейте в виду, что это попытается применить настройки ко ВСЕМ интерфейсам, даже к петле.
Если у нас разные интерфейсы, к которым мы хотим применить разные настройки или пропустить зацикливание, мы можем сделать заявление
Теперь настройки ethtool применяются к интерфейсам при их запуске, все возможные прерывания сетевого взаимодействия выполняются по мере запуска интерфейса, и ваш сервер может продолжать загружаться с полными сетевыми возможностями.
источник
Для RHEL7 в / etc / sysconfig / network-scripts / ifcfg- * у вас может быть:
ETHTOOL_OPTS = "- K $ {DEVICE} gso off gro off tso off"
если больше вариантов, то используйте как
ETHTOOL_OPTS = "- K $ {DEVICE} отключено; -K $ {DEVICE} выключено; -K $ {DEVICE} отключено"
у вас должно быть естественно определено DEVICE в вашем файле ifcfg.
Не нужны ни rc.local, ни дополнительные сценарии ifup. Легко для вас в общих системах развертывания.
источник
Если вы используете RHEL7 (или аналог ) и используете Network Manager вместо /etc/init.d/network для управления вашими интерфейсами, предложенный ответ не будет работать, так как / sbin / ifup-local (а также ifdown-pre-local и ifdown-local ) никогда не будет выполнен.
Вместо этого поместите ваши скрипты в /etc/NetworkManager/dispatcher.d/ и убедитесь, что служба NetworkManager-dispatcher включена
Подсказка: диспетчер включится только после того, как NetworkManager внесет изменения в интерфейс, он не должен быть запущен или что-то еще, поэтому, если статус читается
это совершенно нормально!
Также убедитесь, что ваш скрипт:
Теперь NetworkManager передаст диспетчеру две (2) переменные:
и это позволяет связывать скрипты (как и / etc / rc ...), чтобы иметь некоторый контроль над порядком, в котором диспетчер будет их выполнять:
При подключении порядок будет возрастать
и спускаясь по разъединению
и так далее.
Таким образом, чтобы выполнить то, что ищет OP, вы можете поместить что-то вроде этого:
в /etc/NetworkManager/dispatcher.d/20-ethtool
И назовите это днем.
ура
источник
if [ "$1" = "eth0" ] && [ "$2" = "up" ]; then
У меня возникли проблемы с принятым ответом (который, спешу добавить, я нашел очень полезным), потому что я использовал связанные интерфейсы.
Мне потребовалось некоторое время, чтобы выяснить, что происходит, но я обнаружил, что при установлении связи или даже при индивидуальном поднятии подчиненного
ifup-local
сценария сценарий не будет вызываться для подчиненных интерфейсов. Я предполагаю, что это потому, что подчиненные интерфейсы не имеют назначенных им IP-адресов.Чтобы обойти это, я изменил свой,
ifup-local
чтобы разобрать содержимое/proc/bonding/bondX
для интерфейса, который был вызван, если это была связь, чтобы получить имена подчиненного интерфейса, а затем сделал необходимые вещи с ними.В итоге мой
ifup-local
выглядел следующим образом:Предостережение: содержимое / proc / net / bonding / bondX для разных версий RedHat / Fedora / CentOS может отличаться от того, которое я использовал при написании сценария, поэтому команда для извлечения имен подчиненного интерфейса может не работать ,
источник
Не по теме, для пользователей Ubuntu, которые пришли сюда, как я, это как примечание:
В Ubuntu учебный способ сделать это - отредактировать файл / etc / network / interfaces, который, в свою очередь, читается скриптами init.d / pre-up -up и т. Д. Таким образом, файл / etc / network / interfaces может выглядеть следующим образом:
Это то, что говорят документы, но это не работает . Возможно, логика синтаксического анализа в сценариях pre-up и up немного устарела, и они не анализируют требуемые настройки из файла интерфейсов. Не знаю По крайней мере, это не сработало для меня.
Таким образом, хакерским, но работающим решением на данный момент все еще является создание / редактирование локального файла /etc/rc.local и указание команды, подлежащей выполнению там (но учтите, что это может прервать работу сети на несколько секунд после того, как интерфейс уже был воспитан). Итак, имея это:
в /etc/rc.local - это рабочее решение для замедления интерфейса, как и предполагалось выше.
На Ubuntu 17.04 и выше
Более поздние версии Ubuntus используют Systemd, и, таким образом, файл rc.local не обязательно выполняется при достижении, например, уровня запуска start. Служба rc-local должна быть включена. Хотя, по-видимому, по умолчанию, для обеспечения обратной совместимости, вероятно, - обязательно проверьте его состояние с помощью
sudo systemctl status rc-local
источник
pre-up
меня в Linux Mint 17.3 работала директива для установки флага TSO, спасибо :)Я обнаружил, что настройка этого типа конфигурации на
/etc/network/interfaces
самом деле работает для Ubuntu (если я использовал его для выключенияlarge-receive-offload
, но это не должно иметь большого значения):источник
Для Ubuntu вы можете сделать это, добавив следующую строку в
/etc/network/interfaces
:пост-ап здесь выполнит данную операцию после вызова определенного интерфейса.
источник
Да, это не может быть сделано с помощью файлов конфигурации на данный момент. Вы можете ввести команду,
/etc/init.d/rc.local
и это должно быть сделано.Этот файл выполняется в конце последовательности загрузки, поэтому для интерфейса будет отключен tso.
источник