使用 java,如何获取 solaris zfs 文件系统上的可用空间量?
Posted
技术标签:
【中文标题】使用 java,如何获取 solaris zfs 文件系统上的可用空间量?【英文标题】:Using java, how do you get the amount of free space on a solaris zfs file system? 【发布时间】:2009-04-17 10:30:56 【问题描述】:我有一个 SunFire x4140,内置硬盘安装为 /。它还有一个连接的 JBOD,具有 7.6TB 的 HDD 空间,配置为 ZFS 文件系统并挂载为 /app。
我使用 java.io.File.getUsableSpace 或 java.io.File.getFreeSpace 来获取文件系统上的可用空间量。在/(板载)HDD FS 上它可以正常工作。
在 /app(zfs 分区)上,File.getFreeSpace、File.getUsableSpace 和 File.getTotalSpace 都返回 0(零)。有谁知道为什么? java.io.File.getUsableSpace 是否适用于 ZFS,如果可以,如何?
以下显示了相关机器上的 zfs 文件系统:
/usr/sbin/zfs 列表
NAME USED AVAIL REFER MOUNTPOINT
internal 196K 98.4G 1K none
internal/logs 18K 98.4G 18K /logs
j4200-1 442G 7.57T 2.44K none
j4200-1/app 442G 7.57T 153M /app
j4200-1/app@first 442G - 442G -
【问题讨论】:
【参考方案1】:我不知道为什么,但你可以看看libzfs,它把 zfs 命令包装在一个不错的 java API 中
【讨论】:
希望避免编写文件系统特定的代码。但是,如果我们当前的解决方法变得过于笨拙,则可以考虑这样做。 当您明确要求 ZFS 时,我不太明白您为什么忽略此答案。如果您想要一个非文件系统特定的答案,您需要重新表述您的问题。【参考方案2】:df -kP 命令返回可用空间, 但最通用的方法是使用
Apache Commons IO FileSystemUtils.freeSpaceKb("/volume");
它利用 df 以及 Windows 的 dir
【讨论】:
【参考方案3】:“df”命令报告什么?这是否也没有正确报告 zfs 上的可用空间?
【讨论】:
df 100% 有效。我正在使用一种解决方法/hack,我通过 processBuilder 调用 df 并解析可用空间的输出。不漂亮。以上是关于使用 java,如何获取 solaris zfs 文件系统上的可用空间量?的主要内容,如果未能解决你的问题,请参考以下文章