Page 2 sur 2

Re: Commandes à répétition

Publié : 28 févr. 2017, 16:54
par domcars0
aleph0 a écrit :Je confirme, une flash qu'elle quelle soit à un nombre maximum d'écriture possible par cellule.
...
Reste le problème de la dB.
Salut,
Pour la DB rien n'empêche d'elle aussi la mettre sur RAM disque? Il suffit de faire des backups réguliers (2 par jour par exemple) pour le cas où, de faire également ce backup au shutdown ainsi qu'un script pour la restaurer dans la RAMDisk au boot et l'affaire est jouée. Non ?
Le principe est simple :
a) on créé une partition dans la RAM Disk . On fait cela simplement dans le fichier /etc/fstab pour que cette partition soit créé (et montée) au boot, exemple, j'ajoute dans /etc/fstab la ligne :
tmpfs /var/domoticz tmpfs defaults,mode=0755,size=50m,uid=pi 0 0

Dans cet exemple on créé une partition de type tmpfs (RAMDisk) montée sur le répertoire /var/domoticz, en mode 755 (mode=0755, c.à.d rwxr_xr_x) de taille 50Mo (size=50m) et appartenant à l'utilisateur pi (uid=pi).
Une fois ecrit cette ligne dans le fichier /etc/fstab je tapes:
% sudo mkdir /var/domoticz
(mkdir = make directory. Ceci pour créer une bonne fois pour toute le répertoire sur lequel sera montée notre partition 'virtuelle')
puis
% sudo mount -a
pour monter (mount) tous ( -a = all ) les points de montages définis dans /etc/fstab qui ne seraient pas encore montés (ce qui est le cas de /var/domoticz)
Et hop j'ai un bel espace disque de 50Mo disponible dans /var/domoticz (et 50Mo de RAM en moins... ;) )

Imaginons que ma base de donnée soit une base SQLite (pour MySQL ou autre c'est un peu plus compliqué, mais faisable si on a compris le principe)... et que cette base soit à l'origine dans /home/pi/domoticz/domoticz.db.
a) J'arrête le service (appelons le domoticz) qui utilise cette BdD.
% sudo systemctl stop domoticz
b) je déplace la BdD sur ma partition virtuelle
% sudo mv /home/pi/domoticz/domoticz.db /var/domoticz/domoticz.db
c) Je créé un lien symbolique de /home/pi/domoticz/domoticz.db vers /var/domoticz/domoticz.db (ainsi mon service verra toujours sa base de donnée dans /home/pi/domoticz/domoticz.db)
% sudo ln -s /var/domoticz/domoticz.db /home/pi/domoticz/domoticz.db
(ln pour 'link' = lié , option -s pour symbolique)
d) je peux maintenant redémarrer mon service
% sudo systemctl start domoticz

Attention! En cas de crash la BdD est définitivement perdue! C'est pourquoi je la backup 2 ou 3 fois par jour (au pire j'aurais perdu 8 ou 12h d'enregistrement) , ceci à l'aide d'un crontab
% sudo crontab -e -u pi
00 */12 * * * cp -ar /var/domoticz/domoticz.db /home/pi/domoticz/domoticz.db-persistent

Au shutdown il faut également enregistrer cette BdD et la restaurer au boot. Pour cela j'utilise un petit script de service que je vous livre (je l'ai appelé 'tmpfsToPersistent', vous aurez probablement à le modifier à votre convenance).

Code : Tout sélectionner

#! /bin/bash
# /etc/init.d/tmpfsToPersistent
### BEGIN INIT INFO
# Provides:          tmpfsToPersistent
# Required-Start:    $local_fs $network $time $syslog $ntp
# Required-Stop:     $local_fs $network $time $syslog $ntp
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Script to save data at shutdown.
# Description:       Copies database from persistent to tmpfs at start and vice versa at shutdown.
### END INIT INFO
 
 
case "$1" in
  start)
    if mount | grep "tmpfs on /var/domoticz" > /dev/null; then
            cp -ar  /home/pi/domoticz/domoticz.db-persistent /var/domoticz/domoticz.db 
    else
       echo "/var/domoticz not mounted on tmpfs"
    fi
    
    ;;
  stop)
    echo "Stopping copying /var/domoticz to persistent storage"
    if mount | grep "tmpfs on /var/domoticz" > /dev/null; then
    	cp -ar /var/domoticz/domoticz.db  /home/pi/domoticz/domoticz.db-persistent
    fi
    ;;
  *)
    echo "Usage: /etc/init.d/tmpfsToPersistent {start|stop}"
    exit 1
    ;;
esac
 
exit 0  
Une fois copié ce fichier /etc/init.d/tmpfsToPersistent , vous devez l'activer:
% sudo systemctl enable tmpfsToPersistent

Et voilà ...

Attention: Cette technique est inutile (même déconseillée) si il y a peu d'écriture dans votre base de données (exemple pour un serveur web de type Wordpress, un NextCloud ou autre).

Re: Commandes à répétition

Publié : 28 févr. 2017, 19:45
par aleph0
Pas mal :-) je retiens l'idée si un jour j'ai besoin de mettre domoticz sur un pi :-) en activant les backups auto et en mettant ces backups dans le cloud ça doit donner une solution assez robuste !