文件系统-没有剩余空间错误,但有空间

文件系统-没有剩余空间错误,但有空间

我在运行 Ubuntu 16.04.05 的服务器上遇到了问题。在运行创建了超过 6500 万个文件的 Python 脚本后,我收到一条错误消息,提示没有剩余空间:

12 zip -r 31.zip 31
zip I/O error: No space left on device
zip error: Could not create output file (31.zip)

我在网上找到了一些类似的问题:设备上有空间,但已无剩余空间设备上没有剩余空间,尽管有,但我想我有一个不同的。这两个答案中发布的解决方案对我不起作用。

以下是存储的结构:

➜  12 df -k
Filesystem      1K-blocks      Used Available Use% Mounted on
udev             32963768         0  32963768   0% /dev
tmpfs             6597356      9244   6588112   1% /run
/dev/sda1        32895856  26382068   4819736  85% /
tmpfs            32935580        96  32935484   1% /dev/shm
tmpfs                5120         0      5120   0% /run/lock
tmpfs            32935580         0  32935580   0% /sys/fs/cgroup
/dev/sdb       1031992064 664288464 322578204  68% /media/hdd1
tmpfs             6587116        20   6587096   1% /run/user/118
tmpfs             6587116         0   6587116   0% /run/user/1001

我正在尝试压缩一个文件夹,/media/hdd1其中应该有足够的剩余空间。我尝试压缩的文件夹的尺寸是:

➜  12 du -sh 31
49M     31

编辑:

➜  12 df -i
Filesystem       Inodes    IUsed   IFree IUse% Mounted on
udev            8240942      478 8240464    1% /dev
tmpfs           8246695      617 8246078    1% /run
/dev/sda1       2097152   500872 1596280   24% /
tmpfs           8233895        5 8233890    1% /dev/shm
tmpfs           8233895        6 8233889    1% /run/lock
tmpfs           8233895       16 8233879    1% /sys/fs/cgroup
/dev/sdb       65536000 65536000       0  100% /media/hdd1
tmpfs           8246695       15 8246680    1% /run/user/118
tmpfs           8246695        4 8246691    1% /run/user/1001

答案1

“运行一个创建了超过 6500 万个文件的 Python 脚本后”这是你的问题。

Ubuntu 使用的 ext4 文件系统只有有限数量的所谓“inode”,这是在格式化分区时确定的。文件系统上的每个文件或目录至少需要一个 inode。

现在,如果您创建大量小文件,则可用 inode 的耗尽速度会比可用存储空间的耗尽速度更快。但这两种情况都会导致磁盘看似已满的相同症状。

您将需要删除这些大量的小文件,例如将它们放在不同的驱动器上、放在 zip 文件中,或者将它们全部删除。

不幸的是,据我所知,inode 的数量无法动态更改。如果您确实需要在当前分区上增加更多,则可能需要备份数据并重新格式化所有内容。

有关的:

答案2

正如 ByteCommander 所解释的,您的 inode 存在问题。

解决这个问题的另一种方法是查找正在消耗 inode 的数百万个小文件。

sudo du -a -x -d 1 --inodes /media/hdd1 | sort -nr | head -20

将显示 /media/hdd1 上占用最多 inode 的目录 - 然后您可以向下浏览目录,直到找到一个包含大量文件的目录。

相关内容