KamoCRM

Il file swap era più piccolo del controllo che lo misura

FixKlusterServices
Shipped
23 settembre 2026 alle ore 19:17 UTC
Author
Kamo
Commit
4673e45

Con l'atterraggio di riavvio, il primo computer è venuto con il curriculumConfigurato vero e fermato sul precondizione successiva — che risulta insoddisfacente per costruzione: swapBytes 2095468544 l'area USABLE, da /proc/swaps swapNeedededBytes 2095474483 int(MemTotal * 1.05) ─ ─ ─ a breve da 5,939 di un file 2 GB disponibilità() misura l'area mkswap lasciato utilizzabile. ensure swap ha assegnato il file esattamente al numero che l'area è confrontata contro, e mkswap prende una pagina intestazione e gira il resto verso il basso intere pagine — quindi l'area utilizzabile è sempre a pochi KB di distanza dal proprio obiettivo. Poi ensure swap i primi giri su `have == want bytes`, quindi non cresce mai, e swapLargeEnough rimane falso per sempre. Il file è ora assegnato con un margine, e il margine è di 16 MiB piuttosto che l'unica pagina mkswap necessità, perché MemTotal non è una costante: il kernel esclude quale firmware e la riserva initrd, e questo spostato di 5.6 KB tra due stivali di questa stessa VM. Un margine misurato nelle pagine lascerebbe un computer un kernel aggiorna lontano da non dormire mai più. Il ritorno anticipato è ora `have >= target`, non `=`. L'uguaglianza significava un wobble MemTotal in entrambi direzione rewrote un file 2 GB su un volume Longhorn su una macchina che era già bene. Anche qui, perché entrambi sono stati trovati dalla stessa indagine: Il riavvio è ora inseguito dal guardiano inattivo piuttosto che da chi capita di chiamare /prepare-sleep. Entrambi i momenti che sembrano quelli giusti sono sbagliati. Il filetto di avvio dell'agente viene eseguito prima computeservice ha spinto qualcosa, quindi non c'è ancora nulla da proteggere. E /prepare-sleep non è chiamato da computeservice a tutti — il metodo client esiste e non ha caller; il vero chiamante è un runcmd in cloud-init.userdata.yaml, che spara nel MIDDLE di provisioning. Quindi la domanda è: semplicemente riascoltato ogni trenta secondi dal guardiano che era già inquinante, recintato sul provvedimento push essendo atterrato e non c'è alcuna sessione desktop. Quel secondo cancello è più forte che sembra: una sessione xrdp supera una disconnessione, quindi un elenco vuoto significa che nessuno ha ancora effettuato l'accesso o tutti si sono registrati, non solo che nessuno è alla tastiera. Rifiuti log una volta per una ragione distinto. Mai silenziosa, e non duemila linee identiche al giorno. Un `systemctl hibernate` rifiutato ora raggiunge la rivista. Sul successo il comando non ritorna mai, quindi il solo cosa può mai stampare è il motivo per cui ha detto no — e che è andato a DEVNULL, lasciando computeservice a notate dieci minuti dopo che un computer "non è andato a dormire quando chiesto" senza motivo da nessuna parte. run forever è diviso in loop e tick(), quindi le decisioni possono essere testate. 43 test.

All changes

Like what you see shipping?

All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.

Start Free ForeverView Pricing