Au boulot on utilise un NAS Synology pour gérer nos sauvegardes externes mais aussi en prendre une copie sur un disque usb que j'emmène tout les soirs avec moi. Dans l'interface de DSM il est possible de définir une destination qui correspond à ce disque pour lui attribuer un plan de sauvegarde. Le problème est qu'il faut définir une heure de lancement ce qui m'arrange pas puisque j'y pense pas forcement tout de suite et puis si c'est pas moi qui le branche je ne veux pas que la personne est à ce connecter sur l'interface web... La solution : les règles udev.
Pour commencer il faut brancher votre disque sur le Synology, connectez-vous et aller dans "Sauvegarde et réplication", dans le menu de gauche sélectionnez "Destination de la sauvegarde" puis créez une nouvelle destination qui va correspondre à votre disque dur USB.
Sur mon synology mon disque usb correspond à usbshare2. Donnez un nom à votre destination.
Dans la liste de gauche sélectionnez "Sauvegarder" puis créez une sauvegarde de type "Tâche de sauvegarde des données". Dans la liste déroulante choisissez le nom de la destination que vous avez créé à l'étape précédente.
Choisissez les répertoires à sauvegarder sur votre NAS
Paramétrez la sauvegarde de cette manière. Le champ "Répertoire" correspond au répertoire de destination sur votre disque USB.
Maintenant nous allons mettre en place la règle udev qui va vous permettre de lancer le plan de sauvegarde au branchement du disque dur USB. Vous devez vous connecter en ssh sur votre NAS, si vous ne savez pas faire aller sur cette page : http://blog.e-nnov.fr/synology-dsm/service-ssh/ et pour vous connectez depuis windows télécharger Putty : http://the.earth.li/~sgtatham/putty/latest/x86/putty.exe.
Les règles udev sont stockés dans le répertoire /lib/udev/rules.d, mais avant il va nous falloir un peu d'informations sur votre disque. Nous allons utiliser la commande udevadm, l'idée est de récupérer le numéro de série de votre disque et d'autres informations de façon à appliquer la règle uniquement à ce disque.
Dabord le node utilisé par votre disque dur pour être utilisé par le système :
dmesg [7255764.909797] scsi 70:0:0:0: Direct-Access WD Elements 10B8 1012 PQ: 0 ANSI: 6 [7255764.919927] sd 70:0:0:0: Attached scsi generic sg2 type 0 [7255764.922143] sd 70:0:0:0: [sdq] Spinning up disk.........ready [7255770.980199] sd 70:0:0:0: [sdq] 3906963456 512-byte logical blocks: (2.00 TB/1.81 TiB) [7255770.988745] sd 70:0:0:0: [sdq] Write Protect is off [7255770.993828] sd 70:0:0:0: [sdq] Mode Sense: 47 00 10 08 [7255770.994373] sd 70:0:0:0: [sdq] No Caching mode page present [7255771.000153] sd 70:0:0:0: [sdq] Assuming drive cache: write through [7255771.008008] sd 70:0:0:0: [sdq] No Caching mode page present [7255771.013792] sd 70:0:0:0: [sdq] Assuming drive cache: write through [7255771.075722] sdq: sdq1 [7255771.117117] sd 70:0:0:0: [sdq] No Caching mode page present [7255771.122899] sd 70:0:0:0: [sdq] Assuming drive cache: write through [7255771.129288] sd 70:0:0:0: [sdq] Attached SCSI disk
Mon disque est reconnu sur le node sdq, sdq1 est la parition du disque. Adaptez à votre installation. Un point important si vous branchez votre disque sur un autre port usb de votre Synology il sera reconnu sur un autre node donc il faut absolument le brancher sur le même port usb.
Maintenant udev :
udevadm info -a -p $(udevadm info -q path -n /dev/sdq) ... looking at parent device '/devices/pci0000:01/0000:01:00.0/usb4/4-2': KERNELS=="4-2" SUBSYSTEMS=="usb" DRIVERS=="usb" ATTRS{configuration}=="" ATTRS{bNumInterfaces}==" 1" ATTRS{bConfigurationValue}=="1" ATTRS{bmAttributes}=="80" ATTRS{bMaxPower}=="224mA" ATTRS{urbnum}=="4597082" ATTRS{idVendor}=="1058" ATTRS{idProduct}=="10b8" ATTRS{bcdDevice}=="1012" ATTRS{bDeviceClass}=="00" ATTRS{bDeviceSubClass}=="00" ATTRS{bDeviceProtocol}=="00" ATTRS{bNumConfigurations}=="1" ATTRS{bMaxPacketSize0}=="9" ATTRS{speed}=="5000" ATTRS{busnum}=="4" ATTRS{devnum}=="64" ATTRS{devpath}=="2" ATTRS{version}==" 3.00" ATTRS{maxchild}=="0" ATTRS{quirks}=="0x2" ATTRS{avoid_reset_quirk}=="0" ATTRS{authorized}=="1" ATTRS{manufacturer}=="Western Digital" ATTRS{product}=="Elements 10B8" ATTRS{serial}=="575841314535344D434C3632" ...
Cette commande vous sort tout une liste de variables utilisables par udev, celles qui nous intéresse sont
ATTRS{idVendor}=="1058" ATTRS{idProduct}=="10b8" ATTRS{serial}=="575841314535344D434C3632"
Aller dans le dossier /lib/udev/rules.d
cd /lib/udev/rules.d vi 99-usb-backup-sdq.rules
99 correspond au niveau de priorités de la règle, plus le chiffre est grand et moins la règle est prioritaire. 99 permet de laisser toute les règles définit par Synology de s'éxecuter. Vi est l'éditeur de texte par défaut, pour entrer en mode insertion utiliser la touche i puis copier/coller ça dans votre fichier :
SUBSYSTEM!="block|scsi", GOTO="usb_end" ENV{DEVTYPE}=="partition", GOTO="usb_end" ACTION!="add", GOTO="usb_end" ACTION=="add",ATTRS{busnum}!="",ATTRS{devnum}!="",ATTRS{idVendor}=="1058",ATTRS{idProduct}=="10b8",ATTRS{serial}=="575841314535344D434C3632",RUN+="/usr/syno/bin/synolocalbkp --backup -k 11" LABEL="usb_end"
Adapter les valeurs ATTRS{idVendor}, ATTRS{idProduct} et ATTRS{serial}=="..." par les valeurs que vous avez récupé avec la commande udevadm.
- ACTION=="add" indique à udev que cette règle est uniquement dans le cas du banchement du disque dur.
- RUN+="/usr/syno/bin/synolocalbkp --backup -k 11" est la commande utilisé par DSM pour lancer les plans de sauvegardes, -k 11 correspond au numéro du plan dans l'interface de DSM, pour moi c'est la 11eme de la liste.
Pour enregistrer utiliser la touche esc de votre clavier puis faite :
:wq
Puis la touche entrer.
Pour recharger les règles utilisez la commande
udevadm control --reload-rules
Ejectez votre disque puis débranchez / rebranchez le. Si tout va bien vous aller avoir des erreurs comme quoi il ne trouve pas la destination. C'est normal car la règle se lance avant que le système est totalement monté le disque dur. Nous allons devoir passer par un script intermédiaire.
Allez dans le répertoire /lib/udev/script
cd /lib/udev/script
Editer ou créer le fichier backup.sdq.sh
vi backup-sdq.sh
Taper sur la touche i pour entrer en modification puis copier / coller ce code
#!/bin/sh /bin/sleep 10 MOUNT=`/bin/mount | /bin/grep sdq | /usr/bin/wc -l` CHECK=`/bin/ps | /bin/grep synolocalbkp | grep -v grep | /usr/bin/wc -l` if [ $MOUNT -eq 1 ] && [ $CHECK -eq 0 ] then /usr/syno/bin/synolocalbkp --backup -k 11 fi
Taper sur la touche esc de votre clavier puis :
:wq
Puis la touche entrer.
Rendre votre script exécutable.
chmod 755 backup-sdq.sh
Ré-éditer votre règle udev et modifier la variable RUN
SUBSYSTEM!="block|scsi", GOTO="usb_end" ENV{DEVTYPE}=="partition", GOTO="usb_end" ACTION!="add", GOTO="usb_end" ACTION=="add",ATTRS{busnum}!="",ATTRS{devnum}!="",ATTRS{idVendor}=="1058",ATTRS{idProduct}=="10b8",ATTRS{serial}=="575841314535344D434C3632",RUN+="/lib/udev/script/backup-sdq.sh" LABEL="usb_end"
Sauvegarder votre fichier et recharger les règles udev
udevadm control --reload-rules
Il ne vous reste plus qu'à éjecter votre disque, le débrancher et le rebrancher.
Pour contrôler ce qui se passe vous pouvez utiliser la commande ps et chercher une ligne dans se genre
7110 root 3992 S /bin/sh /lib/udev/script/backup-sdq.sh
Il y a deux contraintes :
- la barre de progression n'apparait pas dans l'interface web donc penser à activer les notifications par mail pour savoir lorsque c'est fini.
- si vous utilisez plusieurs disques dur vous aller devoir créer autant de plans de sauvegardes et autant de règles que de disque dur en adaptant le node utilisé votre Synology.