pankovea-patch-1 #1
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
log*
|
||||
47
zfs_send.zsh
47
zfs_send.zsh
@ -2,16 +2,12 @@
|
||||
|
||||
#TODO list
|
||||
# 1. Скрипт не определяет, что нужно остановиться
|
||||
# 2. Возникают ошибки:
|
||||
# sending main_pool/3D_Design@manual-20250327 (99%: 21.9G/21.9G) 25.6M/s date: invalid date ‘@0.’
|
||||
# date: invalid date ‘@954.’
|
||||
# sending main_pool/3D_Design@manual-20250327 (100%: 21.9G/21.9G) 25.6M/s date: invalid date ‘@-1.’
|
||||
# date: invalid date ‘@954.’
|
||||
# 3. Нужно автоматически определить, если копирование уже запущено то предложить остановить и вывести процесс резервирования
|
||||
# 2. Нужно автоматически определить, если копирование уже запущено то предложить остановить и вывести процесс резервирования
|
||||
# Нет проверки на верность введённых параметров
|
||||
# смотреть нужно сразу на всей системе. Не будем запускать несколько параллельных резервирований.
|
||||
|
||||
|
||||
backup_server="192.168.0.162" # Сервер для резервирования
|
||||
backup_server="192.168.0.120" # Сервер для резервирования
|
||||
backup_user="root" # Пользователь на сервере
|
||||
inc_snapshot="manual-$(date +%Y%m%d)" # Новый создаваемый снисмок
|
||||
incremental=false
|
||||
@ -51,7 +47,7 @@ while [[ "$#" -gt 0 ]]; do
|
||||
echo " --no-check";
|
||||
echo " --stop";
|
||||
echo "-i | --incremental" ;
|
||||
echo "-p | --progress" ;;
|
||||
exit 0;;
|
||||
*) echo "Неизвестные параметры: $1"; exit 1 ;;
|
||||
esac
|
||||
shift
|
||||
@ -90,16 +86,20 @@ find_ssh_key() {
|
||||
done
|
||||
|
||||
# Если ключей нет, создаем новый
|
||||
# echo "Создаём новый ключ..."
|
||||
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519 >&2
|
||||
echo "~/.ssh/id_ed25519"
|
||||
if [ ! -f ~/.ssh/id_ed25519 ]; then
|
||||
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519
|
||||
# echo "Создаём новый ключ..."
|
||||
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519 >&2
|
||||
echo "~/.ssh/id_ed25519"
|
||||
else
|
||||
echo "Ключей для этого сервера не найдено. Ключ по умолчанию ~/.ssh/id_ed25519 уже существует. Создание нового ключа прервано"
|
||||
fi
|
||||
}
|
||||
|
||||
# Определение ключа
|
||||
key_path=$(find_ssh_key)
|
||||
key_pub_path="${key_path}.pub"
|
||||
|
||||
|
||||
check_ssh_connection() {
|
||||
ssh -o "BatchMode=yes" -o "ConnectTimeout=5" "$backup_user@$backup_server" exit 2>/dev/null
|
||||
return $?
|
||||
@ -451,8 +451,8 @@ echo $pids
|
||||
time_changed_percent_value=$TS1
|
||||
|
||||
n_tasks=$(< /dev/shm/backup_n_tasks)
|
||||
i_task=$(< /dev/shm/backup_i_task)
|
||||
while [[ $i_task != $n_tasks ]]; do # выводим статус пока не завершены все задачи
|
||||
while [[ $i_task -lt $n_tasks ]]; do # выводим статус пока не завершены все задачи
|
||||
i_task=$(< /dev/shm/backup_i_task)
|
||||
progress=$(ps -u | grep "sending" | grep -v "grep" | sed -r "s/(.*) zfs: (.*)/\2/")
|
||||
|
||||
# Извлекаем объем и процент
|
||||
@ -539,8 +539,15 @@ echo $pids
|
||||
elapsed_total=$(( $(date +%s) - TS1 ))
|
||||
fi
|
||||
time_part_of_percent=$(( now - time_changed_percent_value )) # Время с последнего изменения процента
|
||||
estimated_total=$(( 100 / percent * elapsed_total )) # Всего времени на задачу
|
||||
estimated_remain=$(( estimated_total - elapsed_total - time_part_of_percent )) # Осталось времени на задачу
|
||||
# Используем awk для более точных расчётов
|
||||
# estimated_total - Всего времени на задачу
|
||||
# estimated_remain - Осталось времени на задачу
|
||||
read estimated_total estimated_remain <<< $(awk -v p="$percent" -v t="$elapsed_total" -v tp="$time_part_of_percent" '
|
||||
BEGIN {
|
||||
total = (p > 0 ? (100 / p * t) : 0);
|
||||
remain = (total > 0 ? (total - t - tp) : 0);
|
||||
printf("%d %d", total, remain)
|
||||
}')
|
||||
if (( estimated_remain >= 86400 )) || (( estimated_total >= 86400 )); then # Если осталось более чем сутки, то отобразить дни
|
||||
estimated_remain_days=$(( estimated_remain / 86400 )); estimated_remain_time=$(( estimated_remain % 86400 ))
|
||||
estimated_total_days=$(( estimated_total / 86400 )); estimated_total_time=$(( estimated_total % 86400 ))
|
||||
@ -564,9 +571,11 @@ echo $pids
|
||||
fi
|
||||
|
||||
# Удалить временные файлы состояний, если они существуют
|
||||
[ -f /dev/shm/backup_i_task ] && rm /dev/shm/backup_i_task
|
||||
[ -f /dev/shm//dev/shm/backup_time_start ] && rm /dev/shm/backup_time_start
|
||||
[ -f /dev/shm//dev/shm/backup_time_circle ] && rm /dev/shm/backup_time_circle
|
||||
[ -f /dev/shm/backup_i_task ] && rm /dev/shm/backup_i_task
|
||||
[ -f /dev/shm//dev/shm/backup_time_start ] && rm /dev/shm/backup_time_start
|
||||
[ -f /dev/shm//dev/shm/backup_time_circle ] && rm /dev/shm/backup_time_circle
|
||||
# Обнуляем переменные после завершения задачи, чтобы избежать ошибок при повторном запуске
|
||||
unset last_volume last_volume_time last_update_time last_percent time_changed_percent_value
|
||||
|
||||
fi
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user