“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
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”
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.sh ‘Backup‘ ‘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