#!/bin/bash # Еженедельная проверка целостности: перечитывает весь HDD и сверяет хэши # current/ — с хэшами OneDrive (ловит битые/недокачанные/лишние файлы) # archive/ — с сохранёнными манифестами (ловит порчу данных на диске) set -uo pipefail ROOT=/mnt/backup/onedrive TS=$(date +%F_%H%M) LOG="$ROOT/logs/verify-$TS.log" mountpoint -q /mnt/backup || { echo "/mnt/backup не смонтирован — пропуск"; exit 1; } rc=0 rclone check onedrive: "$ROOT/current" --exclude "/Personal Vault/**" \ --checkers 8 --combined "$ROOT/logs/verify-$TS.current.txt" \ --log-file "$LOG" --log-level NOTICE || rc=1 for m in "$ROOT"/manifests/archive-*.qxh; do [ -e "$m" ] || continue d=$(basename "$m" .qxh); d=${d#archive-} rclone checksum quickxor "$m" "$ROOT/archive/$d" --log-file "$LOG" --log-level NOTICE || { echo "архив $d: несовпадение"; rc=1; } done grep -vc "^=" "$ROOT/logs/verify-$TS.current.txt" | xargs echo "расхождений в current:" [ $rc -eq 0 ] && echo "OK: целостность подтверждена" || echo "ЕСТЬ РАСХОЖДЕНИЯ — см. $LOG и verify-$TS.current.txt" exit $rc