Igyekszem követni a MongoDB dokumentációs utasításait az LTH megfelelő konfigurálásához a gép számára a MongoDB futtatása.
Az egyik utasítás egy indításkor futó parancsfájl létrehozását tartalmazza. Sajnos sem a javasolt szkript, sem a hasonló kód át lett írva systemd szolgáltatás működik.
A probléma hibakeresésénél találkoztam egy másikkal. Amikor végrehajtom:
root@demo:/# echo never > /sys/kernel/mm/transparent_hugepage/enabled
a parancs Úgy tűnik, hogy sikeresen fut, de a fájl változatlan marad, ezért ha futtatom:
root@demo:/# cat /sys/kernel/mm/transparent_hugepage/enabled
az eredeti tartalmat adja vissza:
always madvise [never]
Megpróbáltam módosítani a fájlt a következővel: vim
; a fájl mentésekor azt panaszolja, hogy az Fsync nem sikerült . Bár ezt a hibát dokumentálták , esetemben elegendő lemezterület van a /
oldalon (20% felhasználva , 7 GB áll rendelkezésre.)
A parancsot sudo
módban futtatom, és a fájlengedélyek megfelelőnek tűnnek:
-rw-r--r-- 1 root root 4096 ...
A /sys
könyvtár sem csak olvasható módban van telepítve , amint az látható:
root@demo:/# grep sysfs /proc/mounts sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
Mi történik itt?
Válasz
, a fájlrendszer, amely általában a /sys
fájlra van telepítve, egy speciális virtuális fájlrendszer, amely a Linux kernelhez kapcsolódik.
A benne lévő fájlok nem” A valódi fájlok a kernel adatstruktúráit képviselik, és csak meglehetősen egyszerű hozzáférési módszereket támogatnak. Ilyen fájlból való olvasás információt kér a kerneltől. Ilyen fájlba való írás arra utasítja a kernelt, hogy változtasson egy beállításon vagy hajtson végre egy műveletet.
Ezért nem sikerül a vim
. Megpróbálja elérni a virtuális fájlokat a valódi fájlokra optimalizált módszerek, és ez nem támogatott a sysfs
oldalon.
Az első parancsod
root@demo:/# echo never > /sys/kernel/mm/transparent_hugepage/enabled
már sikeres volt!
Sok sysfs “fájl”, köztük a /sys/kernel/mm/transparent_hugepage/enabled
, csak akkor nyomtassa ki az aktuális beállítást, amikor elolvassa, de az összes lehetségeset kinyomtatja módokat, és zárójelek segítségével írja le, hogy a több mód közül melyik aktív.
Esetünkben a never
zárójelben található, tehát a echo
már aktív:
always madvise [never]
Ha érdekli, hogy sysfs
működik, erről bővebben a Wikipédián vagy a Linux kern dokumentációjában olvashat. .