rpi: бэкап OneDrive на HDD + SMART/бэкап-метрики через pushgateway на fr1

- servers/rpi.md: новая домашняя Raspberry Pi 4 (Trixie, cloud-init), HDD 4 ТБ,
  грабли с питанием двух HDD от USB
- stacks/rpi-backup: rclone sync с вечным архивом версий, еженедельная сверка
  хэшей, smartd, пуш SMART и статуса бэкапов
- fr1: pushgateway (127.0.0.1:9091), приём по SSH через forced command
  ~/bin/pushgw-ingest, алерты группы rpi

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
gilfanovr
2026-10-11 13:28:20 +03:00
co-authored by Claude Opus 5.5
parent 3604e843c8
commit d1269162e7
20 changed files with 339 additions and 2 deletions
@@ -0,0 +1,14 @@
[Unit]
Description=OneDrive -> HDD backup (rclone)
Wants=network-online.target
After=network-online.target
RequiresMountsFor=/mnt/backup
[Service]
Type=oneshot
User=rus
ExecStart=/usr/bin/flock /run/lock/onedrive-backup.lock /usr/local/bin/onedrive-backup
ExecStopPost=+/usr/local/bin/backup-metrics backup_onedrive
Nice=10
IOSchedulingClass=idle
TimeoutStartSec=infinity
@@ -0,0 +1,10 @@
[Unit]
Description=OneDrive backup every 4h
[Timer]
OnCalendar=*-*-* 00/4:30
RandomizedDelaySec=5m
Persistent=true
[Install]
WantedBy=timers.target
@@ -0,0 +1,14 @@
[Unit]
Description=OneDrive backup integrity check
Wants=network-online.target
After=network-online.target onedrive-backup.service
RequiresMountsFor=/mnt/backup
[Service]
Type=oneshot
User=rus
ExecStart=/usr/bin/flock /run/lock/onedrive-backup.lock /usr/local/bin/onedrive-verify
ExecStopPost=+/usr/local/bin/backup-metrics backup_onedrive_verify
Nice=15
IOSchedulingClass=idle
TimeoutStartSec=infinity
@@ -0,0 +1,9 @@
[Unit]
Description=Weekly OneDrive backup integrity check
[Timer]
OnCalendar=Sun *-*-* 05:00
Persistent=true
[Install]
WantedBy=timers.target
@@ -0,0 +1,8 @@
[Unit]
Description=Push SMART metrics to pushgateway on fr1
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/smart-metrics
@@ -0,0 +1,9 @@
[Unit]
Description=SMART metrics push every 15 min
[Timer]
OnBootSec=2min
OnUnitActiveSec=15min
[Install]
WantedBy=timers.target