LØST: tar-parameteret --exclude

Kategori overført fra Linux1

LØST: tar-parameteret --exclude

Innleggav Prognatus » ons 13.09.2006 4:15

Jeg driver og eksperimenterer med tar for å lage en backup-rutine, men under testingen kom jeg borti noe rart: jeg får ikke parameteren --exclude til å virke!

Hvis jeg prøver denne kommandoen f.eks...:

Kode: Merk alt
tar cvpzf backup.tgz / --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys --exclude=/media --exclude=/dev

...så tar den med /media/cdrom0 allikevel (dersom det er en CD montert).

Har prøvd istedet med --exclude=/media/, men det hjalp ikke. Manualen sier bare --exclude=PATTERN. Men hva er riktig PATTERN her?
Sist endret av Prognatus den man 23.10.2006 2:27, endret 1 gang

Brukerens avatar
medlem i 213 måneder
 

Innleggav ak » ons 13.09.2006 4:24

Den er litt dårlig forklart ja ;) Med PATTERN tror jeg de mener en regexp (regular expression) pattern. Prøv
Kode: Merk alt
--exclude=/media/*


Merk at tar ikke henger med dersom kommandolinjen blir for lang, uten at jeg er helt sikker på begrensningen eller om det er likt for alle.

Løsningen er som regel å dele opp områdene (kan uansett være greit hvis man bare skal ha tilbake deler av dataene) eller scripte noe som legger på samme tar-fil.

Hvis du endrer rekkefølgen,
Kode: Merk alt
tar --exclude=/proc/* --exclude=*lost+found* --exclude=/backup.tgz --exclude=/mnt/* --exclude=/sys/* --exclude=/media/* --exclude=/dev/* cvpzf /backup.tgz /
er det mindre fare for at tar dropper noen excludes uten at du merker det.

Antageligvis vil du hoppe over loggfiler, /tmp, /var/tmp, nettleser cache, nedlastede .deb-filer (RPM) og et par andre også.

Administrator
Brukerens avatar
medlem i 236 måneder
 

Innleggav Prognatus » ons 13.09.2006 5:42

Da fikk jeg dette:
    tar: You must specify one of the `-Acdtrux' options
    Try `tar --help' or `tar --usage' for more information.
Hvis jeg setter cvpzf først, slik...:

Kode: Merk alt
tar cvpzf --exclude=/proc/* --exclude=*lost+found* --exclude=/backup.tgz --exclude=/mnt/* --exclude=/sys/* --exclude=/media/* --exclude=/dev/* --exclude=/tmp/* --exclude=/var/tmp /backup.tgz /

...får jeg dette:
    tar: --exclude=/proc/*: Cannot open: No such file or directory
    tar: Error is not recoverable: exiting now
    tar: Removing leading `/' from member names
    /
    /var/
    /var/lock/
    /var/lock/firestarter
    /var/lock/evms-engine
    /var/lock/lvm/
    /var/run/
    /var/run/sudo/
    /var/run/sudo/bjorn/
    /var/run/sudo/bjorn/3
    /var/run/sudo/bjorn/unknown
    /var/run/sudo/bjorn/0
    /var/run/console/
    /var/run/console/bjorn:7
    /var/run/crond.reboot
    /var/run/crond.pid
    /var/run/atd.pid

Jeg skal prøve å dele opp backupen i flere omganger istedet, tror jeg. Backup av /home (uten exclude-parametre) gikk greit tidligere i dag.

Men hvis det skal være en rekke kommandoer vil jeg forsøke å lage et bash-skript for backupen. Da kan jeg kanskje legge dette skriptet inn som en cron-jobb(?) Evt. dele opp backupene i flere skript og sette dem opp til å kjøre med forskjellige tidsintervaller. Men jeg må lære meg bash først... :)

Brukerens avatar
medlem i 213 måneder
 

Innleggav ak » ons 13.09.2006 5:49

Oops, flytt cvpf bakerst:
Kode: Merk alt
tar --exclude=/proc/* --exclude=*lost+found* --exclude=/backup.tgz --exclude=/mnt/* --exclude=/sys/* --exclude=/media/* --exclude=/dev/* --exclude=/tmp/* --exclude=/var/tmp -cvpzf /backup.tgz /

(med eller uten bindestrek)

Hvis du bare skal legge det til som cron-jobb:

Opprett /etc/cron.daily/backup.sh , la den bare inneholde:
Kode: Merk alt
#!/bin/bash
<tar-kommando som ovenfor>


chmod 700 /etc/cron.daily/backup.sh

Administrator
Brukerens avatar
medlem i 236 måneder
 

Innleggav beltazore » ons 13.09.2006 8:10

Du kan jo også bruke --exclude-from=/foo/bar. Da lager du bare en fil som inneholder alle mappene og filene som du vil ekskludere. Dette synes jeg er mye lettere enn å ha fem-seks --exclude i tar-kommandoen.

- Alexander

Brukerens avatar
medlem i 232 måneder
 

Innleggav Prognatus » ons 13.09.2006 22:22

ak, som jeg sa fikk jeg feilmelding da jeg satte cvpzf bakerst også. Jeg prøvde å gjøre slik du sa i din første melding til meg her.

Da fikk jeg dette:
    tar: You must specify one of the `-Acdtrux' options
    Try `tar --help' or `tar --usage' for more information.

Så uansett om jeg satte den bak eller foran så fikk jeg altså feilmeldinger...

Men takk for alle svar foreløpig. Skal teste dette litt mer og kommer tilbake med rapport eller evt. flere spørsmål senere. :)

Får jeg til å lage et bra skript, skal jeg lage en oppskrift på backup i Tips og Triks eller i bloggen min.

Brukerens avatar
medlem i 213 måneder
 

Innleggav ak » tor 14.09.2006 0:09

Prøv cut'n'paste av hva jeg skrev, det fungerer ihvertfall på to vidt forskjellige Linux-bokser hos meg. Kanskje du glemte bindestreken.

Men beltazore sitt forslag høres jo unektelig mye smartere ut når lista begynner å bli lang ;)

Administrator
Brukerens avatar
medlem i 236 måneder
 

Innleggav Prognatus » lør 21.10.2006 3:28

Ok, jeg er ikke så rask av meg, men nå ser det ut til at dette løsner! :D Her er det siste jeg gjorde nå i dag:

1. laget bash-skriptet /home/bjorn/scripts/backup.sh, som kjører backup til en 160 GB disk (hdb) og som er montert som /media/backup:

Kode: Merk alt
#!/bin/bash
tar --exclude-from=/home/bjorn/scripts/backup-exclude -cpzf /media/backup/backup.tgz /

Kuttet ut -v (verbose) fordi terminalvinduet da fylles opp med alle filene som tas backup av. Jeg er jo bare interessert i evt. feilmeldinger o.l.

2. laget en fil med de filene som ikke skal tas backup av og kalte den /home/bjorn//scripts/backup-exclude:

Kode: Merk alt
*lost+found*
~cdrom
/proc/*
/mnt/*
/sys/*
/media/*
/dev/*
/tmp/*
/var/tmp/*

3. kopierte backup-skriptet til cron.weekly:

Kode: Merk alt
$ sudo cp /home/bjorn/scripts/backup.sh /etc/cron.weekly/backup.sh

4. endret tillatelse på skriptet slik at det kunne eksekveres:

Kode: Merk alt
$ sudo chmod 700 /etc/cron.weekly/backup.sh

5. kjørte rutinen i et terminalvindu med:

Kode: Merk alt
$sudo /etc/cron.weekly/backup.sh

6. kikket inni backup-filen /media/backup/backup.tgz da jobben var ferdig. Filen ble på litt under 2 GB. Her er et bilde av innholdet i filen:

Bilde

Det ser greit ut, eller? Så vidt jeg kan se er alle mine ekskluderinger luket ut.

Jeg er litt usikker på om denne ekskluderingen er nødvendig/korrekt: ~cdrom. Det er jo en peker til CD-stasjonen, ikke sant? Har den med nå fordi da jeg testet dette tidligere, og en CD-ROM sto i stasjonen, begynte den å ta backup av de filene som var der også... Har ikke fått testet denne siste versjonen av backup-rutinen med en CD montert. Men er den nødvendig? Det ser ut på bildet (over) at den kom med allikevel?

Grunnen til at jeg la skriptet i cron.weekly er at det holder med denne backupen en gang i uka. Jeg har en annen rutine som tar automatisk backup av /home/* og /etc/* hver dag.

En annen ting jeg ser at jeg kunne ha gjort, er å legge ekskluderingsfilen i /etc/.

Men jeg lurer på et par ting:

Er det mulig å sette inn dato + klokken i filnavnet i bash-skriptet? Slik det er nå, blir jo backupen overskrevet hver uke. Jeg vil heller slette de eldste manuelt en gang i mellom.

Kunne tenke meg å også ekskludere cache-området til nettleseren min (Firefox), men er litt usikker på hvor det er lokalisert. Etter søk på disken fant jeg et område som heter: /home/bjorn/.mozilla/firefox/jxkkyhvz.default/Cache. Er dette riktig sted? Ligger det mer temporære filer fra Firefox andre steder også?

Takker for all hjelp!

Brukerens avatar
medlem i 213 måneder
 

Innleggav ditto » lør 21.10.2006 4:25

'man date' skulle hjelpe deg på vei ang dato noe ala;
`date +%d%m%y` ?

Vil foreslå at du også tar en titt på 'rsync', meeget hendig verktøy i backup sammenheng. =)

Brukerens avatar
medlem i 213 måneder
 

Innleggav Prognatus » lør 21.10.2006 4:56

Kode: Merk alt
$ date +%Y%m%d-%H%M%S

...gir et fint format til å bruke i et filnavn: 20061021-044814

Men kan jeg skrive det rett inn i bash-skriptet, slik?

Kode: Merk alt
#!/bin/bash
tar --exclude-from=/home/bjorn/scripts/backup-exclude -cpzf /media/backup/backup+%Y%m%d-%H%M%S.tgz /

...eller hvordan gjøres dette?

ditto skrev:Vil foreslå at du også tar en titt på 'rsync', meeget hendig verktøy i backup sammenheng. =)

Ok. Jeg trenger et verktøy for å ta image en gang i blant. Det er det eneste jeg mangler nå. rsync er vel et program som hele tiden holder to områder synkronisert? Hva mener du er fordelene med rsync kontra f.eks. denne rutinen jeg har her?

Brukerens avatar
medlem i 213 måneder
 

Innleggav ditto » lør 21.10.2006 14:15

Om du skal "bashe" noe slikt kanskje?;

#!/bin/bash
SRC=/
DEST=/media/backup
EXCL=/home/bjorn/scripts/backup-exclude
NOW=`date +%Y%m%d-%H%M%S`

tar --exclude-from=$EXCL -cpzf $DEST/backup-$NOW.tgz $SRC

---
For min del tar jeg ukentlig backup over WAN, daglig mot ekstern tape, med rsync blir kun diff'ene overført, fremfor en 1:1. =)

Brukerens avatar
medlem i 213 måneder
 

Innleggav Prognatus » søn 22.10.2006 1:50

Takk ditto! Det funker som en drøm! :)

Jeg skal kikke nærmere på rsync.

Men er det noen som vet noe om dette:

> Jeg er litt usikker på om denne ekskluderingen er nødvendig/korrekt: ~cdrom. Det er jo en peker til CD-stasjonen, ikke sant? Har den med nå fordi da jeg testet dette tidligere, og en CD-ROM sto i stasjonen, begynte den å ta backup av de filene som var der også... Har ikke fått testet denne siste versjonen av backup-rutinen med en CD montert. Men er den nødvendig? Det ser ut på bildet (over) at den kom med allikevel?

...og dette:

> Kunne tenke meg å også ekskludere cache-området til nettleseren min (Firefox), men er litt usikker på hvor det er lokalisert. Etter søk på disken fant jeg et område som heter: /home/bjorn/.mozilla/firefox/jxkkyhvz.default/Cache. Er dette riktig sted? Ligger det mer temporære filer fra Firefox andre steder også?

Brukerens avatar
medlem i 213 måneder
 

Innleggav Prognatus » man 23.10.2006 2:26

Jeg la inn en linje til i ekskluderingslisten og håper at det løser et av de gjenstående spørsmålene:

Kode: Merk alt
$HOME/.mozilla/firefox/jxkkyhvz.default/Cache/*

Når det gjelder ekskluderingen av pekeren ~cdrom vet jeg fremdeles ikke om det virker, men det skader jo uansett ikke å ha den der.

Sa da markerer jeg tråden som [LØST].

Takk for all hjelp! :D

Brukerens avatar
medlem i 213 måneder
 

Innleggav Prognatus » tir 24.10.2006 22:46

Nja.. helt løst var det visst ikke. Etter at jeg la til den siste ekskluderingen (se forrige melding) undersøkte jeg backupen og fant ut at cache-området var tatt med allikevel. Jeg regner med at "$HOME" ikke ble gjenkjent som gyldig parameter.

Så da endrer jeg dette istedet til:

Kode: Merk alt
/home/bjorn/.mozilla/firefox/jxkkyhvz.default/Cache/*

Brukerens avatar
medlem i 213 måneder
 


Returner til Utvikling i Linux



Hvem er i Forumene

Registrerte brukere: Google [Bot]



cron