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."

おすすめ記事