lv 경로가 있다고 가정합니다.
lvpath=/dev/mapper/vg2-Music
컷을 사용하여 분할 하는 것보다 lvdisplay -c
:
vgname="$(lvdisplay -c "$lvpath" | cut -d ':' -f 2 )"
lvname="$(basename "$(lvdisplay -c "$lvpath" | cut -d ':' -f 1 )" )"
결과:
$ echo VG: $vgname LV: $lvname
VG: vg2 LV: Music
질문:
더 편리한 방법이 있나요?
lvdisplay -c
항상 양식에 경로를 제공 할 수 있습니까 /dev/VGname/LVname
? ( /dev/mapper/VGname-LVname
sed를 사용하여 기본 이름을 교환하는 경우)
경로에서 LVname을 가져오는 도구가 LVM2 패키지에 있습니까?
답변1
lvs
옵션과 함께 사용하여 -o
표시되는 필드를 사용자 정의합니다.
set $(lvs --noheadings -o lv_name,vg_name)
lv_name=$1 vg_name=$2
값 주위에 추가 공백이 배치되므로 lv_name=$(lvs --noheadings -o lv_name)
직접 쓸 수는 없습니다 . lvs
이 코드 조각은 볼륨 이름에 셸 특수 문자를 포함할 수 없으므로 안전합니다.
답변2
이는 bash 스크립트에서 LVM을 사용하는 데 적합합니다.
VG 이름:
이는 VG 이름(볼륨 그룹 이름)을 공백 없이 단일 값으로 가져오는 데 유용합니다.
sudo vgs --noheadings -o vg_name | tr -d ' '
LV 이름:
"보통" 하나 이상의 LV 이름(논리 볼륨 이름)이 있으며 일반적으로 이를 참조하려면 구문을 사용해야 합니다 /dev/<vg_name>/<lv_name>
. 어떤 출력 형식을 원하는지 잘 모르겠습니다. 다음은 LV 이름 목록을 제공하며, 각 값은 개행 문자 "\n"으로 구분됩니다.
sudo lvscan | cut -d "'" -f 2
또는 LV 이름만 원하는 경우 <lv_name>
:
sudo lvs --noheadings -o lv_name | tr -d ' '
PV 이름:
당신은 묻지 않았지만 이 작업을 수행하면 PV 이름(물리적 볼륨 이름)을 얻는 방법이 다음과 같습니다.
sudo pvs --noheadings -o pv_name | tr -d ' '
답변3
다른 답변은 모두 정확합니다. LV가 필요한 경우 수행할 작업길LV 이름 자체에서? LV 이름은 고유하다고 가정합니다. 즉, 해당 이름을 가진 다른 LV는 다른 VG에 존재하지 않습니다. 예를 들어 "음악"입니다. 한 단계만으로 경로를 얻을 수 있습니다.
lvs --noheadings -o lv_path -S lv_name=Musik
출력은 후속 LV 명령에 사용할 수 있는 토큰(LV 경로)이 됩니다.
고유하지 않은 경우 lv_name
별도의 주의 없이는 작동하지 않습니다.
답변4
조금 늦었지만 제가 만든 스크립트를 살펴보겠습니다.
#!/bin/bash
IFS=$'\n'
export IFS
phydis=$(pvdisplay | egrep "PV Name|VG Name|PV Size" | awk 'NR%3{printf "%s,",$0;next}{print;}' | sed 's/PV Name//g' | sed 's/VG Name//g' | sed 's/PV Size//g' | sed 's/ //g')
if [ -f /etc/redhat-release ];then
if [[ `cat /etc/redhat-release | awk -F " " '{print$4}' | awk -F "." '{print$1}'` -eq 7 ]];then
logdis=$(lvdisplay | egrep "LV Path|LV Size" | awk 'NR%2{printf "%s,",$0;next}{print;}' | sed 's/LV Path//g' | sed 's/LV Size//g' | sed 's/ //g' | sort)
else
logdis=$(lvdisplay | egrep "LV Name|LV Size" | awk 'NR%2{printf "%s,",$0;next}{print;}' | sed 's/LV Name//g' | sed 's/LV Size//g' | sed 's/ //g' | sort)
fi
else
logdis=$(lvdisplay | egrep "LV Name|LV Size" | awk 'NR%2{printf "%s,",$0;next}{print;}' | sed 's/LV Name//g' | sed 's/LV Size//g' | sed 's/ //g' | sort)
flag="norh"
fi
phyparttrans=""
echo "|--------------------------|----------------------|----------------------|----------------------|--------------------------------|----------------------|-----------------|-----------------|--------------------------------|"
echo "| PV Name | PV Size | VG Name | VG Size | LV Name | LV Size | Used | Avail | Mounted on |"
for phy in ${phydis};do
phypart1=$(echo "${phy}" | awk -F "," '{print$1}')
phypart2=$(echo "${phy}" | awk -F "," '{print$2}')
phypart3=$(echo "${phy}" | awk -F "," '{print$3}' | cut -f1 -d"/")
if [ "$phypart2" != "$phyparttrans" ];then
phyparttrans="$phypart2"
counter=1
for log in ${logdis};do
volsize=$(vgdisplay | egrep "VG Name|VG Size" | awk 'NR%2{printf "%s,",$0;next}{print;}' | sed 's/VG Name//g' | sed 's/VG Size//g' | sed 's/ //g' | grep "$phypart2" | awk -F "," '{print$2}')
logpart1=$(echo "${log}" | awk -F "," '{print$1}')
logpart2=$(echo "${log}" | awk -F "," '{print$2}')
logpartmatch=$(echo "${logpart1}" | awk -F "/" '{print$3}')
if [ $counter -eq 1 ];then
if [ "${phypart2}" == "${logpartmatch}" ];then
mountpoint1=$(echo "$logpart1" | awk -F "/" '{print$3}')
mountpoint2=$(echo "$logpart1" | awk -F "/" '{print$4}')
df_output=$(df -h /dev/mapper/${mountpoint1}-${mountpoint2} | tail -1)
Used=$(echo "$df_output" | awk -F " " '{print$2}')
Avail=$(echo "$df_output" | awk -F " " '{print$3}')
Mounted=$(echo "$df_output" | awk -F " " '{print$NF}')
echo "|--------------------------|----------------------|----------------------|----------------------|--------------------------------|----------------------|-----------------|-----------------|--------------------------------|"
printf '%1s %-24s %1s %-20s %1s %-20s %1s %-20s %1s %-30s %1s %-20s %1s %-15s %1s %-15s %1s %-30s %1s\n' "|" "$phypart1" "|" "$phypart3" "|" "$phypart2" "|" "$volsize" "|" "$logpart1" "|" "$logpart2" "|" "$Used" "|" "$Avail" "|" "$Mounted" "|"
counter=$[$counter +1]
elif [[ "${flag}" == "norh" ]];then
df_output=$(df -h /dev/${phypart2}/${logpart1} | tail -1)
Used=$(echo "$df_output" | awk -F " " '{print$2}')
Avail=$(echo "$df_output" | awk -F " " '{print$3}')
Mounted=$(echo "$df_output" | awk -F " " '{print$NF}')
echo "|--------------------------|----------------------|----------------------|----------------------|--------------------------------|----------------------|-----------------|-----------------|--------------------------------|"
printf '%1s %-24s %1s %-20s %1s %-20s %1s %-20s %1s %-30s %1s %-20s %1s %-15s %1s %-15s %1s %-30s %1s\n' "|" "$phypart1" "|" "$phypart3" "|" "$phypart2" "|" "$volsize" "|" "$logpart1" "|" "$logpart2" "|" "$Used" "|" "$Avail" "|" "$Mounted" "|"
counter=$[$counter +1]
fi
else
if [ "${phypart2}" == "${logpartmatch}" ];then
mountpoint1=$(echo "$logpart1" | awk -F "/" '{print$3}')
mountpoint2=$(echo "$logpart1" | awk -F "/" '{print$4}')
df_output=$(df -h /dev/mapper/${mountpoint1}-${mountpoint2} | tail -1)
Used=$(echo "$df_output" | awk -F " " '{print$2}')
Avail=$(echo "$df_output" | awk -F " " '{print$3}')
Mounted=$(echo "$df_output" | awk -F " " '{print$NF}')
printf '%1s %-24s %1s %-20s %1s %-20s %1s %-20s %1s %-30s %1s %-20s %1s %-15s %1s %-15s %1s %-30s %1s\n' "|" " " "|" " " "|" " " "|" " " "|" "$logpart1" "|" "$logpart2" "|" "$Used" "|" "$Avail" "|" "$Mounted" "|"
counter=$[$counter +1]
elif [[ "${flag}" == "norh" ]];then
df_output=$(df -h /dev/${phypart2}/${logpart1} | tail -1)
Used=$(echo "$df_output" | awk -F " " '{print$2}')
Avail=$(echo "$df_output" | awk -F " " '{print$3}')
Mounted=$(echo "$df_output" | awk -F " " '{print$NF}')
printf '%1s %-24s %1s %-20s %1s %-20s %1s %-20s %1s %-30s %1s %-20s %1s %-15s %1s %-15s %1s %-30s %1s\n' "|" " " "|" " " "|" " " "|" " " "|" "$logpart1" "|" "$logpart2" "|" "$Used" "|" "$Avail" "|" "$Mounted" "|"
counter=$[$counter +1]
fi
fi
done
else
printf '%1s %-24s %1s %-20s %1s %-20s %1s %-20s %1s %-30s %1s %-20s %1s %-15s %1s %-15s %1s %-30s %1s\n' "|" "$phypart1" "|" "$phypart3" "|" " " "|" " " "|" " " "|" " " "|" " " "|" " " "|" " " "|"
fi
done
echo "|--------------------------|----------------------|----------------------|----------------------|--------------------------------|----------------------|-----------------|-----------------|--------------------------------|"
고쳐 쓰다
Here is the script exit example:
[root@server01 /root/scripts]# ./lvm_display.sh
|--------------------------|----------------------|----------------------|----------------------|--------------------------------|----------------------|-----------------|-----------------|--------------------------------|
| PV Name | PV Size | VG Name | VG Size | LV Name | LV Size | Used | Avail | Mounted on |
|--------------------------|----------------------|----------------------|----------------------|--------------------------------|----------------------|-----------------|-----------------|--------------------------------|
| /dev/cciss/c0d2 | 1.64TB | VolGroup01 | 1.64TB | /dev/VolGroup01/backup_files | 50.00GB | 132M | 50G | /data/backup_files |
| | | | | /dev/VolGroup01/data | 1000.00GB | 591G | 410G | /data |
| | | | | /dev/VolGroup01/ftp | 100.00GB | 74G | 27G | /data/ftp |
| | | | | /dev/VolGroup01/dir1 | 50.00GB | 15G | 36G | /prod/app/dir1 |
| | | | | /dev/VolGroup01/nfs_test | 12.00GB | 127G | 224K | /dev |
| | | | | /dev/VolGroup01/testing | 200.00GB | 39G | 162G | /data/testing |
| | | | | /dev/VolGroup01/shared | 125.00GB | 15G | 111G | /data/shared |
|--------------------------|----------------------|----------------------|----------------------|--------------------------------|----------------------|-----------------|-----------------|--------------------------------|
| /dev/cciss/c0d0p2 | 558.78GB | VolGroup00 | 558.75GB | /dev/VolGroup00/LogVol00 | 10.00GB | 7.0G | 2.3G | / |
| | | | | /dev/VolGroup00/LogVol01 | 32.00GB | 127G | 224K | /dev |
| | | | | /dev/VolGroup00/LogVol02 | 120.00GB | 57G | 54G | /prod |
| | | | | /dev/VolGroup00/LogVol03 | 10.00GB | 160M | 9.1G | /tmp |
| | | | | /dev/VolGroup00/LogVol05 | 336.75GB | 205G | 133G | /data |
|--------------------------|----------------------|----------------------|----------------------|--------------------------------|----------------------|-----------------|-----------------|--------------------------------|
어떤 개선이라도 환영합니다!