Proxmox Automatyczne aktualizacje VM (qm + vzdump) z testami sieci i auto-przywracaniem

Proxmox: Automatyczne aktualizacje VM (qm + vzdump) z testami sieci i auto-przywracaniem

W tym artykule opisuję prosty (ale bardzo skuteczny) skrypt automatyzujący aktualizacje maszyn wirtualnych na Proxmox VE. Skrypt potrafi:

  • utworzyć backup maszyny (opcjonalnie),
  • uruchomić VM, jeśli wcześniej była wyłączona,
  • zrobić pełny upgrade systemu przez apt i wykonać reboot,
  • zrobić testy sieciowe przed i po aktualizacji,
  • w razie problemów automatycznie przywrócić VM z backupu (opcjonalnie),
  • na końcu wyłączyć VM, jeśli wcześniej była wyłączona.

Skąd pobrać skrypt

Skrypt możesz pobrać bezpośrednio z mojej strony:

soban.pl/bash/upgrade_proxmox_qm.sh

Wymagane katalogi

Zanim uruchomisz automatyzację, utwórz dwa katalogi: jeden na skrypty i jeden na logi:

Instalacja skryptu

Pobierz skrypt do /root/automate_scripts/ i nadaj mu prawa wykonywania:

Jak to działa (w skrócie)

  • Najpierw wykonywany jest backup (vzdump snapshot + zstd) – jeśli backup jest włączony.
  • Jeśli VM była stopped, skrypt ją uruchamia i czeka WAIT_TIME sekund.
  • Następnie wykonywane są testy sieciowe PRZED aktualizacją:
  • Skrypt wykonuje apt update/upgrade/dist-upgrade/autoremove/clean i na końcu robi reboot VM.
  • Po reboocie czeka ponownie (WAIT_TIME) i uruchamia te same testy PO aktualizacji.
  • Jeśli testy nie przejdą i istnieje backup, skrypt wykonuje qmrestore automatycznie.
  • Na końcu (opcjonalnie) wyłącza VM, jeśli wcześniej była wyłączona.

Uruchomienie (manualnie)

Skrypt przyjmuje dokładnie dwa argumenty:

  • VMID – ID maszyny wirtualnej na Proxmox
  • TIME_SEC – czas oczekiwania po starcie/reboocie (w sekundach)

Wskazówka: dobierz WAIT_TIME do realnego czasu bootowania VM oraz czasu trwania aktualizacji. Najczęściej sprawdza się 300 do 1000 sekund (zależnie od maszyny).

Pełny skrypt (do wklejenia / podglądu)

Poniżej wrzucam całość w jednym miejscu – dokładnie w takiej formie, w jakiej jest używana w tej automatyzacji:

Cron (harmonogram tygodniowy + osobne logi per VM)

Poniżej masz przykład crontaba, który uruchamia aktualizacje raz w tygodniu (inna VM każdego dnia roboczego) i zapisuje logi do osobnych plików w /root/logs/.

Edytuj crona roota:

Wklej reguły (komentarze są po angielsku):

Szybkie checklisty / troubleshooting

  • Upewnij się, że root z hosta Proxmox może łączyć się po SSH do VM po hostname (skrypt używa ssh root@<vm-hostname>).
  • Sprawdź czy DNS (albo /etc/hosts) poprawnie rozwiązuje hostname VM na hoście Proxmox.
  • Jeśli apt potrafi pytać o potwierdzenia, zadbaj o tryb non-interactive albo „trzymaj” pakiety, które robią problemy podczas upgrade.

To wszystko. Umieść skrypt w /root/automate_scripts/, wyślij logi do /root/logs/, a cotygodniowa konserwacja maszyny wirtualnej stanie się praktycznie niezauważalna.

Dell WD19/WD19S: aktualizacja firmware na Proxmox/Debian bez timeoutów USB (fwupd + autosuspend fix)


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:

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.

Następnie uruchom aktualizację:

Po update: „pending activation” i wymagane odłączenie kabla

Po udanej instalacji firmware dla WD19/WD19S fwupdmgr często wypisuje komunikat:

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ę:

Na końcu sprawdź status:

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:

Jeśli chcesz, możesz też podejrzeć treść przed uruchomieniem:

Jeżeli nie masz less w systemie:

Skrypt (pełna treść)

Uruchomienie skryptu

Najprościej:

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. fwupdmgr pokaż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.