![无法在特定目录中创建具有特定名称的文件。“设备上没有剩余空间”](https://linux22.com/image/1622293/%E6%97%A0%E6%B3%95%E5%9C%A8%E7%89%B9%E5%AE%9A%E7%9B%AE%E5%BD%95%E4%B8%AD%E5%88%9B%E5%BB%BA%E5%85%B7%E6%9C%89%E7%89%B9%E5%AE%9A%E5%90%8D%E7%A7%B0%E7%9A%84%E6%96%87%E4%BB%B6%E3%80%82%E2%80%9C%E8%AE%BE%E5%A4%87%E4%B8%8A%E6%B2%A1%E6%9C%89%E5%89%A9%E4%BD%99%E7%A9%BA%E9%97%B4%E2%80%9D.png)
我遇到了一个问题,该过程按照非常具体的文件名方案(例如:“GC000245325.faa_vs_GC00030243234.faa.diamond”)在子目录中生成了大量文件(甚至可能达到数百万个)。
这些名称都是唯一的,但都遵循特定的命名方案。
现在,当需要创建该方案的非常具体的文件名时,该过程突然失败,返回“设备上没有剩余空间”。此外,当我尝试使用´touch``` or
“mv”在该目录中创建该特定名称的文件时,也出现同样的错误。
我检查了文件系统上可用的 inode 数量,发现没有用完。此外,当前文档还指出,除了文件系统上可用的 inode 总数外,单个目录中的文件数量不再有任何限制。此外,最奇怪的是,我可以在该目录中创建任何其他名称的文件。只是不能创建这个非常具体的文件名。
这让我觉得这可能是某种哈希问题,经过一番研究,我发现这篇博文,它建议要么关闭 dir_index,要么将其切换到另一个哈希系统。由于它随后表示切换到另一个哈希系统对他的情况没有帮助,所以我选择将其关闭(我认为缺点可能只是文件搜索时间更长……)
因此现在文件系统通常仍然完好无损,但是现在,在那个特定目录(并且只有那个目录)中,我无法再创建任何文件。现在我收到错误消息Structure needs cleaning
。
现在用谷歌搜索,我只得到提示文件系统已损坏的结果,但事实并非如此。重新打开 dirindex 也可以解决此问题,但我仍然无法在特定子目录中创建特定文件名。
这是怎么回事?如能提供任何关于如何解决此问题的建议,我们将不胜感激...
编辑: 抱歉,缺少以下信息:操作系统是 ubuntu 18.04.4 LTS;使用的文件系统是 EXT4
df -h 的输出:
Filesystem Size Used Avail Use% Mounted on
udev 126G 0 126G 0% /dev
tmpfs 26G 2.9M 26G 1% /run
/dev/sda3 1.8T 218G 1.5T 14% /
tmpfs 126G 0 126G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 126G 0 126G 0% /sys/fs/cgroup
/dev/loop1 98M 98M 0 100% /snap/docker/384
/dev/sda1 696M 6.1M 690M 1% /boot/efi
/dev/sdb1 44T 22T 20T 53% /home
tmpfs 26G 12K 26G 1% /run/user/1000
/dev/loop0 121M 121M 0 100% /snap/docker/423
tmpfs 26G 4.0K 26G 1% /run/user/118
/dev/loop2 94M 94M 0 100% /snap/core/8935
/dev/loop5 94M 94M 0 100% /snap/core/9066
答案1
刚刚遇到了同样的问题。Ubuntu 20.04,ext4,LVM。重启后错误仍然存在。
进程无法在特定位置创建特定文件(但可以创建其他文件,即使在同一个目录中,但不能创建那个特定的文件名)。我可以在父目录中创建文件,但尝试将其移动到位会引发相同的错误。
尝试过:
- 正在搜索保持文件打开的进程(什么也没有,尽管我无法想象有什么东西可以做到这一点)
- 文件系统检查
- e2fsck -apfd(修复、强制修复等)
这很可能是文件系统错误。我最终将目录移到一边,创建一个新目录,在其中创建文件,然后将目录重命名为旧名称。
谜团没有解开,只是绕开了。我在这里发帖,希望我的额外线索能对未来的侦探有所帮助。