这种情况,我有未知数量的卷组及其名称,并且分配了未知数量的磁盘。 示例:
pvs -o pv_name,vg_name
PV VG
/dev/vdd appvg01
/dev/vdb appvg01
/dev/vdf3 vg00
/dev/vdh testvg
vgs --noheadings | awk '{print $1}'| while read line ; do echo $line;vgs --noheadings -o pv_name $line; done
appvg01
/dev/vdd
/dev/vdb
testvg
/dev/vdh
vg00
/dev/vdf3
在最后阶段,我想用新磁盘镜像每个卷,我将手动添加:
for i in `/sbin/lvs| /bin/awk '{if ($2 ~ /appvg01/) print $1}'`; do
/sbin/lvconvert -b -m0 appvg01/$i /dev/vde
done
但是,我不知道应该与哪个卷名相关联,因为它可能是任何其他名称。 什么是这种结构的最佳方法。
由于
答案 0 :(得分:2)
在bash中存储此类信息的正确数据结构是关联数组:
declare -A pvs
{
read # skip the header
while read -r pv vg; do
pvs[$pv]=$vg
done
} < <(pvs -o pv_name,vg_name)
此后,您可以迭代并执行查找:
for pv in "${!pvs[@]}"; do
vg="${pvs[$pv]}"
echo "vg $vg is backed by pv $pv"
done