Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: MikkoJP - 17.05.07 - klo:16.02
-
Joudun käsittelemään samoja tiedostoja usein eri koneilla, joten työtiedostot ovat luonnollisesti usb-tikulla.
Mitenkähän onnistuisin rakentamaan kotikoneelle systeemin, joka automaattisesti varmuuskopioi usb-muistin pöytäkoneen kovalevylle? Eli kun tökkään tikun sisään, kone synkronoisi sopivan hakemiston kanssa tuon tikun sisällön. Tietysti oivaltaen, että eri tikkujen sisällöt synkataan aina oikean hakemiston kanssa?
Onko ideoita?
m
-
Joudun käsittelemään samoja tiedostoja usein eri koneilla, joten työtiedostot ovat luonnollisesti usb-tikulla.
tietty sinä laitat työtiedostot jollekin nettipalvelimelle versionhallintaan jonne aina päivität tekemäsi muutokset ja synkkaat ne koneelle jolla alat työskentelemään. unohda vanhanaikaiset muistitikut, netti on nykyaikaa ja versionhallinta tarjoaa mukavasti myös versiohistorian ;)
Mitenkähän onnistuisin rakentamaan kotikoneelle systeemin, joka automaattisesti varmuuskopioi usb-muistin pöytäkoneen kovalevylle?
udev on se taho joka havahtuu kun koneeseen liitetään laitteita ajon aikana. jos varmuuskopiointi pitää suorittaa kun tikku tökätään koneeseen kiinni, niin se on varmaan hyvä lähtökohta.
Eli kun tökkään tikun sisään, kone synkronoisi sopivan hakemiston kanssa tuon tikun sisällön.
ja synkronointiin tietty rsync
Tietysti oivaltaen, että eri tikkujen sisällöt synkataan aina oikean hakemiston kanssa?
udev osaa erottaa eri laitteet toisistaan joten jokaiselle voi esim. tehdä oman scriptin.
ehkä joku muu keksii vielä kätevämmän tavan, mutta tuosta udevistä on varmaan ihan hyvä aloitella:
http://reactivated.net/writing_udev_rules.html (http://reactivated.net/writing_udev_rules.html)
[edit]
niin siis tietysti udev lähettää d-bus viestejä joita tutakilemalla noita liitettyjä ja poistettuja laitteita voi tutkailla myös hieman korkeammalla tasolla.
niin siis tietysti
-
tietty sinä laitat työtiedostot jollekin nettipalvelimelle versionhallintaan jonne aina päivität tekemäsi muutokset ja synkkaat ne koneelle jolla alat työskentelemään. unohda vanhanaikaiset muistitikut, netti on nykyaikaa ja versionhallinta tarjoaa mukavasti myös versiohistorian ;)
Mihin softaan viittaat versiohallinnalla?
-
tietty sinä laitat työtiedostot jollekin nettipalvelimelle versionhallintaan jonne aina päivität tekemäsi muutokset ja synkkaat ne koneelle jolla alat työskentelemään. unohda vanhanaikaiset muistitikut, netti on nykyaikaa ja versionhallinta tarjoaa mukavasti myös versiohistorian ;)
Vaan kun töitä pitää tehdä läppäreillä paikoissa ilman nettiyhteyksiä :-)
udev on se taho joka havahtuu kun koneeseen liitetään laitteita ajon aikana. jos varmuuskopiointi pitää suorittaa kun tikku tökätään koneeseen kiinni, niin se on varmaan hyvä lähtökohta.
--
udev osaa erottaa eri laitteet toisistaan joten jokaiselle voi esim. tehdä oman scriptin.
ehkä joku muu keksii vielä kätevämmän tavan, mutta tuosta udevistä on varmaan ihan hyvä aloitella:
http://reactivated.net/writing_udev_rules.html (http://reactivated.net/writing_udev_rules.html)
Tutkaillaanpa tuota.
m
-
Mihin softaan viittaat versiohallinnalla?
mihin tahansa versionhallintatyökaluun. no, ehkä jotkut ovat hitusen vanhentuneita, mutta joku subversion, git, darcs tai vaikkapa mercurial saattaisi olla ok. valinta riippuu aika paljon käyttötarpeestakin.
noista on vaikka kuinka monta vertailua netissä, wikipedisatakin löytyy näköjään yksi:
http://en.wikipedia.org/wiki/Comparison_of_revision_control_software (http://en.wikipedia.org/wiki/Comparison_of_revision_control_software)
-
noista on vaikka kuinka monta vertailua netissä, wikipedisatakin löytyy näköjään yksi:
http://en.wikipedia.org/wiki/Comparison_of_revision_control_software (http://en.wikipedia.org/wiki/Comparison_of_revision_control_software)
Kiits. Sori offtopikki, haen takkini. Jatkakaa...
-
Oolrait, kiitokset vinkeistä. Tein vähän rsync ja udev -tutkimuksia. Näin pitkälle päästiin:
USB-TIKUN VARMUUSKOPIOINTI
Tehtävänkuvaus: Tahtoo automaagiset varmuuskopiot usb-tikuista (yksi pääsi katoamaan >:( )
UDEV AUTTAA
udev lukee joukon sääntötiedostoja, jotka kertovat kuinka USB-laite nimetään ja mitä ylimääräistä niiden kanssa tehdään[1]. Näitä sääntötiedostoja säilytetään hakemistossa
/etc/udev/rules
Hakemistossa olevat säännöt suoritetaan aakkosjärjestyksessä. Tämänniminen skripti suoritetaan ensimmäisenä:
/etc/udev/rules.d/010-local.rules
Kukin sääntö on yhden rivin mittainen, kommentit alkavat, kuten tavallista, merkillä #.
udev-säännön kirjoittaminen edellyttää, että usb-laite voidaan tunnistaa yksiselitteisesti. Useimmilla usb-muistitikuilla on sarjanumero, mutta ei kaikilla.
Mulla sattui olemaan yksi bulkkitikku käsillä. Katsotaanpa mitä käyttöjärjestelmä kertoo siitä:
cat: /proc/scsi/usb-storage/: Is a directory
mjp@morse:~$ cat /proc/scsi/usb-storage/*
Host scsi1: usb-storage
Vendor: USB 2.0
Product: Flash Disk
Serial Number: 29755214500B
Protocol: Transparent SCSI
Transport: Bulk
Quirks:
mjp@morse:~$
Jees, tällä tikulla oli sarjanumero. Mikäli numeroa ei ole, katsotaan lisäohjeita[2] kuinka skriptataan valmistaja/malli-yhdistelmän perusteella.
SÄÄNNÖSTELYÄ
Väsäsin siis roottina tälläisen säännön tiedostoon 099-local.backup.rules
BUS="usb", SYSFS{serial}="29755214500b", RUN+="/usr/local/bin/backup-thumb.sh micromemory_1gb"
ja tuo on siis yhdellä ainokaisella rivillä. "Micromemory_1gb" on tunnistin tikulle, merkki & koko.
Kun tikkunro 29755214500b tökätään koneeseen, ajetaan nyt siis skripti
/usr/local/bin/backup-thumb.sh micromemory_1gb
Vielä meillä ei ole tuota backup-thumb.sh skriptiä, eli sekin pitää kirjoittaa... Skripti hoitaa varmuuskopioinnin, parametrinä sille annetaan tikun nimi. Muiden tikkujen osalta tehdään vastaavanlainen udev-sääntö ja annetaan siellä tikulle nimi, jolla tuo varmuuskopio tehdään.
Netistä löytyi melkein valmis skripti. Siinä varmuuskopio tehtiin dd:llä, muutin vain rsync-pohjaiseksi tuon varmuuskopioinnin & vaihdoin hälyäänen. Konffausohjeet löytyvät tiedostosta.
#!/bin/bash
# Thumbdrive backup script from Linux Journal
# modified by MikkoJP
# ##############################################
# CONFIG section
# where you want the backups to be kept
BACKUP_DIR=/var/backups/thumb
# how many old backups to keep
GENERATIONS=7
# backup only once a day
# set to 0 if you want a backup run every time
# you insert your thumbdrive
BACKUP_ONCE_DAY=0
# completion sound to play when backup is done
SOUND=/usr/share/sounds/logout.wav
# END CONFIG
# ##############################################
# main program
# wait for device to settle
sleep 10
# make sure no one will be able to copy our backups
umask 077
# check the directory
DEVICE=$1
if [ ! -d ${BACKUP_DIR} ] ; then
mkdir -p ${BACKUP_DIR}
fi
# only backup once per day
if [ ${BACKUP_ONCE_DAY} -gt 0 ] ; then
DIDTODAY=${BACKUP_DIR}/${DEVICE}.did_today
find ${BACKUP_DIR} -name ${DEVICE}.did_today -a -mtime +1 -delete
if [ -f ${DIDTODAY} ] ; then
exit
else
touch ${DIDTODAY}
fi
fi
# rotate backups
cd ${BACKUP_DIR}
let GENERATIONS=${GENERATIONS}-1
while [ ${GENERATIONS} -ge 0 ] ; do
let NEWFILE=${GENERATIONS}+1
if [ -f ${DEVICE}.backup.${GENERATIONS} ] ; then
mv -f ${DEVICE}.backup.${GENERATIONS}
${DEVICE}.backup.${NEWFILE}
fi
let GENERATIONS=${GENERATIONS}-1
done
# do the backup
# dd if=/dev/${DEVICE} of=${BACKUP_DIR}/${DEVICE}.backup.0 > /dev/null 2>&1
rsync -arvuz /media/usbdisk/* ${BACKUP_DIR}/${DEVICE}.backup.0/
# notify that we're done
aplay ${SOUND} > /dev/null 2>&1
Tuo vielä pistetään ajokuntoon:
chmod u+x backup-thumb.sh
ja installoidaan lisää tavaraa:
apt-get install rsync
Skripti vaatii hiukan lokalisointia. Laitoin varmuuskopiot hakemistoon
/var/backups/
koska sellainen oli jo valmiiksi debianissani.
Ensi kokeilujen perusteella homma näyttää toimivan: /var/backups/thumb -hakemistoon ilmestyi oikein nimetty alihakemisto, joka synkronoitui tikun kanssa. Katsotaan, miten tämä alkaa toimia... nimeytyvätkö jatkossa alihakemistot oikein yms. Vielä tehtävä udev-säännöt muitakin tikkujani varten samalla logiikalla.
Mikko
EDIT: korjailuja...
--------------------------
[1] Daniel Drake, "Writing udev rules", http://reactivated.net/writing_udev_rules.html
[2] Andrew Fabbro, "Painless Thumbdrive Backups" (1/2/2007), http://www.linuxjournal.com/article/9311
-
Hoh!
Kiitos!
-
Hoh!
Kiitos!
Eipä kestä! Kiva jos tästä joku muukin hyötyy -- en kylläkään vastaa aikaansaaduista vahingoista ja kadonneista tiedostoista 8)
Testattu siis Debian 4.0:lla, mutta toiminee Ubuntullakin.
m
-
Tein vähän rsync ja udev -tutkimuksia. Näin pitkälle päästiin:
tuohan meni aika paljon nopeammin kuin uskalsin edes odottaa :)
BUS="usb", SYSFS{serial}="29755214500b", SYMLINK RUN+="/usr/local/bin/backup-thumb.sh micromemory_1gb"
tämä näyttää vähän hassulta. tai siis oikeastaan tuo SYMLINK pistää silmään.
mikä sen funktio on tuossa välissä ilman parametreja ja tarvitaanko sitä ollenkaan?
-
tämä näyttää vähän hassulta. tai siis oikeastaan tuo SYMLINK pistää silmään.
mikä sen funktio on tuossa välissä ilman parametreja ja tarvitaanko sitä ollenkaan?
En mä vaan tiedä :-) On napattu tuolta Linux Journalin artikkelista. Taitaa se kyllä turha olla.
Kokeillaan ilman...
m
-
En mä vaan tiedä :-) On napattu tuolta Linux Journalin artikkelista. Taitaa se kyllä turha olla.
Kokeillaan ilman...
näköjään. siellä tosin on sille parametri, mutta minun selaimessani se on vähän piilossa. tiedä sitten tarvitaanko tuota symlinkkiä mihinkään jos sitä ei aiota kopioida dd:llä tai käsitellä laitenodea mitenkään suoraan.
-
En mä vaan tiedä :-) On napattu tuolta Linux Journalin artikkelista. Taitaa se kyllä turha olla.
Kokeillaan ilman...
näköjään. siellä tosin on sille parametri, mutta minun selaimessani se on vähän piilossa. tiedä sitten tarvitaanko tuota symlinkkiä mihinkään jos sitä ei aiota kopioida dd:llä tai käsitellä laitenodea mitenkään suoraan.
Jotain häikkää tässä vielä on, nyt tuo tikku ei enää mounttaudu automaagisesti /media/usbdisk -hakemistoon...
edit: Sen jälkeen kun nimesin udev-säännön muotoon 010_local.backup.rules tikku mounttautui taas. Olisko nyt paremmassa paikassa tuo säännön ajaminen?!
m
-
Jatketaanpa raportointia. Ryhdyin sitten kirjoittamaan alusta uusiksi simppelimpää skriptiä, niin ainakin ymmärrän toiminnan:
/etc/udev/rules.d/099-local.rules
sisältää nyt
BUS=="usb", SYSFS{serial}=="29755214500B", RUN+="/usr/local/bin/backup-thumb.sh micromemory"
Tän mä kai ymmärrän kokonaan :-)
Ja
/usr/local/bin/backup-thumb.sh
#!/bin/bash
# Thumbdrive backup script
# by MikkoJP
BACKUP_DIR=/var/backups/thumb
SOUND=/usr/share/sounds/logout.wav
DEVICE=$1
#tikun nimi annettu parametrina
if [ ! -d ${BACKUP_DIR}/${DEVICE}.backup ] ; then
mkdir -p ${BACKUP_DIR}/${DEVICE}.backup
fi
# do the backup
rsync -arvuz /media/usbdisk/* ${BACKUP_DIR}/${DEVICE}.backup/ > /dev/null
# notify that we're done
aplay ${SOUND} > /dev/null
Tämä ei nyt tee mitään varmuuskopioiden kierrätyksiä tms, niitä voi sitten lisätä jatkossa. Nyt ainakin tuntuisi homma toimivan... koputetaan puuta. Hiukan tuo USBin tunnistaminen tökkii, saa välillä vaihdella pariin kertaan porttia, johon sen tökkää ennenkuin mitään tapahtuu.
m