分析开发板信息中为啥df -h显示sda11分区挂载只有2GB Size且使用100%,但fdisk -l sda11有37GB size?

发布时间 2023-09-19 16:18:19作者: 合滨

问题点

当使用开发板中的存储设备分区,进而格式化挂载到某个目录上后,使用df&lsblk后发现分区挂载情况和实际的存储器分区信息有差异后,会感到很疑惑,下面介绍遇到的情况:

情况1 使用xml添加分区后发现对应分区格式化&挂载对应设置的系统目录上但分区size Available size&Used之和不相等情况

如在yocto linux工程中对XML表格添加2GB的分区后,重新编译烧录后:


一般看到/mnt挂载路径下,Size != Available + Used,大概相差100多MB,会疑惑为啥有这个100多MB的缺额呢?实际上这个与格式化命令中的mkfs.ext2/3/4中的-m选项有关!

但实际上新添加分区的自身Size大小是没变化的,可以通过fdisk -l查看:

情况1的衍生问题

当对2GB的分区进行格式化会消耗掉存储器自身的100MB Size的存储空间吗?
有什么计算依据计算格式化系统消耗存储空间容量大小呢?

情况2 UFS设备分出37GB Size的分区格式化mount到/data, 但使用df -lh 显示只有2GB size 的容量使用且达到100%!



同问题1一样还是命令输出信息导致的问题,一开始认为是Yocto linux系统做包的XML文件对sda11分区设置存在问题,细想sda11对应于UFS设备的userdata,也就是说类比于eMMC的userdata,其设置值无关具体size!
(为啥eMMC/UFS设备分区时最后一个分区设置为userdata且其size数值设置随意地很?这个真的需要详细分析分析)

分析到这里,可以止损了!不要钻牛角尖了,浪费时间!别人分区这么多次,做包都没啥问题,那么肯定问题在此的可能性不大了!换个思路吧!
那么怎么分析呢?同情况1一样,文件系统层面和逻辑块层面差异找答案!
最终在网上找到相关点:
lsblk --- 查看block Device,逻辑磁盘大小;
df --- 查看file system,文件系统层的磁盘大小,主要是挂载的文件系统的存储块设备使用情况;
造成这种情况应该是block device容量变大但没有反映到file system层面,对此若存储设备格式化文件系统是ext2/3/4,使用resize2fs命令更新;
这里sda11是ext4文件系统:resize2fs /dev/sda11

这里man resize2fs, 是的,Linux世界有问题找男人!

引申一个问题:
上面使用resize2fs /dev/sda11 一次只将/dev/sda11的size增大了1.1GB左右,多试几次此命令也是没有变化!man resize2fs这里提到常用resize2fs是在unmount存储块设备下使用的,在线mount时还需要额外配置命令!
在Linux 2.6或更高版本的内核中,该命令还支持在线扩容已经挂载的文件系统,该命令常用来针对LVM扩容后的分区使用!这个LVM需要实际操作下!

相关

https://www.zhihu.com/question/62428599/answer/198285551