如何检查写入失败的原因?

如何检查写入失败的原因?

如果我要调试机器上的服务并确定写入失败,我该如何检查写入失败的原因?

我知道 C 中的系统调用将返回 -1,然后我们可以检查哪个常量int errno包含(EINVAL,等等)。但是,如果我无法检查这一点,我该如何检查错误的原因?在这种情况下,dmesg 会在块设备级别显示错误吗?

答案1

如果写入失败与磁盘 I/O 错误有关,因此与磁盘故障有关,那么您很可能会在输出中找到来自内核的错误消息dmesg

但如果没有这样的症状,您应该首先排除最简单的解释:

  • 该进程是否被授权执行它正在尝试的写入操作?换句话说,它是否对它正在尝试写入的内容具有写入权限?如果正在使用 SELinux,还请检查目录中的审计日志/var/log/audit/
  • 文件系统是否已满?
  • 文件系统是否没有可用的 inode(仅适用于没有动态 inode 创建的文件系统,例如 ext2/ext3/ext4 系列)?

相关内容