Скрипт для создания снапшотов на разделе BTFS
Добавлено: 11 авг 2015, 21:32
Набросал для себя скрипт. В нем правда нужно нормально описать сообщения об ошибках при аварийном выходе и дописать справку
Ключи:
-p - задает каталог в который примонтирован раздел с BTRFS со всеми подтомами (без ключа "subvol") Если параметр не задан, то будет искать в fstab системный раздел дополнительно монтирующийся без параметра subvol.
-v - задает подтом, который нужно будет снапшотить. По умолчанию - системный подтом.
-d - каталог на том же разделе, в который будет создан снапшот.
-n - имя снапшота, по умолчанию совпадает с именем подтома.
-x - суффикс имени. По умолчанию текущая дата.
-s - тогда имя будет определять подкаталог каталога со снапшотами, а суффикс - имя снапшота.
Код: Выделить всё
#!/bin/bash
j=0
for i in $@
do
INPAR[$j]=$i
let "j = j + 1"
done
SFLD=0
i=0
while [ "$i" -lt "${#INPAR[@]}" ]
do
case ${INPAR[$i]} in
"-p"|"--mount-point")
MP_PATH=${INPAR[$i+1]}
;;
"-v"|"--sv"|"--subvolune")
SUBVOLUNE=${INPAR[$i+1]}
;;
"-d"|"--sf"|"--snapshots-folder")
SNAPSHOTHSFOLDER=${INPAR[$i+1]}
;;
"-n"|"--sn"|"--name")
SNAME=${INPAR[$i+1]}
;;
"-x"|"--sx"|"--suffix")
SFX=${INPAR[$i+1]}
;;
"-s"|"--sf"|"--subfolder")
SFLD=1
;;
"-h"|"--help")
echo -e "Usage" $0 "[OPTIONS]\n\nOptions:\n"
exit 1
;;
esac
let "i = i + 1"
done
if [ "$SUBVOLUME" == "" ] || [ "$MP_PATH" == "" ]
then
SYSPATH=$(cat /etc/fstab | grep " / ")
if [ "$(echo $SYSPATH | awk -F' ' '{print $3}')" == "btrfs" ]
then
if [ "$SUBVOLUME" == "" ]
then
SUBVOLUME=$(echo $SYSPATH | awk -F' ' '{print $4}' | awk -F'subvol=' '{print $2}' | awk -F',' '{print $1}')
fi
if [ "$MP_PATH" == "" ]
then
VP=$(echo $SYSPATH | awk -F' ' '{print $1}')
MP_PATH=$(cat /etc/fstab | grep $VP | grep -v "subvol" | awk -F' ' '{print $2}')
fi
if [ "$MP_PATH" == "" ]
then
echo -e "Error!\nMopunt point has not been set."
exit 2
fi
if [ "$SUBVOLUME" == "" ]
then
echo -e "Error!\nSubvolume has not been set."
exit 3
fi
else
echo -e "Error!\nMount point has not been set and default mount point is not a btrfs."
exit 4
fi
fi
if [ "$SNAPSHOTSFOLDER" == "" ]
then
SNAPSHOTSFOLDER="Snapshots"
fi
if [ "$SFX" == "" ]
then
SFX="$(date +%Y:%m:%d-%H:%M:%S)"
fi
if [ "$SNAME" == "" ]
then
SNAME=$SUBVOLUME
fi
if [ "$SFLD" == 0 ]
then
SNAME=$SNAME"_"$SFX
else
SNAME=$SNAME"/"$SFX
fi
WASMOUNT=0
if [ "$(mount | grep $MP_PATH" ")" == "" ]
then
MP=$(cat /etc/fstab | grep $MP_PATH" " )
if [ "$MP" != "" ]
then
if [ "$(echo $MP | awk -F' ' '{print $3}')" == "btrfs" ]
then
mount $MP_PATH
WASMOUNT=1
else
echo -e "Error!\nMmount point is not a btrfs."
exit 5
fi
else
echo -e "Error!\nFolder is not mounted, and mount point is not exist in fstab."
exit 6
fi
else
if [ "$(mount | grep $MP_PATH" " | awk -F' ' '{print $5}')" != "btrfs" ]
then
echo -e "Error!\nMmount point is not a btrfs."
exit 7
fi
fi
mkdir -p $MP_PATH/$SNAPSOTSFOLDER
#echo "btrfs subvolume snapshot" $MP_PATH/$SUBVOLUME $MP_PATH/$SNAPSHOTSFOLDER/$SNAME
btrfs subvolume snapshot $MP_PATH/$SUBVOLUME $MP_PATH/$SNAPSHOTSFOLDER/$SNAME
if [ "$WASMOUNT" == "1" ]
then
umount $MP_PATH
fi
exit 0
-p - задает каталог в который примонтирован раздел с BTRFS со всеми подтомами (без ключа "subvol") Если параметр не задан, то будет искать в fstab системный раздел дополнительно монтирующийся без параметра subvol.
-v - задает подтом, который нужно будет снапшотить. По умолчанию - системный подтом.
-d - каталог на том же разделе, в который будет создан снапшот.
-n - имя снапшота, по умолчанию совпадает с именем подтома.
-x - суффикс имени. По умолчанию текущая дата.
-s - тогда имя будет определять подкаталог каталога со снапшотами, а суффикс - имя снапшота.