Truenas Config
Server di backup per casabolla-nas gestito da Truenas
- Motherboard: Asus M2N-VM/S
- CPU: AMD Athlon 64 X2 5000+
- RAM: 8GB DDR2 800MHz
- Scheda PCIE Sata3 4-port (Asmedia 106x)
- Kingston SSD 120GB per boot
- Kingston SSD 240GB per cache (non molto usata)
- 4x WD Black 500GB 5400rpm + 2x WD Blue 500GB 5400rpm
- OS: TrueNAS-12.0
- IP: 192.168.1.251
- ZFS: I sei dischi sono in RAID-Z1 con compressione abilitata
- SMB: unico share montabile è Backup_NAS
- Backup effettuato con
rsnapshotche gira in una jail - Per mantenere i consumi bassi accensione e spegnimento sono automatizzate (accensione tramite RP(c)i)
- IP: 192.168.1.130
- Lo share Backup_NAS viene montato in
/mnt/rsnapshot
Per fare il backup da remoto:
- La jail manda la notifica telegram di inizio backup con
rsnapshot_start.sh - La jail apre la connessione VPN con il gateway di casa
san-pietrocon la configurazioneCasa.ovpn(arriva la notifica) rsnapshoteffettua il backup degli share dicasabolla-naspuntando ai target array1_xxx secondorsnapshot.conf- La jail annuncia la fine del backup con
rsnapshot_end.sh
# rsnapshot_start.sh
PGRM=rsnapshot
HOST=truenas
CHAT_ID="657316162"
# Send notification for job started
message="<b>${PGRM}</b> (${HOST%%.*}) says:\n $(echo $'\xf0\x9f\x9b\xa0') Starting <i>daily</i>backup job..."
curl -X POST -H 'Content-Type: application/json' -d '{"chat_id":"'"${CHAT_ID}"'", "parse_mode":"HTML", "text":"'"${message}"'"}' https://api.telegram.org/bot<BOT_TOKEN>/sendMessage
# Daemonize remote connection
openvpn --config /usr/local/etc/Casa.ovpn &
# rsnapshot_end.sh
PGRM=rsnapshot
HOST=truenas
CHAT_ID="657316162"
# Send notification for job ended
message="<b>${PGRM}</b> (${HOST%%.*}) says:\n Backup job <i>daily</i> ended successfully $(echo $'\xE2\x9C\x85')"
curl -X POST -H 'Content-Type: application/json' -d '{"chat_id":"'"${CHAT_ID}"'", "parse_mode":"HTML", "text":"'"${message}"'"}' https://api.telegram.org/bot<BOT_TOKEN>/sendMessage
# Close all ovpn connections and allow shutdown
killall -15 openvpn && touch /mnt/rsnapshot/allow_shutdown
Per automatizzare le routine di backup e accensione/spegnimento sono stati programmati i seguenti cron jobs:
-
Accensione: tramite Raspberry P(c)i viene premuto il pulsante di accensione del case
- ora: 21:18, giornalmente
- TODO: sarebbe da controllare il ping per vedere se il NAS è già acceso per evitare di premere e spegnerlo
-
Daily snapshot
- ora: 21:30, giornalmente
- retention policy: 1 settimana
-
Daily backup: il comando viene lanciato dalla shell principale nella jail
-
ora: 22:00, giornalmente
jexec ioc-Rsnapshot rsnapshot daily
-
-
Weekly backup: come daily, ma solo la domenica
-
ora: 21:45, domenica
jexec ioc-Rsnapshot rsnapshot daily
-
-
Daily shutdown: per spegnere il NAS è necessario controllare periodicamente se tutte le task giornaliere sono state eseguite, perciò lo script
final_shutdown.shcontrolla se rsnapshot ha generato il fileallow_shutdown-
ora: ogni 10 minuti, giornalmente tranne il 1° e 3° giorno del mese
# final_shutdown.sh # If shutdown file is present, delete it and initiate shutdown if [ -f /mnt/BackPool/Backup_NAS/allow_shutdown ]; then rm -f /mnt/BackPool/Backup_NAS/allow_shutdown && shutdown -p now fi
-
-
Scrub: task mensile, può essere lunga se sono stati aggiunti molti file
- ora: 00:00, il terzo del mese
- tempo di latenza fra scrub: 14 giorni
- La procedura di shutdown in questo caso deve essere eseguita dopo lo scrub (che è l’ultima operazione della procedura)