Après plusieurs tests qui confirment l'expérience d'utilisateurs sur le github bb-qq, je n'ai pas réussi à trouver une méthode robuste pour redémarrer proprement un bond contenant un adaptateur USB Lan, le redémarrage entraînant trop souvent la perte de connexion avec le NAS.
Pour éviter ce problème, j'utilise un script shutdown.sh à l'extinction (tâche planifiée).
Ce script teste la présence d'une interface USB Lan dans le Bond.
Si cette interface est trouvée, le script supprime le Bond et reconstruit le Bond sans l'interface USB lan.
La reconstruction sans l'adaptateur USB avant l'arret assure que le nas sera joignable au prochain redémarrage.
Après redémarrage, pour utiliser l'interface USB dans le bond, il faut recréer le Bond 'Mode actif/sauvegrde'.
Le second script priority_lan.sh a pour but de déclarer en 'active-slave' l'interface la plus rapide du Bond, l'interface USB 2.5Gb dans mon cas.
Sur mon NAS, ce script est lancé par une tache executée toutes les minutes depuis le Planificateur de tâches.
Si la liaison 2.5Gb tombe ou si l'adaptateur est débranché, le Bond 'actif/sauvegarde' passe sur une autre interface Lan, et le script sélectionne la plus rapide.
Lorsque l'adaptateur USB 2.5Gb est rebranché et détecté par DSM, il intègre le Bond 'actif/sauvegarde' d'origine. Le script priority_lan.sh l'utilisera en 'active-slave' puisqu'il est plus rapide.
Pour que l'adaptateur USB 2.5Gb puisse être détecté 'à chaud par DSM' et pas uniquement au démarrage, il faut utiliser
sudo bash /var/packages/r8152/scripts/install-udev-rules comme indiqué dans le Github bb-qq.
Ces scripts sont utilisés avec un bond mode 'actif/sauvegarde' uniquement. Cela ne fonctionnera pas avec un autre type de Bond.
Il faut que le bond soit créé avant d'utiliser les scripts.
IMPORTANT: Le Bond NE DOIT PAS ETRE CRÉÉ avec l'adresse IP de l'adaptateur USB/RJ45
Les scripts que j'utilise:
Code:
#!/bin/sh
# shutdown.sh à lancer par une tache déclenchée evenement: éteindre
# fonctionne uniquement avec Bond actif/sauvegarde
# le script supprime l'adaptateur USB/RJ45 du bond avant extinction du nas
# version avec détection dynamique de l'adaptateur USB
USB_IFACE=$(for iface in $(ls /sys/class/net/ | grep "^eth"); do if readlink /sys/class/net/$iface | grep -q usb; then echo $iface; fi; done)
if [ -n "$USB_IFACE" ]; then
# version synonet
BOND_NAME=$(synonet --la_enum 2>/dev/null | grep "^bond[0-9][0-9]*$")
if [ -n "$BOND_NAME" ]; then
BOND_IFACES=$(synonet --la_get "$BOND_NAME" 2>/dev/null | awk -F': ' '/Slaves:/ {print $2}' | tr ' ' '\n' | grep "^eth" | grep -v "^$USB_IFACE$" | tr '\n' ' ' | xargs)
if [ -n "$BOND_IFACES" ]; then
synonet --la_del "$BOND_NAME"
if [ "$(echo "$BOND_IFACES" | wc -w | tr -d ' ')" -ge 2 ]; then synonet --la_new "$BOND_NAME" 4 $BOND_IFACES; fi
echo "$(date +'%d/%m/%Y %H:%M:%S'): $USB_IFACE retiré du bond avant extinction"
fi
fi
fi
exit 0
Code:
#!/bin/sh
# priority_lan.sh à lancer avec une tâche planifiée définie par l'utilisateur
# fonctionne uniquement avec Bond actif/sauvegarde
# le script privilégie l'interface la plus rapide
# version avec détection dynamique de l'adaptateur USB
if sudo ovs-appctl bond/show bond0 > /dev/null 2>&1; then
# Détection de l'interface USB réseau
USB_IFACE=$(for iface in $(ls /sys/class/net/ | grep "^eth"); do if readlink /sys/class/net/$iface | grep -q usb; then echo $iface; fi; done)
# Priorité à l'interface la plus rapide
BEST=$(for iface in $(sudo ovs-appctl bond/show bond0 2>/dev/null \
| awk '/slave eth/{iface=$2} /enabled/{print iface}' \
| tr -d ':'); \
do speed=$(cat /sys/class/net/${iface}/speed 2>/dev/null); \
echo "$speed $iface"; \
done | sort -rn)
MAX_SPEED=$(echo "$BEST" | head -1 | awk '{print $1}')
ACTIVE=$(sudo ovs-appctl bond/show bond0 2>/dev/null | grep "active slave mac" | sed 's/.*(\(.*\))/\1/')
ACTIVE_SPEED=$(cat /sys/class/net/${ACTIVE}/speed 2>/dev/null)
if [ "$ACTIVE_SPEED" != "$MAX_SPEED" ]; then
NEW_IFACE=$(echo "$BEST" | head -1 | awk '{print $2}')
sudo ovs-appctl bond/set-active-slave bond0 $NEW_IFACE > /dev/null 2>&1
echo "$(date +'%d/%m/%Y %H:%M:%S'): bascule vers $NEW_IFACE ${MAX_SPEED}Mbps"
fi
fi
exit 0