Редко пишу что-то на bash. Вот скрипт-хелпер, который создает, монтирует и удаляет read-only снапшоты для LVM. Вроде же мелочь. Почему скрипт получается такой большой?
Можно сделать его более лаконичным?
#!/bin/bash
function printUsage() {
echo -e "Usage:\n`basename "$0"` <VG> <LV>"
exit 1
}
function removeSnapshot() {
mountpoint -q $MOUNT_DIR_SNAPSHOT;
IS_MOUNTED=$?
if [ $IS_MOUNTED -eq 0 ];
then
umount $MOUNT_DIR_SNAPSHOT || return 1
fi
lvremove -f $LV_SNAPSHOT_PATH || return 1
return 0
}
if [[ "$#" -ne 3 ]]; then
printUsage
fi
ACTION=$1
VG=$2
LV=$3
LV_PATH="/dev/$VG/$LV"
echo $LV_PATH
LV_SNAPSHOT="${LV}_snapshot_ro";
LV_SNAPSHOT_PATH="/dev/$VG/$LV_SNAPSHOT";
MOUNT_DIR_SNAPSHOT="/mnt/$VG-$LV_SNAPSHOT";
case $ACTION in
create)
mkdir -p $MOUNT_DIR_SNAPSHOT || exit 1
if [ -e $LV_SNAPSHOT_PATH ]
then
removeSnapshot || exit 1
fi
# read-only snapshot
lvcreate -s -p r -n $LV_SNAPSHOT -L 4G $LV_PATH &&
mount -o ro $LV_SNAPSHOT_PATH $MOUNT_DIR_SNAPSHOT || exit 1
;;
remove)
removeSnapshot || exit 1
;;
*)
printUsage
;;
esac
exit 0;