关于超级用户有很多此类问题,因此,我会尝试快速告诉您它们不是什么:
- 这里不涉及任何应用程序。只有用户和文件系统。
- 我可以以 root 身份登录,并且我的非 root 用户拥有完全 sudo 访问权限。
- 据我所知,这个问题仅存在于一个目录中(尽管如果有足够的时间,我认为我可以在任何目录中重现这种行为 - 更多信息见下文)。
- 没有奇怪的文件系统定制、umask 或奇怪的用户或目录权限方案 —— 我拥有这个系统,并且没有其他人与它交互。
此目录是用 bash 编写的备份脚本的目标路径。这些脚本并不花哨。将文件从其他地方 Rsync 到工作目录。将工作目录中的所有文件打包成 tar,并将生成的存档存储在此目标路径中。非常简单。
假设这是一次全新安装,例如。脚本运行一段时间后,任何用户使用任何方法都无法在目标路径中创建文件。我尝试过 touch、tar、zip 等。都不起作用。tar 和 zip 会因 I/O 错误而失败,touch 运行正常但没有创建文件。在该目标路径中,并且只在该路径中。在文件系统的其他地方,文件创建/修改/删除都运行正常(如果在其他地方发生,则无症状)。
目录上的权限如下所示ls -al
:
drwxrwxr-x.
由我的非 root 用户及其组拥有。
最后,如果我在出现这种情况后重新启动系统,我可以在短时间内再次在该路径中创建文件。但最终,问题再次出现。
当我说我可能在另一个目录中重新创建它时,这是因为我已将目标路径更改为其他路径,并尝试多次修复此问题,并且它最终发生在我尝试过的每个位置。
系统详细信息:
- CentOS 2.6.32-431.3.1.el6.x86_64
- 文件系统是 ext4
- / (lvm) 上有 400GB 可用空间
如果您有任何想法或建议,我将不胜感激。如果需要,我很乐意更详细地讲解,但我想先简短地讲一下。
编辑于 2014 年 10 月 8 日:根据评论的要求添加信息:
$ ls -l
total 0
$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
vg_omega1 1 2 0 wz--n- 464.24g 0
编辑于 2014 年 10 月 7 日:根据评论的要求添加信息:安装结果:
/dev/mapper/vg_omega1-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
无/proc/sys/fs/binfmt_misc type binfmt_misc (rw)
小路:
/home/[username]/savegames/sync
编辑于 2014 年 10 月 6 日:进一步的测试表明,我似乎可以很好地创建子目录和符号链接。此问题似乎仅限于常规文件。
答案1
但是从mount
输出来看,您似乎正在运行 SELinux。根据经验,除非您熟悉 SELinux,否则很难追踪这种“奇怪”的东西。5 年以上的处理经验教会了我一两招。
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
您还提到您正在使用 rsync,而这个问题“消失了,又回来了”。您的 SELinux 选项是否设置为默认强制执行?(重新启动后再次应用),并且您(有时)在重新启动后将 SELinux 置于宽容模式(5 分钟或 10 天等时间)?
sudo getenforce
如果结果是enforcing
,并且如果您确实将 SELinux 设置为默认强制执行,则很有可能您遇到 SELinux 策略拒绝。
如果你运行:
ls -lZ /home/[username]/savegames/sync
上下文标签是什么?应该是类似public_content_t
可能是 的意思user_home_t
,这意味着许多 SELinux 受限进程将被拒绝访问。 中将出现拒绝消息/var/log/audit/audit.log
。
如果 SELinux 确实是罪魁祸首,请参阅CentOS SELinux 故障排除指南找到解决此问题的方法。您可以:
- 将 SELinux 置于宽容模式,看看问题是否消失。将其重新置于强制模式,问题又会再次出现。这不是一个长期的解决方案,所以...
- 重新标记 /home/[用户名]/savegames/sync 文件夹的上下文(为 public_content_t 或类似名称)或
- 创建策略以允许您的脚本/流程与您的文件夹一起工作(audit2allow)。这看起来令人生畏,但并非不可能。
请不要关闭 SELinux。
好吧,话虽如此,如果您是唯一使用该系统的人,并且您不提供网站或 FTP 或任何东西,那么也许可以将其保留在宽容模式,但是好的做法建议您修改您的策略以便为您提供门的钥匙,而不仅仅是将门从铰链上取下并放在一边。