Скрипт для создания снапшотов на разделе BTFS

Ответить
Аватара пользователя
Yamah
Сообщения: 1386
Зарегистрирован: 04 май 2012, 06:30
Operating system: Десктоп (дом): Rosa Fresh R8.1, Rosa Fresh R10
Десктоп (работа): Rosa Fresh R8.1/Rosa Fresh R10
Сервер (работа): Rosa Enterprise Linux Sercver 6.7
Нетбук: Rosa Fresh R10
Контактная информация:

Скрипт для создания снапшотов на разделе BTFS

Сообщение Yamah »

Набросал для себя скрипт. В нем правда нужно нормально описать сообщения об ошибках при аварийном выходе и дописать справку

Код: Выделить всё

#!/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 - тогда имя будет определять подкаталог каталога со снапшотами, а суффикс - имя снапшота.
Ответить

Вернуться в «Программы РОСА десктоп»