确定块设备大小的最快方法?

确定块设备大小的最快方法?

我有一个远程脚本,用于检查 lvm 卷中的一些参数。我需要知道的事情之一是大小。我目前正在使用这个:

lvdisplay /dev/virtuals/volume_name -C -o lv_size

但是最后一条命令在我的服务器上执行大约需要一秒钟,而且我有多个要检查的卷。我也尝试过使用 lvs 代替 lvdisplay,但速度并没有太大的提高。

time lvs -o lv_size /dev/virtuals/volume_name -C -o lv_size
real 0m0.809s
time lvdisplay /dev/virtuals/volume_name
real 0m0.982s

有人知道更快捷的方法来获取该信息吗?仅仅是体积大小,我对职业不感兴趣。

更新: 使用 blockdev 可以带来巨大的改进。我真的建议使用它而不是 lvdisplay(只需记住使用 getsize64)

时间 blockdev --getsize64 /dev/system/home

答案1

使用blockdev命令:

字节:

> time blockdev --getsize64 /dev/system/home
32212254720

real   0m0.004s
user   0m0.001s
sys    0m0.002s

部门:

> time blockdev --getsize /dev/system/home
62914560

real   0m0.006s
user   0m0.001s
sys    0m0.003s

答案2

您可以尝试以下方法。我不了解 lvm 内部原理,所以不知道它们是否会产生任何影响。

  • 尝试使用lvs而不是lvdisplay。 也许这样更快,因为它查找的信息更少。

  • 尝试对您感兴趣的所有卷运行lvdisplaylvs仅运行一次。由于某些信息是按卷组存储的,因此这样可以减少重复读取的工作。

答案3

还有lvs,但我认为它们都依赖于相同的代码库

答案4

/proc/partitions还列出了 LVM 管理的卷,并且速度应该更快。最大的缺点是它将它们列为“dm-0”、“dm-1”等。您将需要从其他地方获取名称-编号映射。(提示,检查设备文件的次设备号)

相关内容