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