- 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>
7.1 KiB
7.1 KiB
rpi — домашняя Raspberry Pi 4 (rpi.local, 192.168.10.25)
Поднята 2026-10-11. Домашний сервер за NAT: первая задача — бэкап личного OneDrive на внешний HDD. Мониторится с fr1 через pushgateway (скрейпить её снаружи нельзя — она за домашним роутером).
Железо и ОС
- Raspberry Pi 4, SD 64 ГБ (
mmcblk0), питание штатное —vcgencmd get_throttled=0x0. - Raspberry Pi OS Lite 64-bit Trixie (Debian 13), образ
2026-10-06-raspios-trixie-arm64-lite. - Headless-настройка — cloud-init, а не старые
ssh/userconf.txt: в Trixie Pi Imager пишетuser-data/network-configнаbootfs. Нашuser-dataсоздал пользователя, ключ, hostname, таймзону MSK. - Сеть: Ethernet, DHCP. MAC
dc:a6:32:db:b0:f9, роутер192.168.10.254. ⏳ Резерв адреса на роутере — на пользователе (см. хвосты).
Доступ
- С Mac:
ssh rpi(алиас →rpi.local, userrus, ключ~/.ssh/id_ed25519). Резолвится через mDNS (avahi в образе по умолчанию). - Только по ключу:
passwordauthentication no, уrusпароль заблокирован, sudo NOPASSWD (иначе sudo был бы недоступен вовсе).
Диски
| Устройство | Модель | Роль |
|---|---|---|
sda |
WD My Passport 4 ТБ (WD40NDZW, s/n WD-WX82D6228YCD) | ext4 backup → /mnt/backup |
| — | WD Elements 1 ТБ (WD10SDRW) | не подключён, ждёт хаба (APFS, не отформатирован) |
- fstab по UUID с
nofail,x-systemd.device-timeout=30s(stacks/rpi-backup/fstab.line): без диска малина грузится, бэкап просто пропускается (mountpoint -q). - ⚠️ Два 2.5" HDD от USB Pi 4 не тянут. Проверено 2026-10-11: при раскрутке обоих —
over-currentна всех USB3-портах; под нагрузкой 4-ТБ диск отваливался (USB disconnect) и залипал вUnit Not Ready. Один диск стабилен (20 ГБ чтения 103 МБ/с, mkfs ~60 ГБ записи без сбросов). Второй диск — только через USB3-хаб с собственным питанием. - Залипший после отвала диск лечится power-cycle всех USB (Pi 4 переключает питание портов только разом):
sudo uhubctl -l 2 -a off; sudo uhubctl -l 1-1 -a off; sleep 8; …-a on. - SMART на момент ввода: 9 897 ч, 0 переназначенных/ожидающих, Start_Stop 21 946, Load_Cycle 42 530.
Бэкап OneDrive (код — stacks/rpi-backup/)
- rclone (официальный .deb, v1.75.2 — в Debian 1.60, старый), remote
onedrive:= личный OneDrive (drive_type personal). Токен — в~rus/.config/rclone/rclone.conf(600), только на малине. Получен черезrclone authorize onedriveна Mac. onedrive-backup(таймер каждые 4 ч,00/4:30):rclone syncв/mnt/backup/onedrive/current, всё удалённое/перезаписанное в облаке — вarchive/<ts>/навсегда (пользователь хочет иметь всё, что когда-либо было в OneDrive). Хэши архива —manifests/archive-<ts>.qxh, лог каждого прогона —logs/sync-<ts>.log(INFO: поштучно что скачано/убрано в архив).- Целостность: rclone сверяет QuickXorHash каждого скачанного файла с OneDrive;
onedrive-verify(вс 05:00) перечитывает весь HDD:rclone checkcurrent↔облако +rclone checksumarchive↔манифесты. Отчёт —logs/verify-<ts>*. - Оба юнита под общим
flock /run/lock/onedrive-backup.lock— не идут параллельно и не убивают друг друга. - ⚠️ Файл, загруженный и удалённый в облаке между прогонами (<4 ч), в бэкап не попадёт.
- ⚠️
Personal Vaultисключён — rclone через API туда не ходит. - ⚠️ Архив без ротации: растёт вечно. Скрипт выходит с кодом 2 при заполнении >90 % (→ алерт BackupFailed), плюс HostDisk* если когда-то поставим node-exporter.
- Первая полная выгрузка (368 ГБ) запущена 2026-10-11 ~13:13, ~27 МБ/с (упор в домашний канал).
Мониторинг → fr1
smartd(stacks/rpi-backup/smartd.conf):DEVICESCAN -d removable,-n standby,q(не будить диск), короткий самотест сб 03:00, длинный 1-го числа 05:00. ⚠️-d satс DEVICESCAN не работает («Not a SAT device») — тип моста пусть определяет сам.smart-metrics(таймер 15 мин): smartctl-n standby→ метрикиsmart_*→ jobsmart. Спящий диск не будится: отдаются значения из кэша/var/lib/smart-metrics/+smart_disk_standby=1.backup-metrics <job>—ExecStopPost=+у юнитов бэкапа:backup_last_exit_code,backup_last_run_timestamp,backup_last_success_timestamp(время успеха хранится локально в/var/lib/backup-metrics/, т.к. PUT заменяет группу целиком).- Доставка:
metrics-push <job>= ssh с ключом/etc/metrics-push/id_ed25519(root, 600) наrus@161.97.93.252; host key fr1 закреплён в/etc/metrics-push/known_hosts. На fr1 ключ ограничен forced command (servers/fr1.md→ Мониторинг). - Алерты — группа
rpiвstacks/monitoring/prometheus/rules/alerts.yml.
Открытые хвосты (на 2026-10-11)
- ⏳ Закрепить
192.168.10.25за MACdc:a6:32:db:b0:f9на роутере. - ⏳ USB3-хаб с питанием → подключить и отформатировать WD Elements 1 ТБ (вторая копия архива — сейчас копия одна).
- Нет node-exporter (CPU/RAM/диск самой малины в Prometheus не видны) — пуш через pushgateway для node-метрик неудобен; решить, нужен ли.
- Первый прогон бэкапа стартовал до появления
ExecStopPost— его итог может не дойти в метрики;backup_last_success_timestampпоявится с первого прогона по таймеру. До этогоBackupStaleмолчит (серии нет). - Через неделю снять SMART и посчитать реальный прирост Start_Stop/Load_Cycle — прогноз ресурса пока оценочный.