如何将 lsblk 磁盘大小值与 df -h 中的磁盘大小值进行比较

如何将 lsblk 磁盘大小值与 df -h 中的磁盘大小值进行比较

df我想比较从-h 到lsblk 因为我们执行的大小之间的磁盘大小resize2fs,并且在resize2fs我想df -h根据从 的大小检查大小之后lablk

所以我们有以下内容lsblk

lsblk
NAME               MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb                  8:16   0    4G  0 disk /data1
sdc                  8:32   0    4G  0 disk /data2
sdd                  8:48   0    4G  0 disk /data3

来自 df -h

df -h
Filesystem                  Size  Used Avail Use% Mounted on
/dev/sdb                    3.9G   22M  3.8G   1% /data1
/dev/sdc                    3.9G   18M  3.8G   1% /data2
/dev/sdd                    3.9G   18M  3.8G   1% /data3

所以我在 bash 脚本中做了以下操作

[[ ` lsblk | grep "^sdb" | awk '{print $4}'  ` == ` df -h | awk -v disk_var="sdb" '$1 ~ disk_var' | awk '{print $2}'  ` ]] && echo "val are equal " || echo "val are not equal "

所以我从上面得到的值不相等,尽管这些值应该是相同的

有什么建议如何使用“ df -h”来获得可读的大小值,我们可以将其与来自的值进行比较lsblk

我们正在开发 rhel 7.6 服务器

答案1

您可以创建变量来启动

df=$(df -h | awk '/sdb/{printf "%.0f\n", $2}' | tr -d 'M|G|T')
blk=$(lsblk | awk '/sdb/ {printf "%.0f\n", $4}' | tr -d 'M|G|T')

然后与他们一起运行测试。

[[ $blk -eq $df ]] && echo "val are equal " || echo "val are not equal "

答案2

从各自的手册:

df 显示包含每个文件名参数的文件系统上的可用磁盘空间量。

lsblk 列出有关所有可用或指定块设备的信息。

IOW,df显示每个分区可以容纳多少实际数据,同时lsblk显示原始块设备及其大小。

同时,您可以使用适当的字段lsblk显示相同的信息:df

lsblk -b -o NAME,FSSIZE,FSUSED,FSAVAIL,FSUSE%,MOUNTPOINT并且df -B1完全匹配。

我只是df对可用百分比值的可用空间感到困惑。他们看起来很不相干。例如,对于我的根分区,就原始字节而言,31.9%当四舍五入时,我得到的结果等于32%并匹配lsblk输出,但df表示34%结果相差甚远。

相关内容