Jag försöker följa MongoDB-dokumentationsinstruktioner för att konfigurera LTH ordentligt för en maskin kör MongoDB.
En av instruktionerna består i att skapa ett skript som körs vid start. Tyvärr har varken det föreslagna skriptet eller liknande kod skrivits om som en systemd-tjänst fungerar.
När jag felsöker problemet stötte jag på en annan. När jag kör:
root@demo:/# echo never > /sys/kernel/mm/transparent_hugepage/enabled
kommandot verkar köra framgångsrikt, men filen förblir oförändrad, så om jag sedan kör:
root@demo:/# cat /sys/kernel/mm/transparent_hugepage/enabled
returnerar det ursprungliga innehållet:
always madvise [never]
Jag försökte ändra filen med vim
; när jag försökte spara filen klagar den på att Fsync misslyckades Medan det här felet har dokumenterats finns det i mitt fall tillräckligt med diskutrymme på /
(20% används , 7 GB tillgängligt.)
Jag kör kommandot i sudo
-läge och filbehörigheterna verkar korrekta:
-rw-r--r-- 1 root root 4096 ...
/sys
-katalogen är inte heller monterad i skrivskyddat läge , som visas av:
root@demo:/# grep sysfs /proc/mounts sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
Vad händer här?
Svar
sysfs
, filsystemet som vanligtvis är monterat på /sys
, är ett speciellt virtuellt filsystem för gränssnitt med Linux-kärnan.
Filerna i det är inte” i riktiga filer representerar de datastrukturer i kärnan och stöder bara ganska enkla åtkomstmetoder. Att läsa från en sådan fil ber kärnan om information. Att skriva till en sådan fil instruerar kärnan att ändra en inställning eller utföra en åtgärd.
Det är därför vim
misslyckas. Den försöker komma åt de virtuella filerna i sätt optimerade för riktiga filer och detta stöds inte på sysfs
.
Ditt första kommando
root@demo:/# echo never > /sys/kernel/mm/transparent_hugepage/enabled
lyckades redan!
Många sysfs ”filer”, inklusive /sys/kernel/mm/transparent_hugepage/enabled
, skriver inte bara ut den aktuella inställningen vid läsning, men skriv ut alla möjliga lägen och använd parenteser för att beskriva vilka av flera lägen som är aktiva istället.
I ditt fall never
finns inom parentes, så det läge du försökte aktivera med echo
är redan aktivt:
always madvise [never]
Om du är intresserad av hur sysfs
fungerar, du kan läsa mer om det på Wikipedia eller i Linux-kärndokumentationen .