Ik “m probeer MongoDB documentatie-instructies te volgen om LTH correct te configureren voor een machine MongoDB draaien.
Een van de instructies bestaat uit het maken van een script dat bij het opstarten wordt uitgevoerd. Helaas zijn noch het voorgestelde script, noch de vergelijkbare code herschreven als een systemd service werk.
Bij het debuggen van het probleem, kwam ik een ander tegen. Wanneer ik het uitvoer:
root@demo:/# echo never > /sys/kernel/mm/transparent_hugepage/enabled
de opdracht lijkt met succes te werken, maar het bestand blijft ongewijzigd, dus als ik het volgende draai:
root@demo:/# cat /sys/kernel/mm/transparent_hugepage/enabled
retourneert het de originele inhoud:
always madvise [never]
Ik heb geprobeerd het bestand te wijzigen met vim
; bij het opslaan van het bestand klaagt het dat Fsync mislukt . Hoewel deze fout is gedocumenteerd , is er in mijn geval voldoende schijfruimte op /
(20% gebruikt , 7 GB beschikbaar.)
Ik voer het commando uit in de sudo
modus, en de bestandsrechten lijken correct:
-rw-r--r-- 1 root root 4096 ...
De /sys
directory is ook niet aangekoppeld in alleen-lezen modus , zoals getoond door:
root@demo:/# grep sysfs /proc/mounts sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
Wat gebeurt hier?
Antwoord
sysfs
, het bestandssysteem dat gewoonlijk wordt gemount op /sys
, is een speciaal virtueel bestandssysteem om te communiceren met de Linux-kernel.
De bestanden erin zijn” t echte bestanden vertegenwoordigen ze datastructuren in de kernel en ondersteunen alleen vrij eenvoudige toegangsmethoden. Bij het lezen van zon bestand wordt de kernel om informatie gevraagd. Door naar een dergelijk bestand te schrijven, wordt de kernel geïnstrueerd om een instelling te wijzigen of een actie uit te voeren.
Daarom mislukt vim
. Het probeert toegang te krijgen tot de virtuele bestanden in manieren geoptimaliseerd voor echte bestanden en dit wordt “niet ondersteund op sysfs
.
Je eerste commando
root@demo:/# echo never > /sys/kernel/mm/transparent_hugepage/enabled
was al succesvol!
Veel sysfs “bestanden”, inclusief /sys/kernel/mm/transparent_hugepage/enabled
, printen niet alleen de huidige instelling wanneer ze gelezen worden, maar print alle mogelijke modi en gebruik haakjes om te beschrijven welke van de meerdere modi actief is.
In jouw geval staat never
tussen haakjes, dus de modus die je probeerde te activeren met echo
is al actief:
always madvise [never]
Als je “geïnteresseerd bent in hoe sysfs
werkt, kunt u er meer over lezen op Wikipedia of in de Linux-kerneldocumentatie .