KamoCRM

Le fichier de swap était plus petit que la vérification qui le mesure

FixKlusterServices
Expédié
23 septembre 2026 à 19:17 UTC
Auteur
Kamo
Commit
4673e45

Avec l'atterrissage de redémarrage, le premier ordinateur est venu avec CVConfiguré true et s'est arrêté sur le la prochaine condition — qui s'avère insatisfaite par la construction: swapBytes 2095468544 la zone USABLE, à partir de /proc/swaps (MemTotal * 1,05) C'est pas vrai. courte par 5,939 d'un fichier de 2 Go la disponibilité() mesure la zone mkswap laissé utilisable. assurer swap a attribué le fichier à exactement nombre par rapport à cette zone, et mkswap prend une page d'en-tête et tourne le reste vers des pages entières — de sorte que la zone utilisable est toujours quelques KB à court de sa propre cible. Puis assurer swap les premiers retours sur `have == want bytes`, donc il ne grandit jamais, et swapLargeAssez reste faux pour toujours. Le fichier est maintenant attribué avec une marge, et la marge est de 16 MiB plutôt que la page mkswap besoin, parce que MemTotal n'est pas une constante: le noyau exclut ce firmware et la réserve initrd, et celui déplacé par 5.6 KB entre deux bottes de cette même VM. Une marge mesurée en pages laisserait ordinateur un noyau mise à niveau loin de ne plus jamais dormir. Le retour précoce est maintenant `have >= cible`, pas `==`. L'égalité signifie que MemTotal oscille dans les deux direction réécrit un fichier de 2 Go sur un volume Longhorn sur une machine qui était déjà bien. Aussi ici, parce que les deux ont été trouvés par la même enquête: Le redémarrage est maintenant poursuivi par le veilleur oisif plutôt que par celui qui appelle /prepare-sleep. Les deux moments qui ressemblent au bon sont faux. Le fil de démarrage de l'agent court avant Le service informatique a poussé quoi que ce soit, donc il n'y a encore rien à protéger. Et /préparer-sleep n'est pas appelé par le service de calcul du tout — la méthode client existe et n'a pas d'appelant; le vrai appelant est un roundcmd dans Cloud-init.userdata.yaml, qui brûle dans le MIDDLE de la provision. Donc la question est : simplement demandé toutes les trente secondes par l'observateur qui était déjà élu, l'approvisionnement poussant ayant atterri et sur il n'y a pas de session de bureau. Cette deuxième porte est plus forte qu'il ne semble: une session xrdp survit une déconnexion, donc une liste vide signifie que personne ne s'est encore connecté ou tout le monde s'est déconnecté, pas simplement que personne n'est au clavier. Le refus est enregistré une fois par raison distincte. Jamais silencieux, et pas deux mille lignes identiques par jour. Une `hibernate systemctl' refusée arrive maintenant au journal. En cas de succès, la commande ne revient jamais. La seule chose qu'il peut jamais imprimer est pourquoi il a dit non — et qui est allé à DEVNULL, laissant le service de calcul à remarquer dix minutes plus tard qu'un ordinateur "n'est pas allé dormir quand demandé" sans raison nulle part. run forever est divisé en boucle et tic(), de sorte que les décisions peuvent être testées. 43 essais.

Tous les changements

Comme ce que vous voyez l'expédition?

Commencez avec le plan gratuit et lisez à nouveau cette page dans un mois, puis passez à l’abonnement payant pour bénéficier de toutes les fonctionnalités.

Commencez gratuitement pour toujoursVoir la tarification