đŸ Sauvegarde dĂšs le branchement avec Systemd
Introduction
Dans lâarticle sur mon processus de gestion de photos, je notais que je nâavais pas poussĂ© lâautomatisation Ă fond sur la partie sauvegardes du contenu des cartes avec le NAS. Câest maintenant chose faite. Je vais donc dans cette logique, expliquer ici comment on peut facilement gĂ©rer ce type dâautomatisation avec udev et systemd.
Enregistrement automatique de carte sd
Le principe est assez simple :
- Je branche une carte SD Ă mon NAS.
- La carte est détecté et est monté par le systÚme.
- Le systĂšme dĂ©marre la sauvegarde, ici avec le logiciel `phockup qui me trie en mĂȘme temps le tout.
- Le systÚme démonte la carte automatiquement lorsque la sauvegarde est terminé.
Créer une rÚgle Udev
Systemd nâest pas capable par lui-mĂȘme dâĂ©couter les
évÚnements provenant des périphériques. Le logiciel
permettant cela est udev. Il faut donc rajouter une nouvelle
rĂšgle .rules
dans le dossier
/etc/udev/rules.d/
.
-
la commande
udevadm monitor
permet dâĂ©couter les Ă©vĂšnements Udev, elle nous permet ainsi de pouvoir constater que lâĂ©vĂšnement de branchement/dĂ©branchement de la carte est bien dĂ©fini. Cela me permet ainsi de dĂ©couvrir que le peripheral de carte SD, est, dans mon cas/dev/mmcblk0
. -
Il est possible dâen savoir plus tant que le pĂ©riphĂ©rique est branchĂ© avec la commande :
udevadm info --query=all --name=<devname>
, elle retourne plein dâinformations par pĂ©riphĂ©rique quâon pourra ensuite utilisĂ© pour notre rĂšgle.
đ Note : jâai volontairement affichĂ© ici que quelques rĂ©sultats de la commande.
$ udevadm info --query=all --name=/dev/mmcblk0
âŠ
N: mmcblk0
âŠ
E: SUBSYSTEM=block
âŠ
E: DEVNAME=/dev/mmcblk0
âŠ
$ udevadm info --query=all --name=/dev/mmcblk0p1
âŠ
N: mmcblk0p1
âŠ
E: SUBSYSTEM=block
âŠ
E: DEVNAME=/dev/mmcblk0p1
Il est assez facile dans le cas présent de bien filtré dans mon cas :
/etc/udev/rules.d/20-automount_sd_cards.rules
# Automount sd card on insertion
ACTION!="remove", SUBSYSTEM=="block", KERNEL=="mmcblk0p*", ENV{SYSTEMD_WANTS}+="mnt-sdcard.mount"
Ce qui signifie :
- Si une action provenant dâun pĂ©riphĂ©rique de systĂšme
block dâun pĂ©riphĂ©rique donc le nom kernel commence par
mmcblk0p
(une partition de mmcblk0) active un Ă©vĂšnement qui nâest pas âremoveâ, alors, on demande Ă activer lâunitĂ© systemdmnt-sdcard.mount
đ Note : Il est
prĂ©fĂ©rable pour des raisons de fiabilitĂ© dâutilisĂ©
ACTION!="remove"
plutĂŽt que
ACTION=="add"
.
Point de montage
Les points de montages avec systemd peuvent ĂȘtre aussi
bien créé avec des fichiers .mount
quâavec une
syntaxe /etc/fstab
. Aucune des deux méthodes
nâest plus valable. La mĂ©canique de .mount
Ă
lâavantage/le dĂ©savantage de produire des fichiers sĂ©parer
pour chaque point de montage, ce qui est Ă la fois plus
complexe, mais bien plus pratique, notamment si vous cherchez
Ă empaqueter la configuration.
Attention le nommage doit âcorrespondreâ au point de
montage ainsi mnt-sdcard
correspond Ă
/mnt/sdcard
/etc/systemd/system/mnt-sdcard.mount
[Unit]
Description=Mount SD Card
# liaison forte Ă save_photos.service,
# - Demande que save_photos.service soit activé
# - s'arrĂštera quand save.photos.service s'arrĂȘtera.
BindsTo=save_photos.service
[Mount]
What=/dev/mmcblk0p1
Where=/mnt/sdcard
# On préfÚrera ne pas monter la carte en écriture.
Options=ro
Avec ce point de montage, systemd sait maintenant, quâen
cas dâactivation de mnt-sdcard.mount
:
- quâil doit monter la 1Ă©re partition de
mmcblk0
,mmcblk0p1
dans/mnt/sdcard
. - quâil doit la monter en lecture seule.
- quâil doit dĂ©marrer
save_photos.service
. Les cartes SD de photos ne contenant quâune seule partition, cela rend les choses plus simples.
Service de sauvegarde
On peut maintenant faire la sauvegarde a proprement dit :
/etc/systemd/system/save_photos.service
[Unit]
# liaison forte Ă mnt-sdcard.mount
# - Demande que mnt-sdcard.mount soit activé.
# - s'arrĂštera quand mnt-sdcard.mount s'arrĂȘtera.
# - On met une relation d'ordre pour que le montage s'execute avant.
After=mnt-sdcard.mount
BindsTo=mnt-sdcard.mount
# On empĂȘche le dĂ©marrage manuel, seul mnt-sdcard.service doit dĂ©marrer ce service
RefuseManualStart=true
[Service]
# on démarre le service avec les droits utilisateur
User=inkey
# le type oneshot permet facileent de cumuler les commandes
Type=oneshot
# Photos
ExecStart=/home/inkey/.local/bin/phockup /mnt/sdcard/ /home/inkey/Images/Photos/ -c 6 --progress --file-type image
# Video
ExecStart=/home/inkey/.local/bin/phockup /mnt/sdcard/ /home/inkey/Vidéos/Perso/ -c 6 --progress --file-type video
đ Note : jâai installĂ© phockup dans
$HOME/.local/bin
pour le moment
Aller plus loin ?
Notification
Le systÚme ici ne notifie ni quand la copie est démarré ni
quand elle est finie. Pour ma part, jâai complĂ©tĂ© ce
mĂ©canisme avec des commandes qui me notifie avec xmpp. Câest
trĂšs facile avec ExecStartPre
et
ExecStartPost
.
SĂ©curisation
Si vous voulez vous amuser un peu, vous pouvez sécuriser
un peu plus le service Ă lâaide de: systemd-analyze
security save_photos.service
MĂ©canisme de Sauvegarde de donnĂ©es hors-ligne (âbackupâ)
La mĂ©canique pourrait ĂȘtre ajustĂ© pour gĂ©rer un systĂšme de sauvegarde du contenu du NAS :
- on branche un disque
- le systĂšme dĂ©tecte quâil sâagit dâun disque de sauvegarde, probablement Ă lâaide dâun label de partition.
- la sauvegarde commence.
- la sauvegarde se termine et le disque est démonté automatiquement
Câest une mĂ©thode Ă la fois simple et efficace pour pouvoir faire des sauvegardes et sâassurer de cette façon que la sauvegarde est bel et bien offline.
Conclusion
Il est assez facile de gĂ©rer les points de montage avec systemd pour ce type dâusage. Bref Systemd, câest sympa, câest puissant, nâhĂ©sitez pas Ă jouer avec đ.