Le Mie Tech Guides
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Truenas Config

truenas

Server di backup per casabolla-nas gestito da Truenas

Hardware

  • 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

Software

  • 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 rsnapshot che gira in una jail
  • Per mantenere i consumi bassi accensione e spegnimento sono automatizzate (accensione tramite RP(c)i)

Jail setup

  • IP: 192.168.1.130
  • Lo share Backup_NAS viene montato in /mnt/rsnapshot

Per fare il backup da remoto:

  1. La jail manda la notifica telegram di inizio backup con rsnapshot_start.sh
  2. La jail apre la connessione VPN con il gateway di casa san-pietro con la configurazione Casa.ovpn (arriva la notifica)
  3. rsnapshot effettua il backup degli share di casabolla-nas puntando ai target array1_xxx secondo rsnapshot.conf
  4. 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

Automazione

Per automatizzare le routine di backup e accensione/spegnimento sono stati programmati i seguenti cron jobs:

  1. 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
  2. Daily snapshot

    • ora: 21:30, giornalmente
    • retention policy: 1 settimana
  3. Daily backup: il comando viene lanciato dalla shell principale nella jail

    • ora: 22:00, giornalmente

      jexec ioc-Rsnapshot rsnapshot daily

  4. Weekly backup: come daily, ma solo la domenica

    • ora: 21:45, domenica

      jexec ioc-Rsnapshot rsnapshot daily

  5. Daily shutdown: per spegnere il NAS è necessario controllare periodicamente se tutte le task giornaliere sono state eseguite, perciò lo script final_shutdown.sh controlla se rsnapshot ha generato il file allow_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
      
  6. 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)