LVM이 시스템에 있는지 확인하는 스크립트를 작성해야 합니다. LVM이 있으면 특정 단계를 수행하고, 그렇지 않으면 다른 단계를 수행합니다.
내 질문은 lvm 이름과 마운트 지점을 찾는 일반적인 방법을 찾는 방법입니다. lvdisplay 명령에서 lv 이름과 vg 이름을 가져온 다음 마운트에서 grep을 시도했습니다.
LV_Name=`sudo lvdisplay | sed -n '3,4p' | sed -n '1p' | awk '{print $3}'`
VG_Name=`sudo lvdisplay | sed -n '3,4p' | sed -n '2p' | awk '{print $3}'`
echo -e "VG_Name is $VG_Name. \nLV_Name is $LV_Name".
lv_device_name=`echo $VG_Name-$LV_Name`
echo "LVM device name is $lv_device_name"
mount_point=`mount | grep $lv_device_name | awk '{print $3}'`
if [ $? -eq 0 ]
then
echo "$mount_point is the mount point for $lv_device_name"
else
echo "No LVM found"
fi
하지만 이제 문제는 이것이 *nix 플랫폼에 관계없이 보편적이지 않다는 것입니다.
이것은 Ubuntu14.04 전용 스크립트입니다. 여기서 lvm 마운트 지점은 /mnt/lvm
lv 이름입니다 lvm_testing-lvnamefortest
.
Debian 시스템에서는 동일한 기능이 /dev/mapper/deb--all--lvm01-usr
켜져 있지만 /usr
위 명령에서 반환된 lvm 이름은 입니다 deb-all-lvm01-usr
.
RHEL, CentOS, Ubuntu, Debian 등과 같은 모든 플랫폼에 적용되는 일반적인 명령이나 단계가 있습니까?
답변1
스크립트가 필요한 것보다 훨씬 더 복잡하며 몇 가지 문제가 있습니다.
- 대신 백틱을 사용합니다
$()
. - 스크립트는 처음 찾은 논리 볼륨을 제외한 모든 논리 볼륨을 무시합니다.
- lvpath에 대한 마운트 지점이 없다는 것은 논리 볼륨이 존재하지 않는다는 것을 의미한다고 가정합니다. 이 가정은 완전히 잘못되었습니다.
- 둘 다
lvs
이미lvdisplay
LV 경로에 있는 장치의 이름을 알려주고 있으며, 이름 지정 방식에 대한 가정이나 추측을 하지 않습니다. lvs
lvdisplay
보다 유연한 출력 옵션을 제공합니다vgdisplay
.
다음과 같이 더 시도해 보세요.
#! /bin/bash
lvcount=0
while read lvname vgname lvpath ; do
lvcount=$((lvcount+1))
printf "VG_Name is %s.\nLV_Name is %s.\n" "$vgname" "$lvname"
echo "LVM Device name is $lvpath"
mp=$(mount | grep "$lvpath" | awk '{print $3}')
if [ -n "$mp" ] ; then
echo "$mp is the mount point for $lvpath"
else
echo "$lvpath is not mounted."
fi
echo
done < <(lvs --no-headings -o lv_name,vg_name,lv_path)
echo "Found $lvcount logical volumes."