lvm 마운트 지점을 얻는 방법(일반)

lvm 마운트 지점을 얻는 방법(일반)

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/lvmlv 이름입니다 lvm_testing-lvnamefortest.

Debian 시스템에서는 동일한 기능이 /dev/mapper/deb--all--lvm01-usr켜져 있지만 /usr 위 명령에서 반환된 lvm 이름은 입니다 deb-all-lvm01-usr.

RHEL, CentOS, Ubuntu, Debian 등과 같은 모든 플랫폼에 적용되는 일반적인 명령이나 단계가 있습니까?

답변1

스크립트가 필요한 것보다 훨씬 더 복잡하며 몇 가지 문제가 있습니다.

  1. 대신 백틱을 사용합니다 $().
  2. 스크립트는 처음 찾은 논리 볼륨을 제외한 모든 논리 볼륨을 무시합니다.
  3. lvpath에 대한 마운트 지점이 없다는 것은 논리 볼륨이 존재하지 않는다는 것을 의미한다고 가정합니다. 이 가정은 완전히 잘못되었습니다.
  4. 둘 다 lvs이미 lvdisplayLV 경로에 있는 장치의 이름을 알려주고 있으며, 이름 지정 방식에 대한 가정이나 추측을 하지 않습니다.
  5. lvslvdisplay보다 유연한 출력 옵션을 제공합니다 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."

관련 정보