我在运行 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 的目录 - 然后您可以向下浏览目录,直到找到一个包含大量文件的目录。