Linux中df -h与lsblk显示不一致问题的解决方法

 更新时间:2026年04月14日 09:46:45   作者:Oneslide  
文章记录了在Linux系统中遇到lsblk和df-h显示磁盘容量不一致的问题,并通过排查发现是XFS文件系统未随着磁盘扩容而自动扩展,文章最终通过使用xfs_growfs命令解决了问题,并详细描述了排查过程、问题原因及解决方法,需要的朋友可以参考下

在日常 Linux 运维工作中,我们经常会用到 lsblkdf -h 两个命令查看磁盘信息,但偶尔会遇到一个令人困惑的问题:两者显示的磁盘容量不一致。最近在维护一台 ECS 服务器时,就遇到了这种情况,特此记录排查过程和解决方法,供有同样需求的运维同行参考。

一、问题现象:两者显示差异明显

在服务器上执行 lsblk 命令查看磁盘信息,发现 /dev/sdc 磁盘容量为 215GB(实际购买的是 200GB 云硬盘,因计算进制差异显示为 215GB),且已挂载至 /var/lib/docker 目录。

具体执行结果如下:

[root@ecs-90894794 ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0   40G  0 disk 
├─sda1          8:1    0    1G  0 part /boot
└─sda2          8:2    0   39G  0 part 
  └─klas-root 253:0    0   39G  0 lvm  /
sdb             8:16   0  200G  0 disk 
sdc             8:32   0  215G  0 disk /var/lib/docker
sr0            11:0    1  458K  0 rom  

但当执行 df -h /var/lib/docker 查看该挂载点的实际使用情况时,却发现容量仅为 50GB,已用 70%,与 lsblk 显示的 215GB 相差巨大。

[root@ecs-90894794 ~]# df -h /var/lib/docker
文件系统        容量  已用  可用 已用% 挂载点
/dev/sdc         50G   35G   16G   70% /var/lib/docker

二、问题排查:一步步定位原因

遇到这种差异,首先要明确两个命令的核心区别,才能针对性排查:

  • lsblk:查看的是物理磁盘/分区的硬件容量,反映的是磁盘本身的实际大小,不受文件系统影响;
  • df -h:查看的是文件系统已挂载的可用容量,显示的是文件系统实际可使用的空间,而非磁盘硬件本身的容量。

基于这个区别,排查思路如下:

1. 确认磁盘分区是否完整

首先怀疑是磁盘分区未占满整个物理磁盘,导致 lsblk 显示物理盘容量,而 df 显示分区容量。执行 parted /dev/sdc print 查看分区详情:

[root@ecs-90894794 ~]# parted /dev/sdc print
型号:QEMU QEMU HARDDISK (scsi)
磁盘 /dev/sdc:215GB
扇区大小 (逻辑/物理):512B/512B
分区表:loop
磁盘标志:

编号  起始点  结束点  大小   文件系统  标志
 1    0.00B   215GB   215GB  xfs

从输出可以看到,/dev/sdc 只有一个分区,且分区已占满整个 215GB 磁盘,排除“分区未占满物理盘”的问题。

2. 确认文件系统类型及状态

排除分区问题后,重点排查文件系统。执行df -T /var/lib/docker 查看文件系统类型:

[root@ecs-90894794 ~]# df -T /var/lib/docker
文件系统       类型    1K-块     已用     可用 已用% 挂载点
/dev/sdc       xfs  52403200 36295308 16107892   70% /var/lib/docker

确认文件系统为 XFS,这是关键信息。结合排查结果,最终定位原因:

磁盘已从 50GB 在线扩容至 215GB,分区表已自动同步扩容,但 XFS 文件系统未跟随扩容,仍停留在原来的 50GB 大小

补充说明:XFS 文件系统本身不支持自动扩容,即使底层磁盘/分区扩容,也需要手动执行命令让文件系统识别新增空间。

三、解决方法:一键扩容 XFS 文件系统

由于分区已占满整个物理磁盘,且文件系统为 XFS,只需执行一条命令即可完成扩容,无需停机、不丢失数据,全程在线操作。

核心命令(直接复制执行)

xfs_growfs /var/lib/docker

命令说明

xfs_growfs 是 XFS 文件系统的扩容工具,作用是将文件系统大小扩展至底层分区的最大可用空间。这里直接指定挂载点 /var/lib/docker,工具会自动识别对应的分区和文件系统,完成扩容。

验证结果

扩容完成后,再次执行 df -h /var/lib/docker 查看效果:

[root@ecs-90894794 ~]# df -h /var/lib/docker
文件系统        容量  已用  可用 已用% 挂载点
/dev/sdc        215G   35G  180G   17% /var/lib/docker

此时 df -h 显示的容量与 lsblk 一致,问题彻底解决。

四、常见场景补充(避坑指南)

除了本次遇到的“XFS 文件系统未扩容”场景,df -hlsblk 不一致还有以下两种常见情况,可对应排查:

场景1:分区未占满物理磁盘

表现:lsblk 显示物理盘容量大,parted 查看分区仅占一部分空间。

解决:先通过 parted 调整分区大小(扩大至物理盘100%),再执行对应文件系统的扩容命令(XFS 用 xfs_growfs,ext4 用 resize2fs)。

场景2:文件系统为 ext4 未扩容

表现:与本次场景类似,但文件系统为 ext4。

解决:分区扩容后,执行 resize2fs /dev/xxx(xxx 为分区名,如 /dev/sdc1)即可。

到此这篇关于Linux中df -h与lsblk显示不一致问题的解决方法的文章就介绍到这了,更多相关Linux df -h与lsblk显示不一致内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Linux内核启动参数详解

    Linux内核启动参数详解

    Linux内核在启动的时候,能接收某些命令行选项或启动时参数。当内核不能识别某些硬件进而不能设置硬件参数或者为了避免内核更改某些参数的值,可以通过这种方式手动将这些参数传递给内核。
    2017-10-10
  • 解决linux ftp匿名上传、下载开机自启问题

    解决linux ftp匿名上传、下载开机自启问题

    这篇文章主要介绍了linux ftp匿名上传、下载,开机自启问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • 教你如何搭建一个安全的Linux服务器教程

    教你如何搭建一个安全的Linux服务器教程

    在当前很多php程序都使用了linux服务器,因为php在linux下运行效果更佳,很多大网站采用了linux服务器
    2012-04-04
  • CentOS7增加Swap空间的两种方法

    CentOS7增加Swap空间的两种方法

    当服务器物理内存不足时,增加Swap空间可以作为虚拟内存使用,帮助系统处理内存压力,本文给大家介绍了CentOS7增加Swap空间的两种方法:创建新的Swap文件和调整Swap分区大小,需要的朋友可以参考下
    2025-05-05
  • linux如何根据时间删除文件

    linux如何根据时间删除文件

    这篇文章主要介绍了linux如何根据时间删除文件的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-07-07
  • CentOS8 VNC远程桌面实践

    CentOS8 VNC远程桌面实践

    VNC是一种强大的远程控制工具软件,支持Windows、MAC和Linux系统,本文介绍了VNC的部署步骤,包括安装、配置连接密码、关闭Wayland以及VNC的管理
    2026-01-01
  • CentOS中yum 源的配置与使用详解

    CentOS中yum 源的配置与使用详解

    这篇文章主要介绍了CentOS中yum 源的配置与使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。
    2016-12-12
  • Linux创建交换分区方式

    Linux创建交换分区方式

    交换分区(SwapPartition)在Linux系统中作为内存的补充,当物理内存不够用时,将部分不使用的内存数据移动到交换分区中,交换分区大小应依据系统内存大小确定,通常为内存大小的1-2倍,创建交换分区的方法有两种:使用物理分区创建和使用文件创建内存交换文件
    2026-01-01
  • 通过Linux进程id找到程序路径的三种方法

    通过Linux进程id找到程序路径的三种方法

    这篇文章主要介绍了三种在Linux中通过进程ID(PID)找到程序路径的方法:使用`ls`命令查看`/proc/PID/exe`符号链接,使用`readlink`命令直接获取路径字符串,以及使用`pwdx`命令查看进程的工作目录,需要的朋友可以参考下
    2025-11-11
  • Linux中进程在后台可靠运行的方法总结

    Linux中进程在后台可靠运行的方法总结

    本篇文章主要给大家介绍了Linux中进程在后台可靠运行的方法以及示例代码分析,一起学习参考下吧。
    2017-12-12

最新评论