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

如果我要在一台机器上debugging一个服务,并且确定写入失败了,我怎么能检查写入失败的原因?

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

如果写入失败与磁盘I / O错误相关,那么对于发生故障的磁盘,则很可能在dmesg输出中发现来自内核的错误消息。

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

  • 进程是否被授权执行正在尝试的写入操作? 换句话说,它是否有写权限的东西,它试图写? 如果正在使用SELinux,请检查/var/log/audit/目录中的审计日志。
  • 文件系统是否已满?
  • 文件系统是否有空闲的inode(仅适用于没有dynamicinode创build的文件系统,如ext2 / ext3 / ext4系列)?