文件中的 JDK11 getFreeSpace 和 getTotalSpace 与 df 不匹配
JDK11 getFreeSpace and getTotalSpace from File is not matching df
我看到 df -h
输出如下
root@vrni-platform:/var/lib# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg-var 110G 94G 11G 91% /var
root@vrni-platform:/var/lib# df -k
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg-var 114756168 98318504 10585300 91% /var
但是如果我从 java 像下面那样做同样的事情
final File dataPath = new File("/var");
final long totalBytes = dataPath.getTotalSpace();
final long usedBytes = totalBytes - dataPath.getFreeSpace();
System.out.printf("Disk utilization: %.2f, Total bytes: %d, Used Bytes: %d", ((double)usedBytes/totalBytes * 100), totalBytes, usedBytes);```
打印如下
Disk utilization: 85.68, Total bytes: 117510316032, Used Bytes: 100678909952
谁能告诉我为什么磁盘利用率会出现这种差异?
环境
- Ubuntu 18.04
- Java - 祖鲁 OpenJDK 11.0.11
正如我在评论中也提到的,主要原因是 getFreeSpace
似乎报告了 DF 'Avail' 或 'Available' 之外的其他内容。通过 DF'1K-blocks' 和 'Used',你也得到 85.68% 的百分比,而通过'1K-blocks' 和 'Available' 得到 91%。还要观察 DF 'Used' 和 'Available'(以及 'Used' 和 'Avail')如何加起来不等于“1K 块”(或 'Size')
根据 user16320675, using getUsableSpace
might be a better method to use than getFreeSpace
. As to the reasons for the difference between '1K-blocks' - 'Used' and 'Available' in df
, it might be better to ask that on https://unix.stackexchange.com/ 的建议。
我看到 df -h
输出如下
root@vrni-platform:/var/lib# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg-var 110G 94G 11G 91% /var
root@vrni-platform:/var/lib# df -k
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/vg-var 114756168 98318504 10585300 91% /var
但是如果我从 java 像下面那样做同样的事情
final File dataPath = new File("/var");
final long totalBytes = dataPath.getTotalSpace();
final long usedBytes = totalBytes - dataPath.getFreeSpace();
System.out.printf("Disk utilization: %.2f, Total bytes: %d, Used Bytes: %d", ((double)usedBytes/totalBytes * 100), totalBytes, usedBytes);```
打印如下
Disk utilization: 85.68, Total bytes: 117510316032, Used Bytes: 100678909952
谁能告诉我为什么磁盘利用率会出现这种差异?
环境
- Ubuntu 18.04
- Java - 祖鲁 OpenJDK 11.0.11
正如我在评论中也提到的,主要原因是 getFreeSpace
似乎报告了 DF 'Avail' 或 'Available' 之外的其他内容。通过 DF'1K-blocks' 和 'Used',你也得到 85.68% 的百分比,而通过'1K-blocks' 和 'Available' 得到 91%。还要观察 DF 'Used' 和 'Available'(以及 'Used' 和 'Avail')如何加起来不等于“1K 块”(或 'Size')
根据 user16320675, using getUsableSpace
might be a better method to use than getFreeSpace
. As to the reasons for the difference between '1K-blocks' - 'Used' and 'Available' in df
, it might be better to ask that on https://unix.stackexchange.com/ 的建议。