Minimizzare scritture su schede SD

Introduzione

Weewx scrive su disco per quanto segue:

  • Immagini e file HTML vengono generati ad ogni intervallo di archiviazione;
  • Messaggi nei file log di sistema;
  • I dati meteorologici vengono salvati nel database SQLITE.

La maggior parte delle scritture è dovuta alla generazione di report. I report vengono scritti una volta per ogni intervallo di archiviazione - 5 minuti su una tipica installazione di Weewx. Per StandardReport ciò significa circa 600 KB di scritture per intervallo di archiviazione. Weewx scrive nel file di log di sistema almeno una volta per intervallo di archiviazione, il che equivale a circa 10 KB di scritture per intervallo di archiviazione. Le scritture minori si verificano ad ogni intervallo di archiviazione quando Weewx scrive nel database SQLITE.

Per eliminare le scritture, procedere come segue:

  • Salvare i report in un file system temporaneo (tmpfs o ramdisk);
  • Salvare i log di sistema in un file system temporaneo o in un server syslog remoto;
  • Salvare i dati meteorologici su un server MYSQL remoto;
  • Disabilitare l'uso dello SWAP.

Le seguenti istruzioni sono per distribuzioni Linux simili a Debian. Per altri sistemi operativi i dettagli di implementazione variano.

Salvare i report in un file system temporaneo
  1. Aggiungi una voce a fstab
echo "weewx_reports /var/weewx/reports tmpfs size=20M,noexec,nosuid,nodev 0 0" | sudo tee -a /etc/fstab
  1. Montare manualmente il nuovo file system
sudo mkdir -p /var/weewx/reports
sudo mount -a
  1. Dì a Weewx di utilizzare il nuovo file system per i report
sudo sed -i -e 's%HTML_ROOT =.*%HTML_ROOT = /var/weewx/reports%' /home/weewx/weewx.conf
  1. Riavvia Weewx
sudo /etc/init.d/weewx stop
sudo /etc/init.d/weewx start
  1. Indica al server Web dove trovare i rapporti
sudo ln -s /var/weewx/reports /var/www/html/weewx

Crea un file in /etc/apache2/sites-available denominato weewx.conf con il testo seguente:

Alias /weewx "/var/weewx/reports"
<Directory "/var/weewx/reports">
  Options Indexes Includes FollowSymLinks
  AllowOverride None
  Require all granted
</Directory>

Quindi inserire quanto segue al terminale per abilitare il nuovo sito e riavviare il server web:

sudo a2ensite
weewx
sudo systemctl reload apache2
Salvare log su ramdisk

Disattiva il logging per iniziare:

sudo /etc/init.d/rsyslog stop

Modifica fstab per creare una posizione per i file di log e altri file di runtime, regolando le dimensioni secondo le necessità (le posizioni non dimensionate in modo specifico condivideranno la memoria disponibile):

# /run, /var/run, /run/lock, /var/run/lock will be automatically created by default - tmpfs
tmpfs		/tmp			tmpfs	defaults,noatime,nodev,nosuid,noexec,mode=0755,size=10M	    0	0
tmpfs		/var/tmp		tmpfs	defaults,noatime,nodev,nosuid,noexec,mode=0755,size=2M	    0	0
tmpfs		/var/lock		tmpfs	defaults,noatime,nodev,nosuid,noexec,mode=0755              0	0
weewx_reports	/var/weewx/reports      tmpfs   defaults,nodev,nosuid,mode=0755,size=5M                     0   0
tmpfs		/var/log	        tmpfs	defaults,noatime,nodev,nosuid,noexec,mode=0755              0   0

Utilizzare il parametro noatime per i file system EXT4.

Facoltativo: rimuovere il log esistente e l'archiviazione temporanea (in alternativa, eliminare i contenuti per liberare spazio di archiviazione):

sudo rm -Rf /tmp/*
sudo rm -Rf /var/log/*
sudo rm /var/tmp/*

Monta il nuovo spazio di archiviazione e riprendi il logging:

sudo mount -a
sudo /etc/init.d/rsyslog start

Il server web Apache non funzionerà fino a quando l'archiviazione temporanea per i registri Apache non verrà ricreata in memoria. Crea un file di script bash denominato initalize-apache-logs con il seguente contenuto:

#!/bin/bash
sudo mkdir /var/log/apache2
sudo /etc/init.d/apache2 restart

Rendilo un file eseguibile:

sudo chmod +x initalize-apache-logs

Infine, assicurati che venga eseguito ogni volta che il sistema viene avviato:

sudo crontab -e

Aggiungi questa riga alla fine:

@reboot /path/initialize-apache-logs

dove path è /home/pi/scripts o simile.

Successivamente, regola il controllo del logging tramite rsyslog. Weewx reindirizza già i log a un file dedicato: /etc/weewx/rsyslog.d/weewx.conf utilizzando un file rsyslog di configurazione. È possibile modificarlo ma non dovrebbe essere necessario:

:programname,isequal,"weewx" /var/log/weewx/weewx.log :programname,isequal,"weewx" ~
:programname,startswith,"wee_" /var/log/weewx/weewx.log :programname,startswith,"wee_" ~

Questo raccoglie i log da weewx e dai programmi che iniziano con "wee_" come wee_device. Il file viene archiviato in una posizione e utilizzato in un'altra. Per attivarlo e riavviare il logging utilizzandolo:

sudo ln -sf /etc/weewx/rsyslog.d/weewx.conf /etc/rsyslog.d
sudo /etc/init.d/rsyslog restart

Infine, una regolazione analoga è necessaria per un'altra configurazione che regola il tempo di conservazione dei file di log e altri parametri. Weewx include un file di configurazione logrotate predefinito per questo: /etc/weewx/logrotate.d/weewx.

Dovrebbe contenere:

/var/log/weewx.log {
  weekly
  missingok
  rotate 52
  compress
  delaycompress
  notifempty

# on some older systems the permissions do not propagate, so force them
# debian uses root:adm
#  create 644 root adm
# ubuntu uses syslog:adm
#  create 644 syslog adm

# on some older systems rsyslog must be restarted to send output to right file
#  sharedscripts
#  postrotate
# standard way of invoking rc scripts
#    /etc/init.d/rsyslog stop
#    /etc/init.d/rsyslog start
# on some systems a reload will work
#    /etc/init.d/rsyslog reload > /dev/null
# some ubuntu systems use upstart
#    service rsyslog restart > /dev/null
# some redhat/fedora systems have their own way
#    reload rsyslog > /dev/null 2>&1
# some debian systems do it this way
#    invoke-rc.d rsyslog reload > /dev/null
  endscript

È possibile trovare informazioni su possibili modifiche alla configurazione qui. Per attivarlo e riavviare il logging utilizzando queste impostazioni:

sudo ln -sf /etc/weewx/logrotate.d/weewx /etc/logrotate.d
sudo /etc/init.d/rsyslog restart

Entrambi questi file di configurazione devono avere i permessi 644. Se necessario:

sudo chmod 644 weewx
Salvare log su server syslog remoto
  1. Configurare un computer, ad esempio loghost.example.com, per ricevere i file di log. Modifica /etc/rsyslog.conf con qualcosa del genere:
$ModLoad imuxsock 
$ModLoad imklog
$ModLoad imudp
$UDPServerRun 514
$template FILENAME,"/var/log/%fromhost-ip%/syslog.log"
*.* ?FILENAME
  1. Riavvia il demone rsyslog sul server di destinazione
sudo /etc/init.d/rsyslog stop
sudo /etc/init.d/rsyslog start
  1. Configura il computer Weewx per inviare file di log. Modifica /etc/rsyslog.conf con questo:
*.* @loghost.example.com

Funzionerà ma è considerato obsoleto. Puoi tagliare, incollare e modificare da quanto segue (il resto è in gran parte standard nelle distribuzioni Linux):

# this is the simplest forwarding action:
*.* action(type="omfwd" target="192.168.1.X" port="514" protocol="tcp")
# it is equivalent to the following obsolete legacy format line:
*.* @@192.168.1.X:514 # do NOT use this any longer!
# Note: if the remote system is unreachable, processing will
# block here and discard messages after a while

# so a better use is
*.*  action(type="omfwd" target="192.168.1.X" port="514" protocol="tcp"
            action.resumeRetryCount="100"
            queue.type="linkedList" queue.size="10000")
# this will de-couple the sending from the other logging actions,
# and prevent delays when the remote system is not reachable. Also,
# it will try to connect 100 times before it discards messages as
# undeliverable.
  1. Riavvia il demone rsyslog sul computer Weewx
sudo /etc/init.d/rsyslog stop
sudo /etc/init.d/rsyslog start

Per i dettagli, vedere la documentazione di rsyslog:

http://www.rsyslog.com/sending-messages-to-a-remote-syslog-server/

Disattivare swap

Eseguire in un terminale il seguente comando:

sudo dphys-swapfile swapoff
Autore: harmlessdrudge