Outils pour utilisateurs

Outils du site


usbbackup:backups_automatiques_sur_disque_usb_insere

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
usbbackup:backups_automatiques_sur_disque_usb_insere [2021/11/09 14:51] – créée ghussonusbbackup:backups_automatiques_sur_disque_usb_insere [2024/08/28 07:51] (Version actuelle) ghusson
Ligne 8: Ligne 8:
 <code> <code>
  
-ACTION=="add", KERNEL=="sd?[0-9]", SUBSYSTEM=="block", RUN+="/opt/usb_backup.sh"+ACTION=="add", KERNEL=="sd?1", SUBSYSTEM=="block", RUN+="/usr/bin/systemctl --no-block start usb_backup@%k.service"
  
 </code> </code>
- 
  
  
Ligne 25: Ligne 24:
 #!/bin/bash #!/bin/bash
 # apt install beep udisks2 # apt install beep udisks2
- +  
 +  
 +LOG_FILE=$0.log 
 +# CHANGEME :::: 
 +PARTITION_LABEL="backuplgc" 
 +MOUNT_POINT="/mnt/usb_backup_backuplgc" 
 +RSYNC_PATHS[0]="/mnt/pve/hdd_8to/dump/" 
 +RSYNC_PATHS[1]="/etc/" 
 +RSYNC_PATHS[2]="/opt/" 
 +RSYNC_PATHS[3]="/root/" 
 +  
 + 
 horoDate() horoDate()
 { {
   echo $(date "+%Y%m%d-%H%M%S")   echo $(date "+%Y%m%d-%H%M%S")
 } }
 +  
 + 
 function uptime_int() function uptime_int()
 { {
Ligne 50: Ligne 60:
   fi   fi
 } }
 +  
 +  
 errorBeep() errorBeep()
 { {
   beep  -f 220  -l 800 -d 200 -r 4   beep  -f 220  -l 800 -d 200 -r 4
 } }
 +  
 + 
 tooSoonBeep() tooSoonBeep()
 { {
   beep  -f 1600  -l 100 -d 20 -r 4   beep  -f 1600  -l 100 -d 20 -r 4
 } }
- +  
- + 
 victoryBeep() victoryBeep()
 { {
Ligne 93: Ligne 104:
      -n -f 1047 -l 1000      -n -f 1047 -l 1000
  }  }
 + 
  
- + echo "===============================================================================" >> $LOG_FILE 
- +echo "$(horoDate) New usb device detected: $1." >> $LOG_FILE 
-LOG_FILE=$0.log + 
-PARTITION_LABEL="backuplgc" +
-MOUNT_POINT="/mnt/usb_backup_backuplgc" +
-RSYNC_PATHS[0]="/mnt/pve/hdd_8to/dump/" +
-RSYNC_PATHS[1]="/etc" +
-RSYNC_PATHS[2]="/opt" +
-RSYNC_PATHS[3]="/root" +
- +
-echo "===============================================================================" >> $LOG_FILE +
-echo "$(horoDate) New usb device detected: $DEVNAME." >> $LOG_FILE +
 if [ $(uptime_int) -lt 120 ]; then if [ $(uptime_int) -lt 120 ]; then
   echo "$(horoDate) Uptime too low, not running script." >> $LOG_FILE   echo "$(horoDate) Uptime too low, not running script." >> $LOG_FILE
Ligne 112: Ligne 114:
   exit 1    exit 1 
 fi fi
- +  
 + 
 if [ -e /dev/disk/by-label/$PARTITION_LABEL ]; then if [ -e /dev/disk/by-label/$PARTITION_LABEL ]; then
   echo "$(horoDate) Partition label \"$PARTITION_LABEL\" found." >> $LOG_FILE   echo "$(horoDate) Partition label \"$PARTITION_LABEL\" found." >> $LOG_FILE
Ligne 121: Ligne 123:
     for RSYNC_PATH in ${RSYNC_PATHS[*]}; do     for RSYNC_PATH in ${RSYNC_PATHS[*]}; do
       echo "$(horoDate) Rsync "$RSYNC_PATH" to $MOUNT_POINT/$(basename $RSYNC_PATH)">> $LOG_FILE       echo "$(horoDate) Rsync "$RSYNC_PATH" to $MOUNT_POINT/$(basename $RSYNC_PATH)">> $LOG_FILE
-      rsync -aAX "$RSYNC_PATH" $MOUNT_POINT/$(basename $RSYNC_PATH) >> $LOG_FILE 2>&+      rsync -aAX --delete --delete-before "$RSYNC_PATH" $MOUNT_POINT/$(basename $RSYNC_PATH) >> $LOG_FILE 2>&
     done     done
-    sync 
-    sync 
     echo "$(horoDate) Backup ended, unmounting partition, shutting off disk and signal end of script." >> $LOG_FILE     echo "$(horoDate) Backup ended, unmounting partition, shutting off disk and signal end of script." >> $LOG_FILE
     sync     sync
     sync     sync
     umount $MOUNT_POINT >> $LOG_FILE 2>&1     umount $MOUNT_POINT >> $LOG_FILE 2>&1
-    #umount "/dev/disk/by-label/$PARTITION_LABEL" >> $LOG_FILE 2>&1 
-    #udisksctl unmount --block-device "/dev/disk/by-label/$PARTITION_LABEL" --force >> $LOG_FILE 2>&1 
     sync     sync
     sync     sync
 +    echo "$(horoDate) unmounting done" >> $LOG_FILE
 +    echo -e "Script de backup termine correctement :\n\n\n$(tail -n 10 $(echo $LOG_FILE))" | mail -s "[$(hostname -f)] USB backup script : OK" root
 +    victoryBeep
     udisksctl power-off --block-device $(readlink -f "/dev/disk/by-label/backuplgc" | sed -e 's/[- 0-9]*$//') >> $LOG_FILE 2>&1     udisksctl power-off --block-device $(readlink -f "/dev/disk/by-label/backuplgc" | sed -e 's/[- 0-9]*$//') >> $LOG_FILE 2>&1
-    #udisksctl power-off --block-device "/dev/disk/by-label/$PARTITION_LABEL" >> $LOG_FILE 2>&1 
-    #udisksctl power-off --block-device "/dev/sdd" >> $LOG_FILE 2>&1 
-    echo -e "Script de backup termine correctement :\n\n\n$(tail -n 10 $(echo $LOG_FILE))" | mail -r "root@$(hostname -f)" -s "[$(hostname -f)] USB backup script : OK" root 
-    victoryBeep 
     exit 0     exit 0
   else   else
     echo "$(horoDate) Cannot mount /dev/disk/by-label/$PARTITION_LABEL on $MOUNT_POINT, end of script." >> $LOG_FILE     echo "$(horoDate) Cannot mount /dev/disk/by-label/$PARTITION_LABEL on $MOUNT_POINT, end of script." >> $LOG_FILE
-    echo -e "Script de backup termine AVEC PROBLEMES :\n\n\n$(tail -n 10 $(echo $LOG_FILE))" | mail -r "root@$(hostname -f)" -s "[$(hostname -f)] /!\\ USB backup script : KO /!\\" root+    echo -e "Script de backup termine AVEC PROBLEMES :\n\n\n$(tail -n 10 $(echo $LOG_FILE))" | mail -s "[$(hostname -f)] /!\\ USB backup script : KO /!\\" root
     errorBeep     errorBeep
     exit 2     exit 2
Ligne 147: Ligne 144:
 else else
   echo "$(horoDate) Partition label \"$PARTITION_LABEL\" no found, end of script." >> $LOG_FILE   echo "$(horoDate) Partition label \"$PARTITION_LABEL\" no found, end of script." >> $LOG_FILE
-  echo -e "Script de backup termine AVEC PROBLEMES :\n\n\n$(tail -n 10 $(echo $LOG_FILE))" | mail -r "root@$(hostname -f)" -s "[$(hostname -f)] /!\\ USB backup script : KO /!\\" root+  echo -e "Script de backup termine AVEC PROBLEMES :\n\n\n$(tail -n 10 $(echo $LOG_FILE))" | mail -s "[$(hostname -f)] /!\\ USB backup script : KO /!\\" root
   errorBeep   errorBeep
   exit 3   exit 3
-fi+
  
 </code> </code>
Ligne 157: Ligne 154:
  
  
-===== Changer le comportement de systemd-udev ===== +===== Ajouter le service systemd =====
- +
-Si on ne fait pas ça, il est alors impossible d'arrêter proprement le disque USB à la fin du backup, à cause du namespace particulier utilisé par systemd pour le points de montage !+
  
-    systemctl edit systemd-udevd+    systemctl edit --full --force usb_backup\@.service
  
 Mettre : Mettre :
  
 <code> <code>
 +
 +[Unit]
 +Description=Backup to USB Flash Disk
 +BindsTo=dev-%i.device
  
 [Service] [Service]
-PrivateMounts=no+Type=simple 
 +ExecStart=/opt/usb_backup.sh %I
  
 </code> </code>
Ligne 176: Ligne 176:
 <code> <code>
 systemctl daemon-reload systemctl daemon-reload
 +udevadm control --reload-rules && udevadm trigger
 systemctl restart systemd-udevd systemctl restart systemd-udevd
 </code> </code>
 +
 +
 +Pour créer un disque de backup :
 +  * faire une table de partition GPT
 +  * créer 1 partition de type Linux, avec le label correspondant à $PARTITION_LABEL
 +  * formater la partition
 +  * tester
 +
  
usbbackup/backups_automatiques_sur_disque_usb_insere.1636469485.txt.gz · Dernière modification : 2021/11/09 14:51 de ghusson