为什么我会收到 Fsync 失败错误?

为什么我会收到 Fsync 失败错误?

我正在努力追随MongoDB 文档说明为运行 MongoDB 的机器正确配置 LTH。

其中一条指令包括创建一个在启动时运行的脚本。不幸的是,既没有建议的脚本,也没有类似的代码重写为 systemd 服务工作。

在调试这个问题的时候,我又遇到了一个问题。当我执行时:

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

该命令似乎运行成功,但文件保持不变,所以如果我然后运行:

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

它返回原始内容:

always madvise [never]

vim我尝试用;修改文件当尝试保存文件时,它抱怨同步失败。尽管该错误已被记录,就我而言,有足够的磁盘空间/(已使用 20%,可用空间为 7 GB。)

我在模式下运行命令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

这里发生了什么?

答案1

sysfs,通常挂载在 上的文件系统/sys,是一个与 Linux 内核交互的特殊虚拟文件系统。

其中的文件不是真正的文件,它们代表内核中的数据结构,仅支持相当简单的访问方法。从这样的文件中读取会向内核询问信息。写入此类文件指示内核更改设置或执行操作。

这就是vim失败的原因。它尝试以针对真实文件优化的方式访问虚拟文件,但sysfs.

你的第一个命令

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

已经成功了!

许多 sysfs“文件”(包括/sys/kernel/mm/transparent_hugepage/enabled)不仅在读取时打印当前设置,而且打印所有可能的模式并使用括号来描述多个模式中的哪个模式处于活动状态。

在您的情况下,never它位于括号中,因此您尝试激活的模式echo已经处于活动状态:

always madvise [never]

如果您对工作原理感兴趣sysfs,可以阅读更多相关信息维基百科或在Linux 内核文档

相关内容