rsync smb

  1. step

    apt install cifs-utils -y

    apt install rsync -y

  2. step

    В файле /etc/credentials разместить данные для досупа к Windows

     cat /etc/credentials
    
    username=backup_user
    password=hs47-H7)yM
    
    
  3. step

Local backup

#!/bin/bash

########################### Constants ###########################
#Даные для SMB
    IP=192.168.1.250
	CREDENTIAL=/etc/credentials	    # файл с credentials для smb
	SMB_V=3.0                       # Версия smb источника
    MNT_POINT=/mnt/sveta/           # Точка мониторвани
	
	ls $MNT_POINT >/dev/null|| mkdir -p $MNT_POINT
        
    local_directory=$MNT_POINT
#Имя сетевого интерфейса и его IP
    ETH=enp3s0
# Сколько свежих каталогов оставить
    COUNT=15
# telegramm 
    BOT_TOKEN="18045447450203:AAGEjU7HKEEGle1Zv2an5sVF49QxNxhw03w"
    CHAT_ID="33109821804"
# тескт сообщений
IP_local=$(ip -4 a | grep inet | grep $ETH |  awk '/inet/ {print $2}')
IP_global=$(curl 2ip.com.ua)

MESS="Проблема $0
LAN: $IP_local
WAN: $IP_global
"
########################### Функции ###########################
# Монтирование SMB
fun_mount () {
    MESS="$MESS Ошибка mount"
    mount -t cifs //$IP/$SHARA_FROM $MNT_POINT -o credentials=$CREDENTIAL -o vers=$SMB_V -o ro
    if [[ $? -eq 0 ]]; then
    echo "Ресурс смонтирован. ОК"
else
    echo "Ошибка при монтировании"
    curl -s -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" -d "chat_id=$CHAT_ID&text=$MESS" > /dev/null
    exit 0
fi
}
#2 tar 
fun_tar () {
    ls "${target_directory}" || mkdir -p "${target_directory}"
    tar -vczf ${target_directory}`date "+%d-%m-%g_%H-%M-%S"`-Sveta_1cv8.tar.gz   $MNT_POINT
}
#3 rsync
fun_rsync () {
    ls "${target_directory}increment/" || mkdir -p "${target_directory}increment/"
	ls "${target_directory}current/"   || mkdir -p "${target_directory}current/"
 rsync -zav --progress --delete  --recursive $local_directory $target_directory/current/  --backup --backup-dir=${target_directory}/increment/$(date +%Y-%m-%d)/
    # Удаляем старые каталоги в increment
ls -dt "${target_directory}increment"/*/ | tail -n +$((COUNT+1)) | xargs -I {}   rm -r -- "{}"
    }
#4 Сравнить количество файлов локаьных и удаленных
fun_count () {
REMOTE_COUNT=$(find $target_directory/current/ | wc -l)
LOCAL_COUNT=$(find  "$local_directory" | wc -l)
echo REMOTE_COUNT $REMOTE_COUNT
echo LOCAL_COUNT $LOCAL_COUNT

if [ "$REMOTE_COUNT" -ne "$LOCAL_COUNT" ]; then
    echo "ошибка"
MESSAGE="Ошибка выполнения скрипта
$echo $0
LAN ip $IP_local
WAN ip $WAN $IP_global
$local_directory

Remote:
$server
$target_directory

Колличество файлов не совпадает!!!
REMOTE_COUNT $REMOTE_COUNT
LOCAL_COUNT  $LOCAL_COUNT
"
curl -s -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" -d "chat_id=$CHAT_ID&text=$MESSAGE" > /dev/null
fi
}
clear
############################## Работаем #################################

#Folder  Medoc
umount $MNT_POINT

SHARA_FROM=zvit_arc/         # Shara на windows
target_directory=/mnt/disk2/backup/zvit_arc/ # каталог на сервере, в который проводим синхронизацию


fun_mount
fun_rsync
fun_count


#tar_1c
umount $MNT_POINT
SHARA_FROM=1с_82                # Shara
target_directory=/mnt/disk2/backup_2024/Sveta/1c_82_tar/

fun_mount
fun_tar

umount $MNT_POINT
exit 0