Почему я получаю ошибку Fsync failed?

Я пытаюсь следовать инструкциям документации MongoDB , чтобы правильно настроить LTH для машины, на которой работает MongoDB.

Одна из инструкций состоит в создании сценария, который запускается при загрузке.К сожалению, ни предложенный скрипт, ни аналогичный код , переписанный как служба systemd , не работают.

При отладке проблемы я обнаружил еще одну. Когда я выполняю:

root@demo:/# echo never > /sys/kernel/mm/transparent_hugepage/enabled

, команда выглядит успешно, но файл остается неизменным, поэтому, если я затем запустил:

root@demo:/# cat /sys/kernel/mm/transparent_hugepage/enabled

, он вернет исходное содержимое:

always madvise [never]

Я попытался изменить файл с помощью vim ; при попытке сохранить файл жалуется, что Fsync не удалось . Хотя эта ошибка была задокументирована , в моем случае достаточно места на диске на / (используется 20%, доступно 7 ГБ).

Я запускаю команду в ] sudo режим, и права доступа к файлам кажутся правильными:

-rw-r--r-- 1 root root 4096 ...

Каталог / sys также не смонтирован в режиме только для чтения , как показано:

root@demo:/# grep sysfs /proc/mounts
sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0

Что здесь происходит?

0
13.04.2017, 15:22
1 ответ

sysfs , файловая система, обычно монтируемая в / sys , представляет собой специальную виртуальную файловую систему для взаимодействия с ядром Linux.

Файлы в нем не являются настоящими файлами, они представляют собой структуры данных в ядре и поддерживают только довольно простые методы доступа. При чтении такого файла ядро ​​запрашивает информацию. Запись в такой файл указывает ядру изменить настройку или выполнить действие.

Вот почему vim не работает. Он пытается получить доступ к виртуальным файлам способами, оптимизированными для реальных файлов, и это не поддерживается в sysfs .

Ваша первая команда

root@demo:/# echo never > /sys/kernel/mm/transparent_hugepage/enabled

уже была успешной!

Многие «файлы» sysfs, включая / sys / kernel / mm / transparent_hugepage / enabled , не только печатают текущие настройки при чтении, но и выводят все возможные режимы и используют скобки для описания того, какой из вместо этого активен несколько режимов.

В вашем случае никогда не заключен в скобки, поэтому режим, который вы пытались активировать с помощью echo , уже активен:

always madvise [never]

Если вас интересует, как sysfs работает, вы можете узнать больше об этом в Википедии или в документации ядра Linux .

2
28.01.2020, 02:34

Теги

Похожие вопросы