当目标剩余 31 GB 空间时,mv 失败并显示“设备上没有剩余空间”

当目标剩余 31 GB 空间时,mv 失败并显示“设备上没有剩余空间”

我一直试图将 32.6 GB 的文件移动到外部闪存驱动器上的文件夹中,以释放笔记本电脑 SSD 上的空间。在终端中打开源文件夹(并运行ulimit -S -s unlimited以防止mv出现问题)后,mv *from* /media/[username]/8849-14DB/Screenshots/成功传输了前 5.9 GB。

但是,还剩下 26.7 GB:

mv: cannot create regular file '/media/[username]/8849-14DB/Screenshots/Screenshot from 2022-01-06 06-34-27.png': No space left on device
mv: cannot create regular file '/media/[username]/8849-14DB/Screenshots/Screenshot from 2022-01-06 06-34-30.png': No space left on device
mv: cannot create regular file '/media/[username]/8849-14DB/Screenshots/Screenshot from 2022-01-06 06-34-34.png': No space left on device
mv: cannot create regular file '/media/[username]/8849-14DB/Screenshots/Screenshot from 2022-01-06 06-34-39.png': No space left on device
mv: cannot create regular file '/media/[username]/8849-14DB/Screenshots/Screenshot from 2022-01-06 06-35-23.png': No space left on device

[repeated ad infinitum]

尽管有问题的闪存驱动器不是,实际上超出了空间,如下所示:

  • 我能够成功将测试文件保存到上述闪存驱动器中,并且
  • 驱动器的“属性”窗口和“磁盘”条目均显示它仍有 31.1 GB 的可用空间。

然而,当我尝试使用 GUI 将上述测试文件移动到我试图mv移动几 GB 文件的特定目录中时,我做过收到“设备上没有剩余空间”错误,表明

  • 无论问题是什么,它都与该文件夹有关,并且
  • 这不是一个特定于命令行的问题。

我看了之前的一个问题:文件系统-没有剩余空间错误,但有空间。但是,这个问题的答案对我没有帮助,因为它们与 ext-family 文件系统上可用的 inode 数量有限有关,而就我而言,目标文件系统是 FAT32 格式的闪存驱动器。

我遇到了什么问题导致文件无法传输,我该如何克服它?

编辑:目标目录中有 16,383 个文件。

答案1

Ext4 文件系统并不是唯一对文件数量有限制的文件系统。FAT32 文件系统对单个目录中可存储的文件数量有限制。如果您使用短名称(8 个字符 + .3 个字符的文件扩展名),则限制为 65,534 个文件。但是,如果您使用较长的名称,则名称的每 13 个字节都会存储为单独的目录条目,这会极大地限制目录中可容纳的文件数量。

在你的情况下,看起来每个文件实际上占用了 4 个目录条目,因为你有 16,383 个文件,而 16,383 * 4 是 65,532,这为你带来了正确的达到极限。仔细观察,每个文件名有 39 个字符,也就是 39 个字节:正好是 13 * 3。因此,每个文件名有 3 个目录条目,第四个目录条目用于实际文件内容。

您可以通过以下任一方式解决此问题:

  1. 将驱动器格式化为 NTFS,将文件数量限制为约 40 亿(应该足够了)
  2. 将文件放在不同的子目录中,因为限制在于目录条目的数量,并且您还没有达到文件总数的限制

答案2

扩展4文件系统的索引节点如果您的文件系统包含大量(小)文件,尽管剩余大量磁盘空间(就“可用字节”而言),但它仍可能“已满”,因为它没有剩余的可用 inode。

您可以使用以下方式查看文件系统上的可用 inode

df -i <device/mountpoint>

相关内容