假设我们有 lv 路径:
lvpath=/dev/mapper/vg2-Music
Run Code Online (Sandbox Code Playgroud)
比我lvdisplay -c
用切割分开:
vgname="$(lvdisplay -c "$lvpath" | cut -d ':' -f 2 )"
lvname="$(basename "$(lvdisplay -c "$lvpath" | cut -d ':' -f 1 )" )"
Run Code Online (Sandbox Code Playgroud)
结果:
$ echo VG: $vgname LV: $lvname
VG: vg2 LV: Music
Run Code Online (Sandbox Code Playgroud)
题:
有没有更方便的方法来做到这一点?
我可以依靠lvdisplay -c
它总是以形式提供路径/dev/VGname/LVname
吗?(如果/dev/mapper/VGname-LVname
basename 应该与 sed 交换)
是否有来自 LVM2 包的工具可以从路径中获取 LVname?
lvs
与-o
选项一起使用以自定义显示的字段。
set $(lvs --noheadings -o lv_name,vg_name)
lv_name=$1 vg_name=$2
Run Code Online (Sandbox Code Playgroud)
请注意,您不能只写,lv_name=$(lvs --noheadings -o lv_name)
因为lvs
在值周围放置了额外的空格。该代码段是安全的,因为卷名称不允许包含 shell 特殊字符。