Via Rhine Nightmare
Данный гайд был написан в начале 2010х, когда я использовал Debian 7 без systemd, и может не отражать текущую ситуацию с Via Rhine!
Мой старый домашний сервер - это не только файлопомойка, сайтики и всякие прочие сервачки, но еще и раздаватель интернета. Wifi раздается с помощью DLINK’овской внутренней карточки на AR922X, а ethernet - с помощью опять же DLINK’овской карточки, но на via rhine. Я могу со всей уверенностью, цинизмом и крепкостью сказать, что via-rhine - убогий чип. И вот почему.
Раз в некоторое количество времени (которое абсолютно рандомно), ядро “теряет” карточку из-за вываливания модуля в Kernel Panic. Причем сетевуха продолжает работать, но больше 137 кбайт/с не выдаст, как бы мы не хотели. rmmod via-rhine && modprobe via-rhine дает лишь временное облегчение, и то на 20% сетевухи (10 Мбит, полный дуплекс). Немного погуглив, я нашел, что это проблема ядер до 3.3.2, вследствие чего я начал искать способ, как же установить ядро посвежее в свой Debian 7.
В backports было найдено ядро 3.9.0, но оно хотело утянуть с собой initramfs-tools и заменить его на dracut (попутно установив некоторые зависимости вроде mdadm, которые сейчас мне вообще ни к чему). Поэтому я пошел другим путем, а именно - путем полной диагностики.
Для начала, после перегрузки модуля, я обнаружил, что:
root@pztrn:~# mii-tool
eth0: negotiated 100baseTx-FD, link ok
eth1: negotiated 10baseT-FD flow-control, link ok
Ок, eth0 (интернет) работает на 100baseTx-FD (100 мбит с полным дуплексом), а eth1 (локалка) работает на 10baseT-FD (10 мбит с полным дуплексом). Это не дело, конечно же, но была найдена команда, которая форсит 100baseTx-FD:
mii-tool -A 100baseTx-FD eth1
Таким нехитрым способом, мы получили опять наши 100 Мбит/с в локалке. Для упрощения я накатал такой вот скрипт:
#!/bin/sh
# Perform full restart of Via Rhine card
iface="eth1"
stop() {
echo "Deconfiguring $iface..."
ifdown $iface
rmmod via-rhine
}
start() {
echo "Reconfiguring $iface..."
modprobe via-rhine
ifdown $iface
ifup $iface
# Force 100Mbps Full-Duplex
echo "Forcing 100Mbps Full-Duplex mode..."
mii-tool -A 100baseTx-FD $iface
}
restart() {
stop
start
}
help() {
echo "Via Rhine restarter."
echo "Usage: via-restart.sh {start|stop|restart}"
}
case $1 in
start)
start
;;
restart)
restart
;;
stop)
stop
;;
*)
help
;;
esac
Поменяйте iface
на свой, и можете использовать :) Скрипт успешно отрабатывает на моем сервере, поэтому нет причин, чтобы он не отработал на вашем.