Bij specifieke mount bash script uitvoeren

Pagina: 1
Acties:
  • 474 views sinds 30-01-2008
  • Reageer

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 21:30
Goedenavond Tweakers,

Nu gaat ik jullie eens wat vragen :) Ik heb een random USB stick (volumenaam 'STICKY') van 2GB en daar staan redelijk veel belangrijke dingen op (o.a schooldocumenten). Nu ik aan het Syndroom van Luiheid lijdt, en ik geen zin hebt om mijn schooldocumenten te synchroniseren met mijn home map, heb ik in mijn home map een symbolische link gebruikt naar /media/STICKY/School. Dit werkt perfect.

Alleen nu het probleem: Ik zou graag willen dat iedere keer als ik de stick mount of umount, dat er dan een bash script aangeroepen wordt dat de bestanden op de stick backupped. Nu kan ik wel redelijk goed bash scripten, dus dat backupproces wordt geen probleem, maar hoe moet ik een script laten uitvoeren als een specifiek volume (hier 'STICKY' dus) wordt aangekoppeld of wordt afkoppeld (alleen als ik hem dus in de computer wilt umounten, fysiek lijkt me een beetje moeilijk 8) )?

Iemand ideëen? Autorun heb ik ook al aan gedacht, maar dat doe ik liever niet. Bovendien lost dat het tweede probleem niet op. :)

Alvast bedankt,
Sebas

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025

GX

Nee.

Hm, ik kan alleen maar omwegen bedenken, bijvoorbeeld: python met inotify. Is niet moeilijk, werkt waarschijnlijk vrij goed..

  • benoni
  • Registratie: November 2003
  • Niet online
Zelf heb ik 't niet geprobeerd, maar wellicht kun je zoiets ertussen frotten bij udev:


code:
1
2
3
4
5
6
7
8
9
10
11
~# man udev
....
   Rules files
       The udev rules are read from the files located in the /etc/udev/rules.d directory or at the location specified value in the configuration file. Every line in the rules file contains at
       least one key value pair. There are two kind of keys, match and assignment keys. If all match keys are matching against its value, the rule gets applied and the assign keys get the
       specified value assigned. A matching rule may specify the name of the device node, add a symlink pointing to the node, or run a specified program as part of the event handling. If no
       matching rule is found, the default device node name is used.
....
       PROGRAM
           Execute external program. The key is true, if the program returns without exit code zero. The whole event environment is available to the executed program. The program's output
           printed to stdout is available for the RESULT key.


Addit
Inderdaad, er blijken meer mensen op het idee te zijn gekomen:
You can do this by useing udev rules:
Plug your thumbdrive in, and
cat /proc/scsi/usb-storage/*

You should find an entry for it similar to this:
Host scsi7: usb-storage
Vendor: Memorex
Product: TRAVELDRIVE 005B
Serial Number: 07751F9402C9
Protocol: Transparent SCSI
Transport: Bulk
Quirks:

Now, with either the serial number or the vendor/model combo, you can write the rule. The rule creates a symlink for the device in the /dev tree, for example, /dev/TRAVELDRIVE

create a text file in /etc/udev/rules.d called 95.usbbackup.rules. You can use a number other than 95, but keep in mind that udev processes rules in alphanumeric order, and it's better to have local rules processed last.

If you have a serial number, type a rule like this (all on one line) into the file, and save it:

BUS="usb", SYSFS{serial}="07751F9402C9", SYMLINK="TRAVELDRIVE", RUN+="/usr/local/bin/YOUR_SCRIPT.sh [Options if your script has them] "

You can string as many SYSFS{} entries together as you need to identify the drive uniquely.

BUS="scsi", SYSFS{vendor}==" Memorex", SYSFS{product}=="TRAVELDRIVE 005B ", SYMLINK="TRAVELDRIVE", RUN+="/usr/local/bin/backup-usbthumb.sh"

Your rule now fires every time you plug in your thumbdrive.
Ander commentaar op dezelfde pagina:
Warning! Do not mount flash memory with option "sync"! This will decrase the life of memory!
Ik weet niet in hoeverre dat opgaat voor modern flash-geheugen op USB, maar ik denk dat je sowieso het slimst met een rsync opdracht de backup kunt aanvullen (één richting uit synchroniseren dus).

[ Voor 47% gewijzigd door benoni op 11-12-2007 20:41 ]


  • Kalentum
  • Registratie: Juni 2004
  • Laatst online: 21:49
Zo'n udev rule gebruik ik ook om een externe HD te mounten die een backup maakt van een server. Met een udev regel kun je de naam die een device krijgt instellen zodat het altijd het zelfde is. en dus een scriptje uitvoeren. Het werkt prima.

[ Voor 11% gewijzigd door Kalentum op 12-12-2007 09:19 ]


  • autostatic
  • Registratie: April 2004
  • Laatst online: 04-03-2025
Heeft een heel artikel over gestaan in een CT van twee of drie maanden terug. Gaat idd het beste met udev.

  • jelly
  • Registratie: Mei 2006
  • Laatst online: 28-11-2025

jelly

Arch Linux

niet meer van toepassing

[ Voor 95% gewijzigd door jelly op 10-03-2008 22:44 ]

Keep it simple stupid


  • benoni
  • Registratie: November 2003
  • Niet online
In /usr/local/bin/LaCiebackup.sh toevoegen:

Bash:
1
logger -t $0 "doet het heur!"


En dan /var/log/messages in de gaten houden (tail -f) :)

  • jelly
  • Registratie: Mei 2006
  • Laatst online: 28-11-2025

jelly

Arch Linux

Bedankt loggen is geniaal :D

not solved :>

Dit is mijn uiteindelijk regel geworden:
SUBSYSTEM=="block", ACTION=="add", ENV{ID_FS_LABEL}=="LaCie_*", SYMLINK+="laciebackup", RUN+="/usr/local/bin/LaCiebackup.sh &"
Deze kijkt naar alle filesysteem labels die beginngen met "LaCie_" mijn harde schrijf heet : LaCie_Jelle .

Met deze methode wordt er doodleuk naar de map gekopierd op mijn interne schrijf die LaCie_Jelle heet bij /media . Het opvallende is dit:

cat /proc/scsi/usb-storage/*
code:
1
2
3
4
5
6
7
Host scsi3: usb-storage
Vendor: LaCie
Product: LaCie Desktop Hard Drive
Serial Number: ST3500830A 9QG534A5
Protocol: Transparent SCSI
Transport: Bulk
Quirks:


Als ik bij ubuntu kijk naar LaCie zie ik dit :
Afbeeldingslocatie: http://i237.photobucket.com/albums/ff178/jelly-linux/Schermafdruk-LaCie_Jelle-eigenschap.png

Ik probeer het nu met mijn usb stick maar beide serials daarvan werken niet, krijg daarmee ook geen script uitgevoerd :/
Regel
code:
1
 BUS="usb", SYSFS{serial}="MINI_DISK_4D6569FB3E5EF515-0:0", SYSFS{SYMLINK}="Sweex", RUN+="/home/jelle/test.sh &"

[ Voor 128% gewijzigd door jelly op 10-03-2008 17:38 ]

Keep it simple stupid


  • Rainmaker
  • Registratie: Augustus 2000
  • Laatst online: 14-07-2024

Rainmaker

RHCDS

Gewoon naar de exit status van rsync kijken?

Zoiets: (uit mn hoofd)
code:
1
2
3
4
GELUKT=rsync /mnt/stick /home/mijnuser/stickbackup
if [ ! $GELUKT -eq 0 ] ; then
  wall "Backup van stick is mislukt!"
fi

We are pentium of borg. Division is futile. You will be approximated.


  • cherwin
  • Registratie: Maart 2006
  • Niet online
Dat is echt slecht gebruik maken van if-statement's, je kan beter direct handelen op de exitcode in plaats van eerst opslaan in een variabele.

En sowieso is jouw oplossing niet de manier om dat voor elkaar te krijgen. Wat jij daar doet is een variabele "GELUKT" maken met de string "rsync" en dan probeer je 2 directory's uit te voeren.

Dit is al wat mooier (en werkt ook nog).

code:
1
2
3
4
if ! rsync -av /mnt/stick /home/$USER/backup
then
    wall 'Backup van stick is mislukt!'
fi


Voor de TS, ik neem aan dat je al hier een kijkje naar hebt genomen http://www.reactivated.net/writing_udev_rules.html

Tell me your problem, not the solution you think I should build for you.


  • Rainmaker
  • Registratie: Augustus 2000
  • Laatst online: 14-07-2024

Rainmaker

RHCDS

cherwin schreef op maandag 10 maart 2008 @ 20:50:
Dat is echt slecht gebruik maken van if-statement's, je kan beter direct handelen op de exit status in plaats van eerst opslaan in een variabele.

En sowieso is jouw oplossing niet de manier om dat voor elkaar te krijgen. Wat jij daar doet is een variabele "GELUKT" maken met de string "rsync" en dan probeer je 2 directory's uit te voeren.
backticks vergeten. Ik zeg al, ik doe t uit mn hoofd :p

En eerst opslaan in een variabele is inderdaad "slecht", maar ik vind t er overzichtelijker uitzien.

We are pentium of borg. Division is futile. You will be approximated.


  • blaataaps
  • Registratie: Juli 2001
  • Niet online
En vervolgens controleer je of de output van rsync "0" is in plaats van de exitcode die je eigenlijk wil controleren?
Pagina: 1