
Jeśli próbujesz aktualizować firmware stacji dokującej Dell WD19/WD19S na Proxmoxie (albo Debianie) przez fwupdmgr, możesz trafić na klasyczny błąd typu Operation timed out podczas etapu Erasing…. W praktyce update sypie się przez zarządzanie energią USB (autosuspend). Poniżej masz prosty, skuteczny fix oraz gotowy skrypt do odpalenia na serwerze/laptopie.
Objawy problemu
Najczęściej w trakcie aktualizacji docka (WD19/WD19S) pojawia się błąd podobny do:
|
1 |
failed to write-firmware: failed to erase bank: failed after 5 retries: failed to SetReport: USB error: Operation timed out [-7] |
Wtedy fwupdmgr może pokazywać urządzenie WD19S jako Update State: Failed albo stale informować o pending activation, ale sam flash nie przechodzi do końca.
Dlaczego tak się dzieje?
Dock podczas flashowania wykonuje długie operacje, a gdy system próbuje oszczędzać energię na USB (autosuspend), kontrolne transfery USB mogą się wysypywać. Efekt: timeout dokładnie na etapie kasowania banku flash (erase bank).
Szybki fix: wyłącz autosuspend USB na czas aktualizacji
Najprostsze rozwiązanie to tymczasowe ustawienie autosuspend na -1 (czyli wyłączenie). To ustawienie obowiązuje do rebootu (chyba że zrobisz je na stałe w kernel cmdline), ale w zupełności wystarczy na czas update.
|
1 |
echo -1 > /sys/module/usbcore/parameters/autosuspend |
Następnie uruchom aktualizację:
|
1 2 |
fwupdmgr refresh --force fwupdmgr update |
Po update: „pending activation” i wymagane odłączenie kabla
Po udanej instalacji firmware dla WD19/WD19S fwupdmgr często wypisuje komunikat:
|
1 2 |
The update will continue when the device USB cable has been unplugged. WD19S is pending activation; use fwupdmgr activate to complete the update. |
Wtedy zrób to w tej kolejności:
- Odłącz kabel USB-C od docka (od laptopa).
- (Opcjonalnie) Odłącz zasilanie docka na 10–15 sekund i podepnij ponownie.
- Podepnij USB-C z powrotem.
- Wykonaj aktywację:
|
1 |
fwupdmgr activate |
Na końcu sprawdź status:
|
1 2 |
fwupdmgr get-updates fwupdmgr get-devices | less |
Gotowy skrypt: install + update + wyłączenie autosuspend (z restore)
Poniżej masz gotowy skrypt, który:
- instaluje
fwupd - odświeża metadane LVFS
- tymczasowo wyłącza autosuspend USB (żeby WD19S nie wywalał timeoutów)
- uruchamia aktualizacje
- przywraca poprzednią wartość autosuspend po zakończeniu (nawet jeśli update się wywali)
Skrypt możesz wkleić ręcznie z artykułu, ale jeśli wolisz szybciej: możesz go pobrać bezpośrednio z:
https://soban.pl/bash/dell_updage.sh
Przykład pobrania i uruchomienia:
|
1 2 3 4 |
cd /root/scripts curl -fsSL https://soban.pl/bash/dell_updage.sh -o dell_updage.sh chmod +x dell_updage.sh ./dell_updage.sh |
Jeśli chcesz, możesz też podejrzeć treść przed uruchomieniem:
|
1 |
curl -fsSL https://soban.pl/bash/dell_updage.sh | less |
Jeżeli nie masz less w systemie:
|
1 2 |
apt update apt install -y less |
Skrypt (pełna treść)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
#!/bin/bash set -euo pipefail # dell upgrade: # - installs fwupd # - refreshes metadata # - runs fwupdmgr update # - TEMPORARILY disables USB autosuspend to avoid WD19/WD19S timeouts # - restores autosuspend setting after update echo "[INFO] Installing fwupd..." apt update apt install -y fwupd echo "[INFO] Refreshing firmware metadata..." fwupdmgr refresh --force fwupdmgr get-updates || true # Save current autosuspend value (if exists) AUTOSUSPEND_PATH="/sys/module/usbcore/parameters/autosuspend" OLD_AUTOSUSPEND="" if [[ -f "$AUTOSUSPEND_PATH" ]]; then OLD_AUTOSUSPEND="$(cat "$AUTOSUSPEND_PATH" || true)" echo "[INFO] Current usbcore autosuspend: ${OLD_AUTOSUSPEND}" else echo "[WARN] autosuspend sysfs file not found: $AUTOSUSPEND_PATH" fi restore_autosuspend() { if [[ -f "$AUTOSUSPEND_PATH" && -n "${OLD_AUTOSUSPEND}" ]]; then echo "[INFO] Restoring usbcore autosuspend back to: ${OLD_AUTOSUSPEND}" echo "${OLD_AUTOSUSPEND}" > "$AUTOSUSPEND_PATH" || true fi } trap restore_autosuspend EXIT # Disable autosuspend to prevent USB timeout during dock firmware erase/write if [[ -f "$AUTOSUSPEND_PATH" ]]; then echo "[INFO] Disabling USB autosuspend (set to -1) to avoid dock update timeouts..." echo -1 > "$AUTOSUSPEND_PATH" fi read -p "Czy chcesz zaktualizowac wszystkie urzadzenia? (y/n): " answer if [[ "$answer" == "y" || "$answer" == "Y" ]]; then echo "[INFO] Running fwupdmgr update..." fwupdmgr update || { echo "[ERROR] fwupdmgr update failed." echo "[HINT] If this is Dell dock (WD19/WD19S), try: unplug USB-C, replug, then run: fwupdmgr activate" exit 1 } echo "[INFO] Update finished." echo "[INFO] If you updated a Dell dock and it says 'pending activation':" echo " 1) Unplug USB-C cable from the dock" echo " 2) (Optional) Unplug dock power for 10 seconds, plug back" echo " 3) Run: fwupdmgr activate" else echo "[INFO] Skipping firmware update." fi echo "[INFO] Done." |
Uruchomienie skryptu
Najprościej:
|
1 2 |
chmod +x dell_updage.sh ./dell_updage.sh |
Najczęstsze pytania i tipy
- Update dalej się sypie? Odłącz wszystkie peryferia od docka (monitory/LAN/USB), zostaw tylko zasilanie i USB-C, zrób hard reset docka (odłącz prąd na 30s) i spróbuj ponownie.
- „pending activation” po update – to normalne dla WD19/WD19S. Musisz wypiąć USB-C, podpiąć ponownie i zrobić
fwupdmgr activate. - To aktualizuje BIOS laptopa? Nie zawsze.
fwupdmgrpokaże osobno „System Firmware” (BIOS/UEFI) i osobno dock. W tym artykule skupiamy się na docku i problemie z USB timeout.
Podsumowanie
Jeśli firmware Dell WD19/WD19S wywala się na Proxmox/Debian podczas Erasing…, to w większości przypadków wystarczy na czas aktualizacji wyłączyć autosuspend USB. Skrypt powyżej robi to automatycznie, a potem przywraca poprzednie ustawienie, żeby system dalej działał normalnie.