You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux系统中如何计算磁盘总大小?技术实现相关疑问

Linux磁盘总大小计算相关问题解答

一、直接求和df -h第二列的问题

你提到的把df -h输出里第二列(排除最后一行NFS挂载)数值相加的方式,不能代表物理磁盘的总大小,原因如下:

  • df展示的是挂载的文件系统/逻辑卷的大小,不是物理磁盘。比如输出里的devtmpfs、tmpfs都是内存虚拟文件系统,它们的大小来自内存分配,不属于物理磁盘空间;
  • 同一个物理磁盘可能被划分成多个逻辑卷(比如你的rootvg下的多个_lv),直接相加会重复计算物理磁盘的实际容量;
  • 最后一行的NFS挂载是远程服务器的磁盘,确实应该排除,但前面的虚拟文件系统也必须排除。

二、是否存在未显示的隐藏磁盘空间?

是的,存在几种常见情况:

  • 未挂载的磁盘/分区:df仅显示已挂载的文件系统,未挂载的物理分区或逻辑卷不会出现在输出中;
  • 文件系统预留空间:ext系列等文件系统默认会预留约5%的空间给root用户,用于系统紧急维护,这部分空间不会在Avail列显示,但包含在Size列里;
  • 未初始化的磁盘:新磁盘如果还没分区、创建文件系统,df完全不会展示。

三、按物理磁盘/文件系统拆分显示总大小的命令

1. 查看物理磁盘整体信息

使用lsblk命令,它会按物理磁盘、分区、逻辑卷的层级展示:

lsblk -b -d -o NAME,SIZE

参数说明:

  • -b:以字节为单位显示(避免G/M单位换算误差);
  • -d:仅显示物理磁盘,不展示分区;
  • -o NAME,SIZE:只输出磁盘名称和大小。

示例输出:

NAME     SIZE
sda   214748364800
sdb   107374182400

2. 查看已挂载的非虚拟文件系统大小

如果只想统计物理磁盘上的已挂载文件系统,过滤掉tmpfs/devtmpfs:

df -h -x tmpfs -x devtmpfs

这个命令会排除内存虚拟文件系统,只显示物理磁盘相关的挂载点,此时求和第二列会更接近实际物理使用的文件系统总大小,但仍需注意同一物理盘下多个逻辑卷的重复计算问题。

3. 查看LVM卷组/逻辑卷信息

你的系统使用了LVM(/dev/mapper/rootvg-*),可以用vgs查看卷组总容量:

vgs

输出里的VG Size就是卷组对应的物理磁盘总容量;用lvs可查看每个逻辑卷的大小:

lvs

四、Java程序实现思路

如果要编写Java程序获取磁盘信息,推荐两种方式:

  1. 执行系统命令解析输出:
    • 通过ProcessBuilder调用lsblk -b -d -o NAME,SIZE或df -h -x tmpfs -x devtmpfs,读取命令输出流并解析;
    • 注意处理不同Linux发行版的输出格式差异,优先使用标准化参数(比如-b用字节避免单位解析错误);
  2. 使用Java NIO API:
    • Java 7+的FileSystem和FileStore类可直接获取本地文件系统信息,无需执行系统命令:
      import java.nio.file.FileSystems;
      import java.nio.file.FileStore;
      import java.io.IOException;
      
      public class DiskInfo {
          public static void main(String[] args) throws IOException {
              for (FileStore store : FileSystems.getDefault().getFileStores()) {
                  // 过滤虚拟文件系统
                  if (!store.name().contains("tmpfs") && !store.name().contains("devtmpfs")) {
                      System.out.println("文件系统: " + store.name());
                      System.out.println("总大小(字节): " + store.getTotalSpace());
                      System.out.println("可用大小(字节): " + store.getUsableSpace());
                      System.out.println("------------------------");
                  }
              }
          }
      }
      
    • 这种方式跨平台,但无法直接获取物理磁盘信息,只能获取已挂载的文件系统信息。

内容的提问来源于stack exchange,提问作者fatherazrael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 01:15:51