26 lines
1.4 KiB
Bash
Executable File
26 lines
1.4 KiB
Bash
Executable File
#!/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/**" \
|
||
--metadata-exclude "malware-detected=true" --onedrive-av-override=false \
|
||
--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
|