Maszyna nie chce się wyłączyć: żądanie to nie wyłącznik

Wyłączenie prosi; zatrzymanie wyrywa wtyczkę. Wszystko, co myli w maszynie odmawiającej wyłączenia, bierze się z tego jednego rozróżnienia i z tego, że żądanie potrzebuje kogoś w środku, kto słucha.

AtlasPVE ·

Ten wpis odpowiada na

  • proxmox vm nie wyłącza się
  • proxmox stop czy shutdown
  • proxmox czyste wyłączenie
  • proxmox ups wyłączanie maszyn
  • proxmox vm won't shut down

Naciskasz wyłącz. Zadanie startuje, kółko się kręci, a trzy minuty później maszyna nadal działa. W końcu naciskasz zatrzymaj i umiera natychmiast, co rodzi oczywiste pytanie: dlaczego pierwsze nie zadziałało, skoro drugie ewidentnie potrafi?

To nie są dwa natężenia tej samej czynności. To dwie zupełnie różne rzeczy.

Rozróżnienie, na którym wszystko wisi

Wyłączenie to żądanie. Warstwa wirtualizacji prosi gościa, żeby wyłączył się sam, tak jak naciśnięcie przycisku zasilania w fizycznej maszynie prosi system operacyjny o schludne zamknięcie. Co zrobić z tym żądaniem, decyduje gość.

Zatrzymanie to odcięcie prądu. Zabiera maszynie wirtualnej zasilanie natychmiast, bez żadnej rozmowy. Dokumentacja ostrzega przed tym wprost: zatrzymanie może spowodować utratę danych, więc używaj z rozwagą.

Gdy tylko rozdzielisz te dwie rzeczy, maszyna, która nie chce się wyłączyć, przestaje być tajemnicza. Ona nie odmawia. Nikt w środku nie usłyszał żądania.

Kto ma słuchać

Możliwych słuchaczy jest dwóch, a zdrowa maszyna ma co najmniej jednego.

Obsługa przycisku zasilania w systemie operacyjnym. Na gościu z Linuksem zwykle jest. Na minimalnym obrazie, na urządzeniu przypominającym kontener albo w systemie, który wpadł we wczesną fazę rozruchu lub powłokę ratunkową, może jej brakować.

Agent gościa. Kiedy jest włączony i naprawdę działa, daje warstwie wirtualizacji bezpośredni kanał do środka, i żądanie idzie tą drogą.

Jeśli agent jest wyłączony, a obsługa przycisku brakuje albo nie odpowiada, żądanie wychodzi i nie dociera nigdzie. Warstwie wirtualizacji nie mówi się "nie". Nie mówi się jej nic, co z zewnątrz wygląda dokładnie tak samo i tłumaczy, dlaczego zadanie sprawia wrażenie zawieszonego, a nie nieudanego.

Jeśli twoje maszyny rutynowo wyłączają się zbyt długo, sprawdzenie, czy agent naprawdę działa, jest lepszym pierwszym ruchem niż skracanie limitów czasu.

Potem limit czasu, potem siła

Czekanie ma granicę. Na gościa domyślny limit czasu wyłączenia wynosi 180 sekund; po jego upływie maszyna zostaje zatrzymana siłowo.

Zbiorowe zatrzymanie wszystkiego na węźle ma własny budżet: próbuje czystego wyłączenia, czeka domyślnie do trzech minut, a potem twardo zatrzymuje to, co nadal działa.

Uczciwy opis wyłączenia bez nadzoru brzmi więc tak: poproś grzecznie, poczekaj ustalony czas, potem wyrwij wtyczkę. Jeśli twoja baza danych potrzebuje czterech minut na dopisanie, wartości domyślne już zdecydowały, że dostanie trzy.

Podnieś liczbę, ale nie pomijaj pytania

Kusi, żeby traktować limit czasu jako pokrętło do wyregulowania. Dla maszyny, która naprawdę potrzebuje więcej czasu, podniesienie go jest słuszne.

Ale maszyna, która nie wyłącza się nigdy, choćbyś czekał bez końca, nie ma problemu z limitem czasu, a danie jej dziesięciu minut oznacza tylko, że poczekasz dziesięć minut na to samo wymuszone zatrzymanie. Najpierw ustal, czy ktokolwiek słucha.

Kiedy zadanie wyłączenia już utknęło

Jeśli zadanie wyłączenia wisi, a maszyna musi zejść teraz, istnieje jawny sposób zatrzymania jej z pominięciem trwającego zadania wyłączenia, zamiast ustawiania się w kolejce za nim. Istnieje właśnie dlatego, że przypadek utkniętego zadania jest dostatecznie częsty, by wymagać odpowiedzi.

Używaj go, wiedząc, czym jest: to nadal odcięcie prądu, z tym samym ostrzeżeniem doczepionym.

Przypadek, który zaskakuje ludzi: awaria zasilania

Tu cały tekst przestaje być teoretyczny.

Skrypt na awarię zasilania, wyłączający gości zanim wyczerpią się akumulatory, dziedziczy każdą właściwość powyżej. Wysyła żądania. Goście, którzy nie słuchają, ignorują je. Limit czasu biegnie. Potem wszystko, co nadal działa, zostaje twardo zatrzymane, być może przy już słabym akumulatorze i być może wszystko naraz.

Dwie rzeczy warto sprawdzić, zanim zaufasz takiemu układowi, i obie są tanie:

Czy goście naprawdę odpowiadają na żądanie wyłączenia? Przetestuj jednego, ze stoperem, w zwykłe popołudnie.

Czy łączny budżet mieści się w akumulatorze? Goście wyłączają się po kolei, a limity czasu się sumują. Rząd maszyn, z których każda potrzebuje dwóch minut, to nie jest dwuminutowe wyłączenie.

Plan na awarię zasilania, którego nigdy nie przećwiczono, to plan, który zostanie przećwiczony dokładnie raz: po ciemku, pod presją czasu.

Co robi Atlas

Atlas nie wymyśla trzeciego rodzaju wyłączenia. Poproszenie i odcięcie prądu to dwie rzeczy, które istnieją, a udawanie inaczej byłoby kłamstwem z konsekwencjami.

To, co Atlas robi, to odmowa ich rozmywania. Działanie niszczące mówi, że jest niszczące, zanim je potwierdzisz, więc "zatrzymaj" nigdy nie przychodzi przebrane za nieco stanowczsze "wyłącz". To rozróżnienie jest całym tematem tego tekstu, a panel pokazujący oba jako sąsiednie przyciski o równej wadze już je stracił.

Codzienne podsumowanie niesie drugą połowę: nieplanowany restart jest zgłaszany jako fakt. Maszyna zatrzymana siłą po nieudanym czystym wyłączeniu wygląda następnego ranka dokładnie jak maszyna, która padła. Obie zasługują na zauważenie.

Źródła

Własna dokumentacja Proxmoksa. Po angielsku i to ona ma ostatnie słowo w tej sprawie.

Powiązane wpisy

Jak to wygląda wewnątrz Atlasa?

Przejdź do strony produktu