Java“设备上没有剩余空间”但磁盘上有足够的空间?

Posted

技术标签:

【中文标题】Java“设备上没有剩余空间”但磁盘上有足够的空间?【英文标题】:Java "No space left on device" but there is enough space on disk? 【发布时间】:2017-03-31 12:18:30 【问题描述】:

我正在尝试在 java 程序中将文件写入文件系统,但是当 df -h(和 df -i)另有说明时,它会失败并抛出“设备上没有剩余空间”的异常。

这是df -h的输出:

Filesystem      Size  Used Avail Use% Mounted on
udev            5.9G  4.0K  5.9G   1% /dev
tmpfs           1.2G  1.4M  1.2G   1% /run
/dev/sda5       156G  139G  9.1G  94% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
none            5.0M     0  5.0M   0% /run/lock
none            5.9G  105M  5.8G   2% /run/shm
none            100M   28K  100M   1% /run/user
/dev/sda2       105G  102G  2.7G  98% /media/sam/System 
/dev/sda3       176G  163G   14G  93% /media/sam/Sam //where I'm trying to write

这是 df -i 的输出:

Filesystem       Inodes    IUsed    IFree IUse% Mounted on
udev            1523763      552  1523211    1% /dev
tmpfs           1526458      584  1525874    1% /run
/dev/sda5      10362880  4750381  5612499   46% /
none            1526458        2  1526456    1% /sys/fs/cgroup
none            1526458        3  1526455    1% /run/lock
none            1526458      191  1526267    1% /run/shm
none            1526458       26  1526432    1% /run/user
/dev/sda2       3832820  1045155  2787665   28% /media/sam/System 
/dev/sda3      35769712 22090147 13679565   62% /media/sam/Sam //where I'm trying to write

我正在尝试将文件写入 /media/sam/Sam/。我尝试重新启动我的机器,再次卸载和安装,但没有运气。同样在 Java 中,如果我在 /media/sam/Sam 中创建一个新文件对象并打印使用信息,它会打印 0,如下所示:

File tweetFile = new File( "/media/sam/Sam/" + "test"  + ".txt" );
System.out.println( tweetFile.getTotalSpace()  ); // prints 0
System.out.println( tweetFile.getFreeSpace()/1000000000 ); // prints 0
System.out.println( tweetFile.getUsableSpace()/1000000000 ); // prints 0

非常感谢任何帮助,因为我一整天都在尝试解决这个问题并且非常沮丧。

编辑 这是抛出的确切消息:

Exception: java.io.IOException: No space left on device
java.io.IOException: No space left on device
    at java.io.UnixFileSystem.createFileExclusively(Native Method)
    at java.io.File.createNewFile(File.java:1006)
    at utils.FileUtil.writeToFile(FileUtil.java:64)
    at experiments.usinglists.tagbasedeval.ToindexTweetsForAUser.main(ToindexTweetsForAUser.java:36)

【问题讨论】:

你能打印出确切的错误信息吗 你的应用是否有写入目标目录的权限? @ScaryWombat 请查看编辑。 @EricM。它确实并且工作正常。面对如果我尝试创建一个文件 - 触摸测试 - 在终端中它也会失败并说“触摸:无法触摸‘测试’:设备上没有剩余空间”。 那么,说这个问题与Java编程无关是不是对了?听起来这个问题应该在 superuser.com 上问,因为它不是关于编程,而是关于使用 Unix 系统。 【参考方案1】:

在我的例子中,Java 进程使用默认的 java.io.tmpdir(在我的例子中是 /tmp)使用临时目录运行。

我希望它可以在另一个分区中工作。所以也许改变默认值:

-Djava.io.tmpdir=/media/sam/Sam/tmp

【讨论】:

你所描述的显然是一个不同的问题。

以上是关于Java“设备上没有剩余空间”但磁盘上有足够的空间?的主要内容,如果未能解决你的问题,请参考以下文章

Windows 上的 GCC 设备上没有剩余空间

PostgreSQL |设备上没有剩余空间

提示空间已满,但df –h还有空间

提示空间已满,但df –h还有空间

提示空间已满,但df –h还有空间

提示空间已满,但df –h还有空间