Kirjoittaja Aihe: USB-muistien varmuuskopiointi (alust.ratkaisu)  (Luettu 4271 kertaa)

MikkoJP

  • Käyttäjä
  • Viestejä: 1148
  • iBook 600 MHz + Debian 4.0
    • Profiili
USB-muistien varmuuskopiointi (alust.ratkaisu)
« : 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
« Viimeksi muokattu: 17.05.07 - klo:20.49 kirjoittanut MikkoJP »

janne

  • Käyttäjä
  • Viestejä: 5150
    • Profiili
Vs: USB-muistien varmuuskopiointi
« Vastaus #1 : 17.05.07 - klo:17.21 »
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

[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
« Viimeksi muokattu: 17.05.07 - klo:17.26 kirjoittanut janne »
Janne

igor_2

  • Käyttäjä
  • Viestejä: 605
    • Profiili
Vs: USB-muistien varmuuskopiointi
« Vastaus #2 : 17.05.07 - klo:18.14 »
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?

MikkoJP

  • Käyttäjä
  • Viestejä: 1148
  • iBook 600 MHz + Debian 4.0
    • Profiili
Vs: USB-muistien varmuuskopiointi
« Vastaus #3 : 17.05.07 - klo:18.46 »
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ä :-)

Lainaus
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

Tutkaillaanpa tuota.


m
« Viimeksi muokattu: 17.05.07 - klo:22.00 kirjoittanut MikkoJP »

janne

  • Käyttäjä
  • Viestejä: 5150
    • Profiili
Vs: USB-muistien varmuuskopiointi
« Vastaus #4 : 17.05.07 - klo:18.58 »
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
Janne

igor_2

  • Käyttäjä
  • Viestejä: 605
    • Profiili
Vs: USB-muistien varmuuskopiointi
« Vastaus #5 : 17.05.07 - klo:19.01 »
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

Kiits. Sori offtopikki, haen takkini. Jatkakaa...

MikkoJP

  • Käyttäjä
  • Viestejä: 1148
  • iBook 600 MHz + Debian 4.0
    • Profiili
Vs: USB-muistien varmuuskopiointi
« Vastaus #6 : 17.05.07 - klo:20.45 »
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ä:

Koodia: [Valitse]
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

Koodia: [Valitse]
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

Koodia: [Valitse]
/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.

Koodia: [Valitse]
#!/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:

Koodia: [Valitse]
chmod u+x backup-thumb.sh

ja installoidaan lisää tavaraa:

Koodia: [Valitse]
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

« Viimeksi muokattu: 17.05.07 - klo:22.15 kirjoittanut MikkoJP »

Ville Pöntinen

  • Käyttäjä
  • Viestejä: 2078
    • Profiili
Vs: USB-muistien varmuuskopiointi (alust.ratkaisu)
« Vastaus #7 : 17.05.07 - klo:21.06 »

Hoh!
Kiitos!

MikkoJP

  • Käyttäjä
  • Viestejä: 1148
  • iBook 600 MHz + Debian 4.0
    • Profiili
Vs: USB-muistien varmuuskopiointi (alust.ratkaisu)
« Vastaus #8 : 17.05.07 - klo:21.13 »

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

janne

  • Käyttäjä
  • Viestejä: 5150
    • Profiili
Vs: USB-muistien varmuuskopiointi
« Vastaus #9 : 17.05.07 - klo:21.27 »
Tein vähän rsync ja udev -tutkimuksia. Näin pitkälle päästiin:

tuohan meni aika paljon nopeammin kuin uskalsin edes odottaa :)

Koodia: [Valitse]
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?
Janne

MikkoJP

  • Käyttäjä
  • Viestejä: 1148
  • iBook 600 MHz + Debian 4.0
    • Profiili
Vs: USB-muistien varmuuskopiointi
« Vastaus #10 : 17.05.07 - klo:21.34 »

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

janne

  • Käyttäjä
  • Viestejä: 5150
    • Profiili
Vs: USB-muistien varmuuskopiointi
« Vastaus #11 : 17.05.07 - klo:21.46 »
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.
Janne

MikkoJP

  • Käyttäjä
  • Viestejä: 1148
  • iBook 600 MHz + Debian 4.0
    • Profiili
Vs: USB-muistien varmuuskopiointi
« Vastaus #12 : 17.05.07 - klo:22.01 »
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
« Viimeksi muokattu: 17.05.07 - klo:22.05 kirjoittanut MikkoJP »

MikkoJP

  • Käyttäjä
  • Viestejä: 1148
  • iBook 600 MHz + Debian 4.0
    • Profiili
Vs: USB-muistien varmuuskopiointi (alust.ratkaisu)
« Vastaus #13 : 18.05.07 - klo:00.19 »
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

Koodia: [Valitse]
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

Koodia: [Valitse]
#!/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
« Viimeksi muokattu: 18.05.07 - klo:00.33 kirjoittanut MikkoJP »