Rsync auslösen, indem Sie einfach ein USB-Laufwerk anschließen?

4594
Mister IT Guru

Ich möchte wissen, ob es möglich ist, automatisch mounten und rsync hochzuladen, um ein USB-Laufwerk mit einem Verzeichnis zu synchronisieren? Insbesondere möchte ich so viele Daten kopieren, wie das Laufwerk aufnehmen kann, und nur die ältesten Dateien löschen, wenn Speicherplatz benötigt wird. Ich würde davon ausgehen, dass ich so etwas mit einem Skript machen würde, aber mein Problem ist, wo ich anfangen soll! Alle Kommentare und Vorschläge sind dankbar.

Danke dir

6

2 Antworten auf die Frage

1
Dan M.

Wahrscheinlich wollen Sie sich eine Udev-Regel ansehen, um ein Skript zu starten. Das Beste an udev-Regeln ist, dass Sie sperren können, welches USB-Laufwerk für die Sicherung verwendet wird, sodass nicht jedes USB-Laufwerk es auslöst.

Der erste Schritt ist, Ihre Udev-Regel in Gang zu bringen:

Hier ist ein großartiges Tutorial zum Schreiben von udev-Regeln
und hier ist ein anderes

Dann können Sie mit Ihrem Scripting-Aspekt fortfahren. Der erste Link behandelt ein wenig das Starten des Skripts von udev, so dass Sie nur rsync von dort aus aufrufen müssen.

man: rsync enthält viele Informationen zur Verwendung.

Ein weiterer Link, den ich gerade posten wollte: https://wiki.archlinux.org/index.php/Udev Der Abschnitt Tipps & Tricks enthält interessante Beispiele. matthias krull vor 13 Jahren 0
@mugen kenichi - Sie müssen die Arch-Dokumentation lieben. Dan M. vor 13 Jahren 0
0
Linker3000

Hier ist der Kern eines Backup-Jobs, der nach einer eingebauten USB-Festplatte sucht. Es wäre leicht, es für andere Zwecke zu modifizieren und dann über cron anzurufen oder es im Hintergrund mit einer Schlafschleife um die Schlüsselbereiche auszuführen. Mit diesem Skript können Sie angeben, wo sich der USB-Datenträger wahrscheinlich befindet (sdd). Es ist jedoch recht einfach, ihn so zu ändern, dass er anhand der Laufwerk-ID nach einem USB-Stick sucht.

Die Quelle der Sicherung ist ein über NFS bereitgestelltes Laufwerk, das jedoch offensichtlich geändert oder entfernt werden kann.

In der Mitte befindet sich eine for-Schleife, die die zu sichernden Positionen angibt

 # V1.01 # Uses variable for usbdisk partition  started=`date` usbdisk='sdd1'  if [ $(mount | grep -c /mnt/usbdisk) != 1 ]; then echo "USB disk is not mounted - trying to mount..." mount /dev/$usbdisk /mnt/usbdisk if [ $(mount | grep -c /mnt/usbdisk) != 1 ]; then echo "USB disk still not mounted - alerting admins and quitting" echo "USB disk is not mounted on TUX9 so backup cannot continue" | mail -s "TUX9 backup problem" myemailaddress@here.tld exit 1 fi fi  if [ $(mount | grep -c /mnt/nas) != 1 ]; then echo "NAS NFS mount is not present - trying to mount..." mount -t nfs -o proto=tcp,port=2049 mynas3:nas /mnt/nas if [ $(mount | grep -c /mnt/nas) != 1 ]; then echo "NAS NFS mount is still not present - alerting admins and quitting" echo "NAS NFS mount is not present on TUX9 so backup cannot continue" | mail -s "ASLTUX9 backup problem" myemailaddress@here.tld exit 1 fi fi  echo "All mount points present - backup starting..."  for i in /boot / /home /var /mnt/nas # for testing for i in /boot do if [ $i = "/" ]; then rsync -axv --delete root@tux8.test.lan:$i /mnt/usbdisk/backup/root elif [ $i = "/mnt/nas" ]; then rsync -axv --delete $i/ /mnt/usbdisk/backup/nas else rsync -axv --delete root@tux8.test.lan:$i/ /mnt/usbdisk/backup$i fi done  echo done, started at $started, finished at `date` echo "Backup of NAS3 and TUX8 to USB disk on TUX9 done. Started at $started, finished at `date`" | mail -s "TUX9 backup completed" myemailaddress@here.tld