使用 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 文件系统上的可用空间量?的主要内容,如果未能解决你的问题,请参考以下文章

什么是 ZFS文件系统?ZFS概念及特点简介

用FreeBSD10搭建基于ZFS的iSCSI服务

如何在 Solaris 中获取网络接口设备特定文件的列表 [重复]

无法在 Solaris 10 上获取本地颁发者证书

Java:Solaris 上的 AWT [关闭]

ubuntu16.04 ZFS文件系统怎么使用