Im Nachgang zu dem Thema unter viewtopic.php?t=188919#p1352762 habe ich nun eine USB Festplatte tauschen müssen da eine der vorhandenen seltsame Geräusche von sich gab und das Backup immer länger dauerte.
Ok, dachte ich, no problem...
Seltsamerweise gibt die neue Platte (Barracuda 2TB) keine Seriennummer aus wenn ich mit udevadmin nachsehe. Da musste ich mir etwas anderes für meine udev rule überlegen. Mein Plan, einfach die neue Platte/Partition zu labeln (e2label) / (Backup1 / Backup2) und udev/systemd/script dementsprechend anzupassen.
Der Vorteil ist, dass ich, wenn notwendig, einfach eine neue Platte mit entsprechenden Label, Backup1-9, einbauen kann und ein Backup wird automatisiert durchgeführt ohne dass ich irgendwelche scripte oder config's anpassen muss.
Dabei habe ich gleich ein neues Feature eingebaut, wenn nur die Platte eingehängt werden soll um zB. eine einzelne Datei zurück zu kopieren ohne dass das Backup starten soll, muss vorher eine "nobackup" Datei in /tmp angelegt werden (touch /tmp/nobackup). Im Backup script wird nach dem mount geprüft ob die Datei existiert, wenn ja, wird kein Backup durchgeführt und die Platte steht für "wasauchimmer" so zur Verfügung.
Wenn dann die Arbeiten erledigt sind wird mit einem kleinen script die Datei "nobackup gelöscht, die Platte ge-synct, ausgehängt und die Steckdose abgeschaltet. Dem normalen Backup steht nichts im Weg.
Die Dateien sind
udev rule: /etc/udev/rules.d/99-usb-backup-disk.rules
Code: Alles auswählen
ACTION=="add", KERNEL=="sd[a-z][0-9]", ENV{ID_FS_LABEL}=="Backup[0-9]", SYMLINK+="%E{ID_FS_LABEL}", TAG+="systemd", ENV{SYSTEMD_WANTS}+="backup@%E{ID_FS_LABEL}.service"
# Übergabe des Labels an den Systemd-Service ist %E{ID_FS_LABEL}
Code: Alles auswählen
[Unit]
Description=USBBackup
[Service]
# %i ist das übergebene Label
ExecStart=/bin/bash /usr/local/bin/test-udev.sh %i
[Install]
WantedBy=system.device
Das Backup script ist gekürzt, am Schluss wird noch eine Zusammenfassung via Email versendet.
Code: Alles auswählen
#!/bin/bash
# Script für ein Backup der Daten Verzeichnisse auf dem Fileserver
# Übergabeparameter $1 ist das Label der Partition e.g. Backup1
# verwendet für Symlink und Mountpoint
UDEV_DEV="/dev/$1"
UDEV_MOUNT="/media/$1"
PROC_MNT="/proc/mounts"
NO_BACKUP="/tmp/nobackup"
if [ -L "$UDEV_DEV" ]
then
/bin/mount -m $UDEV_DEV $UDEV_MOUNT
else
echo "ERROR UDEV mount Fehler" > /var/log/rsnapshot_log.log
exit
fi
if [ -f "$NO_BACKUP" ]
then
logger "Datei $NO_BACKUP existiert, kein Backup"
logger "$NO_BACKUP löschen damit Backup ausgeführt wird"
exit
fi
if [ grep -q "$UDEV_MOUNT" "$PROC_MNT" ]
then
HEUTE=$(date +"%a")
case $HEUTE in
Mo|Di|Mi|Do|Fr|Sa)
TYPE="before daily"
disk_usage
logger "rsnapshot daily ..."
/usr/bin/perl /usr/bin/rsnapshot daily
;;
So)
TYPE="before weekly"
disk_usage
/usr/bin/perl /usr/bin/rsnapshot daily
sleep 2
/usr/bin/perl /usr/bin/rsnapshot weekly
;;
esac
EOM=$(date -d "-$(date +%d) days month" +%d)
HEUTE=$(date +%d)
if [ "$HEUTE" == "$EOM" ]
then
TYPE="before monthly"
disk_usage
/usr/bin/perl /usr/bin/rsnapshot monthly
fi
.... usw
Gruss
gugus