在Linux中查看磁盘总容量,需区分两个概念:一是物理块设备总量(含未分区、未格式化空间),二是文件系统总量(已挂载、可使用空间)。不同场景应使用不同命令。

一、lsblk:列出块设备总容量(最直观)
lsblk 会列出所有块设备及其总大小(SIZE 列即为设备物理总量,包含未分配空间)。直接执行 lsblk 即可;也可指定输出列:lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT。若要以字节精确显示:lsblk -b;输出为树形结构,便于查看磁盘与分区、多路径(multipath)的归属关系。
二、df:查看文件系统总空间与使用情况
df 用于查看已挂载文件系统的总量、已用、可用空间。常用参数:df -h(按 1024 进制以人类可读方式显示)、df -H(按 1000 进制,与硬盘厂商标称一致)、df -T(显示文件系统类型)、df -a(包含虚拟/伪文件系统)、df -i(查看 inode 使用量)、df --total(在末尾汇总合计行)。推荐组合:df -Th 或 df -hT --total。注意:df 统计的是文件系统层面,未挂载或未格式化的空间不显示。
三、fdisk / parted:读取分区表中的磁盘总量
fdisk -l 会列出所有磁盘及分区表,输出形如 “Disk /dev/sda: 500 GiB, 536870912000 bytes, 1048576000 sectors”,可直接看到每块盘的总容量、字节数与总扇区数,需要 root 权限。parted -l 同样可列出磁盘总大小与分区表类型(GPT/MBR),且对 GPT 与大容量磁盘(超过 2TiB)支持更好。这两个命令显示的是设备原始总量,与是否分区/格式化无关。
四、/proc/partitions 与 blockdev:脚本化精确读取
读取内核接口 cat /proc/partitions 可获取块设备大小(单位为 1024 字节块),适合脚本解析,但该数值是内核视角,可能不含未识别的设备。使用 blockdev --getsize64 /dev/sda 可获取指定设备的精确字节数;也可用 blockdev --report /dev/sda 查看包括大小在内的详细报告。此外,cat /sys/block/sda/size 返回扇区数(默认 512 字节/扇区),乘以扇区大小即为总字节。
五、特定存储与硬件级工具
对于 NVMe SSD,nvme list(属于 nvme-cli 包)可直接列出型号与总容量;SAS/SATA 可用 smartctl -a /dev/sda(属于 smartmontools 包)查看 SMART 信息中的用户容量与型号。lshw -class disk、hwinfo --disk、inxi -D 可汇总硬件级磁盘信息。企业级存储(如 RAID 卡/分布式存储)应使用厂商 CLI(如 storcli、megaraid、ceph status 等)查看逻辑盘总量。
六、易错点与专业建议
1)du 与 df 的区别:du 统计目录/文件实际占用块大小,df 统计文件系统整体空间,二者因 inode、保留块、删除未释放的文件句柄可能不一致;排查“磁盘未满但 df 显示 No space left”时,应先用 df -i 检查 inode 耗尽,再用 lsof | grep deleted 查找已删除但未释放的进程占用。
2)容量单位差异:GiB 为 1024 进制(df -h/lsblk 默认),GB 为 1000 进制(df -H 及厂商标称),同一块 512GB 硬盘在系统中约显示为 476.8GiB,属正常现象。
3)权限要求:lsblk、df、/proc/partitions 普通用户即可执行;fdisk、parted、blockdev、smartctl 等需 root 或通过 sudo 提权。
4)容器与云环境:容器内 df 看到的是宿主机文件系统统计,并不代表容器自身配额;云盘(如 AWS EBS、阿里云云盘)应结合云平台控制台或元数据接口确认磁盘总量与挂载状态。
总结:快速看总量用 lsblk;看可用空间用 df -Th;看底层原始容量用 fdisk -l 或 parted -l;脚本精确取值用 /proc/partitions、/sys/block 或 blockdev;硬件级信息用 smartctl/nvme list。

查看详情

查看详情