diff --git a/backup_data.zsh b/backup_data.zsh index ffb8f31..6acfa41 100755 --- a/backup_data.zsh +++ b/backup_data.zsh @@ -98,7 +98,9 @@ else # Если не инкрементная копия, то запросит 0) exit;; -) ;; *) if (( $bak_ds_indx >= 1 )) && (( $bak_ds_indx <= ${#backup_datasets} )); then - work_datasets[$local_datasets[$i]]=$backup_datasets[bak_ds_indx] + loc_name_ds=$(sed -r "s/(.*)\/(.*)/\2/" <<<"$local_datasets[$i]") # Определить нижний по иерархии + bak_ds="$bak_ds/$loc_name_ds" # Добавить имя создаваемого датасета + work_datasets[$local_datasets[$i]]=$bak_ds else; exit 1; fi ;; esac done @@ -165,7 +167,7 @@ if [[ $incremental = true ]]; then else i=0; for loc_ds bak_ds in ${(kv)work_datasets}; do (( i++ )) - printf $column_widths $i $loc_ds "$inc_snapshot (*)" $bak_ds + printf $column_widths $i $loc_ds "$inc_snapshot (*)" "$bak_ds (*)" done fi @@ -224,9 +226,7 @@ if [[ $work = "y" || $work = "Y" ]]; then echo " * Start sending ${loc_ds} at $(date +'%Y.%m.%d %H:%M.%S')" case $incremental in true) zfs send -V -i ${loc_ds}@${last_loc_snaps[$loc_ds]} ${loc_ds}@${inc_snapshot} | ssh "$backup_user@${backup_server}" zfs receive ${bak_ds}@${inc_snapshot} ;; - false) loc_name_ds=(${(@s:/:)loc_ds}); loc_name_ds=$loc_name_ds[-1] # Получить имя датасета без пути - bak_ds="$bak_ds/$loc_name_ds" - zfs send -V ${loc_ds}@${inc_snapshot} | ssh "$backup_user@${backup_server}" zfs receive ${bak_ds} ;; + false) zfs send -V ${loc_ds}@${inc_snapshot} | ssh "$backup_user@${backup_server}" zfs receive ${bak_ds} ;; esac TS2=$(date +%s) (( i_task++ )) @@ -254,7 +254,7 @@ if [[ $work = "y" || $work = "Y" ]]; then time_part_of_percent=$(( now - time_changed_percent_value )) # Время с последнего изменения процента estimated_total=$(( 100 / percent * elapsed )) # Всего времени на задачу estimated_remain=$(( estimated_total - elapsed - time_part_of_percent )) # Осталось времени на задачу - if (( estimated_remain >= 86400 )) || (( estimated_total >= 86400 )); then + 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 )) echo -n "\033[2K\r$progress $estimated_remain_days д. $(date -d@$estimated_remain_time -u '+%H:%M.%S') ост. / $estimated_total_days д. $(date -d@$estimated_total_time -u '+%H:%M.%S') " @@ -274,7 +274,7 @@ if [[ $work = "y" || $work = "Y" ]]; then rm /dev/shm/backup_time_stamp exec >&1 >>$LOGFILE 2>&1 # Вывод на экран и в файл - echo "\n--- Все завершено за $(date -d@$(($TS2-$TS0)) -u '+%H:%M.%S') ---" + echo "\n--- Все завершено за $(date -d@$(( $(date +%s) - $TS0 )) -u '+%H:%M.%S') ---" exec 1>&6 6>&- # Restore stdout and close file descriptor #6.