init
This commit is contained in:
commit
2840e2ee91
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
node_modules
|
||||||
256
backup.sh
Executable file
256
backup.sh
Executable file
@ -0,0 +1,256 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
IFS=$'\n'
|
||||||
|
LOG='/root/backup-usb.log'
|
||||||
|
USB_DISK=""
|
||||||
|
USB_PARTITION=""
|
||||||
|
USB_MOUNT="/mnt/usb"
|
||||||
|
LUKS_PASS_URL="192.168.1.199:9999/andthepasswordis"
|
||||||
|
LUKS_PASS=""
|
||||||
|
|
||||||
|
function log() {
|
||||||
|
echo -e "`date +'%d/%m/%Y %H:%M:%S'` | $1"
|
||||||
|
echo -e "`date +'%d/%m/%Y %H:%M:%S'` | $1" >> $LOG
|
||||||
|
}
|
||||||
|
|
||||||
|
function usage() {
|
||||||
|
echo
|
||||||
|
echo -e "./backup.sh \e[93m--help \e[39m"
|
||||||
|
echo -e "./backup.sh \e[93m--mount \e[39m"
|
||||||
|
echo -e "./backup.sh \e[93m--umount \e[39m"
|
||||||
|
echo -e "./backup.sh \e[92m--src=\e[39m/mnt/data \e[96m--dst=\e[39m/backup"
|
||||||
|
echo -e "./backup.sh \e[92m--src=\e[39m/mnt/vmachines/storage \e[96m--dst=\e[39m/backup/data/VMachines"
|
||||||
|
echo -e "./backup.sh \e[92m--src=\e[39m/data/backup \e[96m--dst=\e[39m/backup \e[91m--delete=\e[39myes"
|
||||||
|
echo
|
||||||
|
echo -e " $1"
|
||||||
|
echo
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_luks_password() {
|
||||||
|
LUKS_PASS=$(curl -s $LUKS_PASS_URL | jq -r ".password")
|
||||||
|
if [ -z "$LUKS_PASS" ]; then
|
||||||
|
log "[FAIL] to get LUKS password"
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
log "[ OK ] get LUKS password"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function find_usb() {
|
||||||
|
for DISK in `ls -l /dev/disk/by-id/usb* | grep -v part | awk -F/ '{print $NF}'`; do
|
||||||
|
DEV="/dev/$DISK"
|
||||||
|
for PARTITION in `ls -1 $DEV* | grep "[0-9]$"`; do
|
||||||
|
cryptsetup isLuks $PARTITION
|
||||||
|
if [ $? = 0 ]; then
|
||||||
|
USB_PARTITION=$PARTITION
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
log "[FAIL] to find encrypted USB partition"
|
||||||
|
return 1
|
||||||
|
done
|
||||||
|
log "[FAIL] to find encrypted USB disk"
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function mount_usb() {
|
||||||
|
echo $LUKS_PASS | cryptsetup luksOpen $USB_PARTITION crypted_usb
|
||||||
|
if [ $? = 0 ]; then
|
||||||
|
log "[ OK ] $USB_PARTITION decrypted"
|
||||||
|
/usr/bin/mount /dev/mapper/crypted_usb /mnt/usb
|
||||||
|
if [ $? = 0 ]; then
|
||||||
|
log "[ OK ] $USB_PARTITION mounted"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
log "[FAIL] $USB_PARTITION mounted"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log "[FAIL] $USB_PARTITION decrypted"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_space () {
|
||||||
|
src_size=$(du -s "$SRC" | awk '{print $1}')
|
||||||
|
dst_size=$(df $MNT | grep "^/" | awk {'print $4'})
|
||||||
|
log "$SRC usage size: $src_size"
|
||||||
|
log "$MNT$DIR available size: $dst_size"
|
||||||
|
if [ "$dst_size" -gt "$src_size" ]; then
|
||||||
|
log "[ OK ] enought available space"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
log "[FAIL] not enought available space"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function sync_files() {
|
||||||
|
SRC_PATH=`dirname "$SRC"`
|
||||||
|
SRC_DIR=`basename "$SRC"`
|
||||||
|
DST_DIR=$USB_MOUNT$DST
|
||||||
|
log "[ OK ] source : ${SRC_DIR}"
|
||||||
|
log "[ OK ] destination: ${DST_DIR}/${SRC_DIR}"
|
||||||
|
log "------------ RSYNC STARTED ---------"
|
||||||
|
cd $SRC_PATH
|
||||||
|
if [ "$DELETE" == "yes" ]; then
|
||||||
|
rsync -av --stats \
|
||||||
|
--temp-dir=/tmp \
|
||||||
|
--links \
|
||||||
|
--human-readable \
|
||||||
|
--no-owner \
|
||||||
|
--no-group \
|
||||||
|
--include ".*" \
|
||||||
|
--delete \
|
||||||
|
"$SRC_DIR" "$DST_DIR" | tee -a $LOG
|
||||||
|
else
|
||||||
|
rsync -av \
|
||||||
|
--stats \
|
||||||
|
--temp-dir=/tmp \
|
||||||
|
--include ".*" \
|
||||||
|
--links \
|
||||||
|
--human-readable \
|
||||||
|
--no-owner \
|
||||||
|
--no-group \
|
||||||
|
"$SRC_DIR" "$DST_DIR" | tee -a $LOG
|
||||||
|
fi
|
||||||
|
cd /root
|
||||||
|
log "------------ RSYNC ENDED -----------"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function check_copy () {
|
||||||
|
cd ${SRC}
|
||||||
|
find * -type f -exec ls -s {} \; > /root/backup-src.log
|
||||||
|
cd ${DST_DIR}/${SRC_DIR}
|
||||||
|
find * -type f -exec ls -s {} \; > /root/backup-dst.log
|
||||||
|
cd
|
||||||
|
|
||||||
|
if diff -r /root/backup-src.log /root/backup-dst.log; then
|
||||||
|
log "[ OK ] files check"
|
||||||
|
else
|
||||||
|
log "[FAIL] files check"
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
function umount_usb() {
|
||||||
|
if /usr/bin/umount $USB_MOUNT; then
|
||||||
|
if [ $? = 0 ]; then
|
||||||
|
log "[ OK ] umount usb disk"
|
||||||
|
cryptsetup luksClose /dev/mapper/crypted_usb
|
||||||
|
if [ $? = 0 ]; then
|
||||||
|
log "[ OK ] close disk encryption"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
log "[FAIL] close disk encryption"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log "[FAIL] umount usb disk"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
log "[FAIL] to find mounted usb disk"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function statistics_usb() {
|
||||||
|
USBTOTAL=$(df -h | grep $USB_MOUNT | awk '{print $2}')
|
||||||
|
USBUSAGE=$(df -h | grep $USB_MOUNT | awk '{print $5}')
|
||||||
|
USBUSED=$(df -h | grep $USB_MOUNT | awk '{print $3}')
|
||||||
|
USBFREE=$(df -h | grep $USB_MOUNT | awk '{print $4}')
|
||||||
|
log "USB DISK Total : ${USBTOTAL}"
|
||||||
|
log "USB DISK Usage : ${USBUSAGE}"
|
||||||
|
log "USB DISK Used : ${USBUSED}"
|
||||||
|
log "USB DISK Free : ${USBFREE}"
|
||||||
|
}
|
||||||
|
|
||||||
|
function mount() {
|
||||||
|
if find_usb; then
|
||||||
|
if get_luks_password; then
|
||||||
|
mount_usb
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
function umount() {
|
||||||
|
umount_usb
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_depentencies() {
|
||||||
|
commands=(rsync cryptsetup curl jq)
|
||||||
|
for command in "${commands[@]}"
|
||||||
|
do
|
||||||
|
if ! command -v ${command} > /dev/null; then
|
||||||
|
log "Command $command not found"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
function main () {
|
||||||
|
log ""
|
||||||
|
log "BACKUP STARTED ===================="
|
||||||
|
log "SOURCE : $SRC"
|
||||||
|
log "DESTINATION : $USB_MOUNT$DST"
|
||||||
|
log "WITH DELETE : ${DELETE:-"No (default)"}"
|
||||||
|
log ""
|
||||||
|
if check_depentencies; then
|
||||||
|
if get_luks_password; then
|
||||||
|
if find_usb; then
|
||||||
|
if mount_usb; then
|
||||||
|
sync_files
|
||||||
|
fi
|
||||||
|
statistics_usb
|
||||||
|
umount_usb
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
for i in "$@"
|
||||||
|
do
|
||||||
|
case $i in
|
||||||
|
--help)
|
||||||
|
usage
|
||||||
|
;;
|
||||||
|
--mount)
|
||||||
|
mount
|
||||||
|
;;
|
||||||
|
--umount)
|
||||||
|
umount
|
||||||
|
;;
|
||||||
|
--getpass)
|
||||||
|
get_luks_password
|
||||||
|
;;
|
||||||
|
--src=*)
|
||||||
|
SRC="${i#*=}"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--dst=*)
|
||||||
|
DST="${i#*=}"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--delete=*)
|
||||||
|
DELETE="${i#*=}"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
usage
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
[ -z "$SRC" ] && usage "option \e[92m'--src'\e[39m is missing"
|
||||||
|
[ -z "$DST" ] && usage "option \e[92m'--dst'\e[39m is missing"
|
||||||
|
|
||||||
|
main
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user