Adaptateur USB/Ethernet qui se déconnecte

Rédigé par Alexandre le 2024-07-29

#proxmoxve #auto-hébergement

Introduction

Avec l'arrivée de ma nouvelle infrastructure, j'ai décidé de me créer un réseau dédié au stockage afin de garantir de bonnes performances à mes instances Proxmox VE. L'installation est très simple : un adaptateur USB/Ethernet sur chaque hôte et un switch à pas cher non-connecté à mon réseau domestique. Je verrais dans quelques mois pour passer tout ça en 2.5Gbps, mais pour l'instant le Gigabit semble faire l'affaire.

Malheureusement, je me suis rapidement aperçu que les adaptateurs USB se déconnectaient, aléatoirement et donc perdait l'accès à mon réseau de stockage. Cela est grandement problématique, mais avant de tout passer par la fenêtre, j'ai fait un détour sur le forum de Proxmox. D'après ce que j'ai compris, le noyau Linux déconnecte automatiquement les périphériques USB inutilisés pour limiter la consommation énergétique. Cependant, ici, il semble déconnecter les adaptateurs malgré leur utilisation.

Cet article contient les commandes que j'ai exécutées pour contourner le problème sur mes adaptateurs en désactivant tout simplement leur gestion énergétique par le noyau.

Constat

Dans le syslog de mes hôtes, voici ce que je pouvais voir :

Jun 21 05:51:23 pve3 corosync[1094]:   [KNET  ] link: host: 2 link: 0 is down
Jun 21 05:51:23 pve3 corosync[1094]:   [KNET  ] link: host: 1 link: 0 is down
Jun 21 05:51:23 pve3 corosync[1094]:   [KNET  ] host: host: 2 (passive) best link: 7 (pri: 1)
Jun 21 05:51:23 pve3 corosync[1094]:   [KNET  ] host: host: 1 (passive) best link: 7 (pri: 1)
Jun 21 05:51:26 pve3 kernel: r8152-cfgselector 2-1: USB disconnect, device number 3
Jun 21 05:51:26 pve3 kernel: xhci_hcd 0000:00:15.0: WARN Set TR Deq Ptr cmd failed due to incorrect slot or ep state.
Jun 21 05:51:26 pve3 kernel: r8152 2-1:1.0 enx24f5a2f1e08f: Tx status -108
Jun 21 05:51:26 pve3 kernel: r8152 2-1:1.0 enx24f5a2f1e08f: Tx status -108
Jun 21 05:51:31 pve3 pvestatd[1141]: storage 'pumbaa' is not online

Solution

Identifier le périphérique USB :

$ sudo lsusb
Bus 002 Device 004: ID 13b1:0041 Linksys Gigabit Ethernet Adapter
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Editer la configuration de grub :

$ sudo vim /etc/default/grub

A la fin de la ligne commençant par GRUB_CMDLINE_LINUX_DEFAULT, ajouter :

usbcore.autosuspend=-1 usbcore.quirks=13b1:0041:k

NB : Attention d'adapter 13b1:0041 à se qui a été trouvé via la commande lsusb.

La ligne devrait alors ressembler à ceci :

GRUB_CMDLINE_LINUX_DEFAULT="quiet usbcore.autosuspend=-1 usbcore.quirks=13b1:0041:k"

Mettre à jour grub :

$ sudo update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-6.8.4-3-pve
Found initrd image: /boot/initrd.img-6.8.4-3-pve
Found linux image: /boot/vmlinuz-6.8.4-2-pve
Found initrd image: /boot/initrd.img-6.8.4-2-pve
Found memtest86+ 64bit EFI image: /boot/memtest86+x64.efi
Adding boot menu entry for UEFI Firmware Settings ...
done

Redémarrer :

$ sudo reboot

Au redémarrage, j'ai constaté un changement d'identifiant pour mon périphérique :

$ sudo lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 13b1:0040 Linksys Linksys USB3GIGV1
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Du coup, j'ai ajouté aussi cet identifiant au fichier /etc/default/grub pour obtenir la ligne suivante :

GRUB_CMDLINE_LINUX_DEFAULT="quiet usbcore.autosuspend=-1 usbcore.quirks=13b1:0040:k,13b1:0041:k"

Mettre à jour grub :

$ sudo update-grub

Redémarrer :

$ sudo reboot

Depuis la mise en place de cette solution, je n'ai plus aucune déconnexion de mes adaptateurs.

Références