Oolrait, kiitokset vinkeistä. Tein vähän rsync ja udev -tutkimuksia. Näin pitkälle päästiin:
USB-TIKUN VARMUUSKOPIOINTITehtävänkuvaus: Tahtoo automaagiset varmuuskopiot usb-tikuista (yksi pääsi katoamaan
)
UDEV AUTTAAudev 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/rulesHakemistossa olevat säännöt suoritetaan aakkosjärjestyksessä. Tämänniminen skripti suoritetaan ensimmäisenä:
/etc/udev/rules.d/010-local.rulesKukin 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.rulesBUS="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