Помнится мне — где-то здесь речь заходила о ручной установке скорости для сетевого адаптера в Debian (внезапно тег). Там я постарался подробно изложить всю суть проблемы и её решение с помощью команды:
sudo ethtool -s enp6s0f1 speed 1000 duplex full
Вот только она совершенно не гарантирует, что устанавливаемая скорость будет поддерживаться до скончания веков. Zabbix периодически рапортует, что на порту сервера скорость просела до сотки.
Однако, и пихать эту команду в крон, заставляя адаптер менять скорость насильно, даже если этого не требуется, — идея не из лучших. Куда безопаснее использовать скрипт, который проверял бы текущую скорость адаптера и исходя из этих данных запускал ту или иную команду.
Например, в рамках боевого сервера с хранилищем — я применяю такой скрипт:
#!/bin/bash
# Задайте имя сетевого интерфейса вручную #
INTERFACE="enp6s0f1"
# Определение текущей скорости адаптера #
CURRENT_SPEED=$(ethtool "$INTERFACE" | grep "Speed" | awk '{print $2}')
# Печатаем текущую скорость для отладки #
echo "Текущая скорость интерфейса $INTERFACE: $CURRENT_SPEED"
# Преобразование скорости в число (с удалением 'Mb/s' и пробелов) #
# Предполагается, что команда должна вернуть конструкцию вида 1000Mb/s #
# Если у Вас команда из переменной CURRENT_SPEED выдаёт другие данные - внесите изменения #
if [[ $CURRENT_SPEED == *"Mb/s"* ]]; then
CURRENT_SPEED_NUM=$(echo "$CURRENT_SPEED" | tr -d 'Mb/s' | xargs)
else
echo "Ошибка: не удалось распознать скорость адаптера. Получено: '$CURRENT_SPEED'."
exit 1
fi
# Проверка, что CURRENT_SPEED_NUM является числом #
if ! [[ "$CURRENT_SPEED_NUM" =~ ^[0-9]+$ ]]; then
echo "Ошибка: не удалось получить целочисленное значение скорости. Получено: '$CURRENT_SPEED_NUM'."
exit 1
fi
# Если скорость меньше 1000, меняем её #
if [ "$CURRENT_SPEED_NUM" -lt 1000 ]; then
echo "Установка скорости адаптера $INTERFACE в 1000 Мбит/с."
sudo ethtool -s "$INTERFACE" speed 1000 duplex full
else
echo "Скорость адаптера $INTERFACE больше или равна 1000 Мбит/с. Изменений не требуется."
fi
Нужно только указать имя сетевого адаптера в переменной INTERFACE. Ну, и сделать скрипт исполняемым:
sudo chmod +x /path/to/setnetadapterspeed.sh
Разумеется, в системе должна быть установлена утилита ethtool.