Udev-tux

Backup to USB-Stick per udev

closeDieser Beitrag wurde vor mehr als drei Monaten veröffentlicht. Bedenke bitte, dass die hier angebotene Information nicht mehr aktuell und gültig sein könnte. Informiere dich daher bitte auch an anderer Stelle über dieses Thema. Sollten sich neue Informationen ergeben haben, so kannst du mich auch gerne auf diese über einen Kommentar hinweisen. Vielen Dank!


Udev-tux„udev überwacht und wertet hotplug-Ereignisse aus. Finden sich dort Informationen über ein neu angeschlossenes Gerät, werden zusätzliche zu diesem Gerät vorhandene Informationen dem sysfs-Dateisystem entnommen und eine neue Gerätedatei im /dev-Verzeichnis erzeugt. Dabei ist der für die spezielle Datei verwendete Name und die Zugriffsberechtigung frei durch Regeln konfigurierbar.“ – wiki


Wir möchten ein Backup auf unseren USB-Stick durchführen, sobald wir diesen mit dem PC verbinden! Dafür müssen wir als erstes einige Infos sammeln, somit schauen wir uns folgnde Datei zeitgleich zum einstecken des USB-Speichers an.


tail -f /var/log/messages

Ausgabe:

Nov  2 22:10:30 suckup-netbook kernel: [13570.309562] scsi 5:0:0:0: Direct-Access     USB 2.0  Flash Drive      8.07 PQ: 0 ANSI: 2

Nov  2 22:10:30 suckup-netbook kernel: [13570.320160] sd 5:0:0:0: Attached scsi generic sg2 type 0

Nov  2 22:10:30 suckup-netbook kernel: [13570.338740] sd 5:0:0:0: [sdc] 3938304 512-byte logical blocks: (2.01 GB/1.87 GiB)

Nov  2 22:10:30 suckup-netbook kernel: [13570.339345] sd 5:0:0:0: [sdc] Write Protect is off

Nov  2 22:10:31 suckup-netbook kernel: [13570.342397]  sdc:

Nov  2 22:10:31 suckup-netbook kernel: [13570.778378] sd 5:0:0:0: [sdc] Attached SCSI removable disk

Somit wissen wir schon einmal, wo sich der Speicher befindet… mit dem folgendem Befehl können wir uns nun alle Partitionen anschauen….
cat /proc/partitions

… und ggf. mit dem nächsten Befehl eine neue Partition anlegen.

fdisk /dev/sda


Als nächstes wollen wir nun die spezifischen Infos vom USB-Stick abfragen:

udevadm info -a -p $(udevadm info -q path -n /dev/sdc)

Ausgabe:

looking at parent device ‚/devices/pci0000:00/0000:00:1d.7/usb1/1-3‘:

KERNELS==“1-3″

SUBSYSTEMS==“usb“

DRIVERS==“usb“

[…]

ATTRS{idVendor}==“058f“

ATTRS{idProduct}==“6387″

[…]

ATTRS{manufacturer}==“Generic“

ATTRS{product}==“Mass Storage“

ATTRS{serial}==“9D853A1BCAC440404FEF“

Um das Gerät (USB-Stick) eindeutig zu identifizieren benötigen wir nun die folgenden Angaben: „idVendor“, „idProduct“ und „serial“


sudo vim /etc/udev/rules.d/80-backup-stick.rules

KERNEL==“sd?“, ATTRS{idVendor}==“058f„, ATTRS{idProduct}==“6387„, ATTRS{serial}==“9D853A1BCAC440404FEF„, SYMLINK+=“backup-stick„, RUN+=“/home/lars/bin/bash/backup-stick.shBackup‚ ‚to_Stick'“

  • ggf. Partition mit angeben: sd?1
  • RUN+= -> muss der Pfad zu deinem Skript sein
  • idProdukt u.s.w. muss natürlich noch mit den Werten von deinem Stick angepasst werden
sudo /etc/init.d/udev restart


Als nächstes müssen wir ein Skript erstellen, welches auf einem User-Desktop per root eine Pop-Up erzeugen kann…

sudo vim /usr/local/bin/root-notify-send
#!/bin/sh
user=`whoami`
pids=`pgrep -u $user gnome-panel`
title=$1
text=$2
timeout=$3
icon=$4

if [ -z "$title" ]; then
 echo You need to give me a title >&2
 exit 1
fi
if [ -z "$text" ]; then
 text=$title
fi
if [ -z "$timeout" ]; then
 timeout=60000
fi

for pid in $pids; do
 DBUS_SESSION_BUS_ADDRESS=`grep -z DBUS_SESSION_BUS_ADDRESS \
 /proc/$pid/environ | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//'`

 if [ -z $icon ]; then
 DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS \
 notify-send -u low -t $timeout "$title" "$text"
 else
 DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS \
 notify-send -u low -t $timeout -i "$icon" "$title" "$text"
 fi
done
sudo chmod +x /usr/local/bin/root-notify-send


vim ~/bin/bash/backup-stick.sh
#!/bin/bash

su lars -c "/bin/bash root-notify-send "$1" "$2" 6000 "/home/lars/Bilder/backup.png""
mount /dev/backupstick /media/backupstick
su lars -c "/usr/bin/rsync -rlptgzu --delete-after  /home/lars/bin/ /media/backupstick"
umount /media/backupstick

An dieser Stelle macht sich natürlich ein Bild vom Stick besondes gut. ;-) Dann noch schnell ggf. einige Programme nach-installieren, ein Verzeichnis anlegen und Rechte ändern, fertig!

chmod +x ~/bin/bash/backup-stick.sh
sudo aptitude install libnotify-bin rsync
sudo mkdir /media/backupstick




Backup to Stick
Backup to Stick


Veröffentlicht von

voku

Lars Moelleken | Ich bin root, ich darf das!

  • produnis

    Das ist ja mal eine geile Sache! Vielen Dank für diesen Artikel, werde das nachher mal zu hause mit meiner USB-Platte versuchen…

  • rsync: „Ein wichtiges Merkmal von rsync ist, dass es nicht nur ganze Dateien kopieren kann, sondern auch Teile von Dateien. Wurde auf dem Quell-Datenträger eine Datei verändert, werden nur die geänderten Teile der Datei auf das Zielsystem übertragen (Delta-Kodierung). Das kann speziell bei unkomprimierten Dateitypen erhebliches Transfervolumen einsparen und die Synchronisation deutlich beschleunigen.“ – http://de.wikipedia.org/wiki/Rsync

    einige Optionen:
    -r kopiert Unterverzeichnisse
    -l kopiert symbolische Links
    -p behält Rechte bei
    -t behält Zeiten bei
    -g behält Gruppenrechte bei
    -z Dateien werden, währen der Übertragung komprimiert (macht mehr Sinn, bei der Übertragung übers Netz) ;-)
    -u Dateien, welche neuer als von der Quelle sind werden übersprungen

    wer mehr über rsync lesen möchte -> man rsync

  • Maik Pfuetzner

    Hallo,
    Backups per udev nutze ich schon lange aber die Sache mit dem Pop-Up hat mir noch gefehlt. Danke für den guten Artikel.

  • falls jemand Probleme mit den Dateirechten hat, Stick z.B. in EXT3 formatieren und folgende Zeile im Skript ändern… :-)

    su lars -c „/usr/bin/rsync -rlptgzu –delete-after /home/lars/bin/ /media/backupstick“

  • KERNEL==”sd?”, ATTRS{idVendor}==”058f“, ATTRS{idProduct}==”6387“, ATTRS{serial}==”9D853A1BCAC440404FEF“, SYMLINK+=”backup-stick“, RUN+=”/home/lars/bin/bash/backup-stick.sh ‘Backup‘ ‘to_Stick’”

    -> WordPress hat hier aus “ -> ” gemacht, daher hier noch ein korrektes Beispiel

    KERNEL==“sd?1″, ATTRS{idVendor}==“058f“, ATTRS{idProduct}==“6387″, ATTRS{serial}==“9D853A1BCAC440404FEF“, SYMLINK+=“backupstick“, RUN+=“/home/lars/bin/bash/backup-stick.sh ‚Backup‘ ‚to_Stick'“

  • loki

    Vielen Dank für den Tipp. Das ist doch ne sehr bequeme Sache um seine Arbeit zu sichern.