Verwijderd schreef op vrijdag 10 april 2009 @ 00:00:
Ik zit vol verbazing dit topic te lezen. Het is zo simpel, maar de "oplossingen" die ik voorbij zie komen zijn letterlijk om te janken. Rechten back-uppen is erg simpel, je maakt namelijk van je files een "tarbal", zie hieronder het commando:
tar -cvf <filename.tar> <bestanden/folder die in de tar file moeten komen> dus:
tar -cvf pictures.tar /home/user/pictures
Het nadeel is nu wel dat je een ogecomprimeerd bestand hebt, deze kan je achteraf wel in een zip, rar, enz, archive zetten, maar mooier is dat je er meteen een tar.gz file van maakt. Dat doe je zo:
tar -cvfz pictures.tar.gz /home/user/pictures
Internet staat vol met voorbeeld. Ook met "tar --help" kom je een heel eind.
Ow, reken maar dat ik daar wel over gedacht heb. Mijn kennis over tar is ook niet van gister. Ik weet donders goed dat de rechten daarmee ook gebackupped worden. Net zoals met rdiff-backup en rsync, cp -aR, rsnapshot, bacula, etc. Dat is ook niet het probleem.
Laat ik zeggen dat rdiff-backup, de tool die wij dus gebruiken om te backuppen, ook de rechten mee neemt. Dus we backuppen ze eigenlijk al wel.
Ik zoek een apart script/programma wat naar een bestand ofzo de rechten van het bestandsysteem backupped. En met dit bestand het ook weer terug kan zetten, hetzij gedeeltelijk, hetzij full system. Hier kun je namelijk verschillende dingen mee.
• Met zo'n programma duurt het niet zo lang om te backuppen als volledige bestanden. Dit betekent dat je dit vaker op een dag kunt uitvoeren.
• Je kunt er overheen diffen, denk aan iets als tripwire achtige programma/script. Tripwire is wat geavanceerder, dus die raad ik sowieso aan boven deze methode.
• De hoeveelheid ruimte is niet zo groot die het gebruikt. Dit betekent weer dat jet dit vaker op een dag kunt uitvoeren.
• Alleen rechten terugzetten op live data, is makkelijker en sneller en veiliger terugzetten, dan uit een backup van bestanden. Dit omdat een backup van bestanden vaak elke 24 uur wordt gedaan. Als je de backup terugzet van een drukke mailserver, ben je gegevens van die dag kwijt. Als je je bestanden kunt houden maar alleen de rechten kunt terug zetten, ben je die bestanden dus niet kwijt.
Vandaar dat ik dat los wil van een bestandsbackup. De resultaten van het script worden vervolgens wel weer in het bestandsbackup traject overgenomen, zodat dat eventueel ook nog terug te halen is. Uiteraard is het eigenlijk alleen maar nog van de data na de laatste backup.
Thnx mate,
zoiets zoek ik dus. Hier ga ik eens naar kijken.
Edit: nah, het programma is nog niet volledig genoeg. Dat programma doet alleen chmod rechten backuppen. Die houd verder geen rekening met owners enzo. En als het bestandsysteem specifieke flags heeft, dan houdt hij daar ook geen rekening mee. Uiteraard is het programma wel te verbouwen. Die C code ziet er nou ook niet zo heel ingewikkeld eruit. Maar dan blijf ik liever bij mijn huidige code. Maar bedankt iig voor de suggestie.
De code die ik nu had, na een tijdje proberen enzo:
Python:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
| #!/usr/bin/env python
import os
import getopt,sys
import string
import stat
import subprocess
mainpath = os.path.abspath("/")
excludes = ["/dev", "/proc", "/lost+found", "/tmp"]
errors = []
def walkpath(path, callback):
for f in os.listdir(path):
fpath = os.path.join(path, f)
try:
st = os.stat(fpath)
stmode = st[stat.ST_MODE]
if f in excludes or fpath in excludes:
continue
if stat.S_ISCHR(stmode) or stat.S_ISBLK(stmode) or stat.S_ISSOCK(stmode):
continue
if os.path.islink(fpath):
continue
if stat.S_ISDIR(stmode):
walkpath(fpath, callback)
#continue
callback(fpath, st)
except Exception, e:
errors.append("Exception %s on %s" % (e, fpath))
continue
def backuprights(path, statinfo):
try:
if stat.S_ISREG(statinfo[stat.ST_MODE]):
proc = subprocess.Popen(["lsattr", path], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
attrs = proc.communicate()[0].strip().split(' ')[0].replace('-', '')
print "%s;%o;%i;%i;%s" % (path, stat.S_IMODE(statinfo.st_mode), statinfo.st_uid, statinfo.st_gid, attrs)
if stat.S_ISDIR(statinfo[stat.ST_MODE]):
print "%s;%o;%i;%i;" % (path, stat.S_IMODE(statinfo.st_mode), statinfo.st_uid, statinfo.st_gid)
except Exception, e:
errors.append("Exception %s on %s" % (e, fpath))
if __name__ == '__main__':
try:
mainpath = sys.argv[1]
except Exception, e:
mainpath = mainpath = os.path.abspath("/")
walkpath(mainpath, backuprights)
print "\nErrors:\n------------------------------------"
for error in errors:
print error |
[
Voor 4% gewijzigd door
eghie op 10-04-2009 18:54
]