remote backup van Debian thuisserver met router en OpenWRT

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Rukapul
  • Registratie: Februari 2000
  • Laatst online: 11:00
Ik ben bezig om m'n externe backups online te regelen in plaats van een USB disk af en toe mee te nemen en te synchen.

Ik maak dagelijkse backups (met behulp van rsnapshot) op m'n Debian thuisserver van alle relevante data in m'n thuisnetwerk en het is de bedoeling af en toe dus een backup van de backup (of het origineel) te maken. Hiervoor wil ik m'n oude Asus WL500g deluxe router gebruiken met daaraan de USB disk die ik op een willekeurige locatie aan kan zetten en dan automatisch een backup maakt.

Op dit moment heb ik de laatste versie van OpenWRT op de router staan. Ook kan deze met OpenVPN verbinding maken met de Debian server. Vanaf hier ben ik aan het aftasten hoe verder te gaan, zowel qua backupaanpak als qua beveiliging.

backupaanpak: een aantal eisen zijn dat het initiatief bij de router moet liggen, dat eenmaal gebackupte data niet verloren mag gaan (bijvoorbeeld door overschrijven of doordat het origineel is gewist) en dat er dus verschillende revisies moeten zijn, en uiteraard een zekere mate van efficientie (huidige backup set is paar honderd GB). Het hardlinken van files die in dezelfde revisies voorkomen is een harde eis ivm efficientie. rsnapshot is als package niet beschikbaar op OpenWRT dus daarmee iets in elkaar klussen is geen optie. Ideeen?

beveiliging: idee is om als basis OpenVPN tussen router en thuisserver en daarover SCP (aangezien de meeste oplossingen daarvan gebruik maken) te nemen. Om de boel nog wat af te grendelen: firewall rules op de thuisserver om alleen de SSH poort door te laten naar de lokale machine. Ook "PermitRootLogin no" voor SSH moet opgegeven worden en bijvoorbeeld op IP basis geregeld moet gaan worden. Een non-root oplossing zie ik even niet ivm bestandsrechten. Alternatieven, aanvullingen of ideeen?

[ Voor 7% gewijzigd door Rukapul op 17-03-2011 23:55 ]


Acties:
  • 0 Henk 'm!

  • sam.vimes
  • Registratie: Januari 2007
  • Laatst online: 08-06 08:44
Voor het maken van een efficiënte backup ligt een oplossing met rsync of rdiff-backup het meest voor de hand, desnoods met een zelfgebakken wrapper-script. Bij mijn weten is voor rdiff-backup alleen een werkende Python-installatie op server en client nodig.
Duplicity komt ook voor de geest, dit creëert gecrypte tar-backups met behulp van het rsync-algoritme.

Maar als rsnapshot al niet beschikbaar is op OpenWRT (rsync+perl) ben ik bang dat dat voor bovenstaande packages ook geldt.

Omdat het initiatief bij de router ligt, moet je een verzekering inbouwen dat die nog niet begint als de lokale netwerkbackups nog niet klaar zijn.

[ Voor 0% gewijzigd door sam.vimes op 18-03-2011 12:22 . Reden: rsnapshot is written entirely in Perl (not bash) ]


Acties:
  • 0 Henk 'm!

  • Neptunus
  • Registratie: Januari 2001
  • Laatst online: 23-06 16:04

Acties:
  • 0 Henk 'm!

  • Rukapul
  • Registratie: Februari 2000
  • Laatst online: 11:00
Bedankt voor de reacties.

rsnapshot aan de gang krijgen zal niet zomaar gaan aangezien het niet zomaar schijnt te werken met microperl.
Duplicity ondersteunt geen hardlinks en levert ook geen mirror van het filesystem op.
sam.vimes schreef op vrijdag 18 maart 2011 @ 11:42:
Omdat het initiatief bij de router ligt, moet je een verzekering inbouwen dat die nog niet begint als de lokale netwerkbackups nog niet klaar zijn.
Klopt, maar daar valt wel wat aan te doen. Ik kan bijvoorbeeld de snapshot van een dag oud pakken en tevens een filelock bouwen zodat geen nieuwe backup wordt gestart op de server :)

Voorlopig ben ik verder gegaan met rsync:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/sh

export BASE_DIR=/mnt/usb/backup
export HOST=10.0.0.1
export DIR=/mnt/backup/pvr/snapshots/daily.1/
export SOURCE="root@$HOST:$DIR/*"
export DATE="`date +"%F_%H:%M"`"
export DEST=$BASE_DIR/$DATE
export LAST_BACKUP=$BASE_DIR/last

mkdir $DEST

#rsync: ACLs are not supported on this client
#rsync: extended attributes are not supported on this client
rsync -e "ssh -i /root/.ssh/id_rsa_router" --recursive --links --hard-links --perms --executability --owner --group --times --archive --delete-during --link-dest $LAST_BACKUP $SOURCE $DEST

rm -f $LAST_BACKUP
cd $BASE_DIR
ln -s $DATE $LAST_BACKUP

Dit maakt als het ware een snapshot van een backup-snapshot.

Hoewel dit lijkt te werkt ga ik toch verder kijken of er iets in elkaar te klussen valt om geen (root) shell gebaseerde oplossing te gebruiken en ook eentje die niet het hele filesystem r/w openstelt. Een en ander is redelijk dichtgetimmerd (defense in depth), maar vatbaar voor verbetering. Misschien toch maar een NFS export overwegen of iets in die geest zonder op al te exotische daemons uit te komen.

[ Voor 5% gewijzigd door Rukapul op 19-03-2011 09:19 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ben nog niet zo heel erg thuis in deze materie, maar vond een scrip op Howtoforge,
Wat ik zelf heb omgecat :9 in:
code:
1
2
3
install --directory /srv/rdiff/mounts/10.0.0.1
sshfs -o ro 10.0.0.1:/ /srv/rdiff/mounts/10.0.0.1 
rdiff-backup --preserve-numerical-ids --include/wat/jij/wilt --exclude /wat/jij/wilt /srv/rdiff/mounts/10.0.0.1/mnt/usb/backup/ /srv/rdiff/backup/10.0.0.1/mnt/backup/pvr/snapshots/daily.1/

Zou dat ook kunnen werken?

Acties:
  • 0 Henk 'm!

  • sam.vimes
  • Registratie: Januari 2007
  • Laatst online: 08-06 08:44
Verwijderd schreef op zondag 20 maart 2011 @ 17:32:
[...]
code:
1
2
3
install --directory /srv/rdiff/mounts/10.0.0.1
sshfs -o ro 10.0.0.1:/ /srv/rdiff/mounts/10.0.0.1 
rdiff-backup --preserve-numerical-ids --include/wat/jij/wilt --exclude /wat/jij/wilt /srv/rdiff/mounts/10.0.0.1/mnt/usb/backup/ /srv/rdiff/backup/10.0.0.1/mnt/backup/pvr/snapshots/daily.1/

Zou dat ook kunnen werken?
Ja dat werkt.
Maar.
Je verliest de performancevoordelen van rdiff-backup omdat ALLE data eerst door de ssh(fs)-tunnel getrokken moet worden voordat rdiff-backup doorheeft dat er maar een klein deel van nodig zou zijn geweest. Voor het slimme kopieeralgoritme moet je echt rdiff-backup (of rsync, of unison) op zowel de "client" als de "server" draaien, en in bovenstaande oplossing draait het alleen op de client.

code:
1
rdiff-backup --preserve-numerical-ids --include /wat/jij/wilt --exclude /wat/jij/wilt root@10.0.0.1::/mnt/usb/backup/ /srv/rdiff/backup/10.0.0.1/mnt/backup/pvr/snapshots/


Terzijde: je hoeft bij rdiff-backup niet meer de namen (daily.*, weekly.*) van de snapshots bij te houden: dat regelt het programma zelf.

Acties:
  • 0 Henk 'm!

Verwijderd

sam.vimes schreef op dinsdag 22 maart 2011 @ 14:46:
[...]

code:
1
rdiff-backup --preserve-numerical-ids --include /wat/jij/wilt --exclude /wat/jij/wilt root@10.0.0.1::/mnt/usb/backup/ /srv/rdiff/backup/10.0.0.1/mnt/backup/pvr/snapshots/


Terzijde: je hoeft bij rdiff-backup niet meer de namen (daily.*, weekly.*) van de snapshots bij te houden: dat regelt het programma zelf.
Bedankt voor de tip, dit zijn namelijk wel de dingen die in mijn ogen Linux interessant maken.
Heb op 'nonguru.org' gekeken, en zie dat het inderdaad zo hoort als je aangeeft.
Dat van (daily.*, weekly.*) wist ik niet, heb de man reeds bestudeerd, en daar staat het inderdaad niet in.

@Rakapul, werkt je script?, maar kan het niet kleiner/eenvoudiger?

Acties:
  • 0 Henk 'm!

  • Rukapul
  • Registratie: Februari 2000
  • Laatst online: 11:00
Verwijderd schreef op woensdag 23 maart 2011 @ 11:55:
@Rakapul, werkt je script?, maar kan het niet kleiner/eenvoudiger?
Mijn script werkt wel voor zover ik heb getest. Het is ook supereenvoudig in mijn ogen. Meeste regels zijn voor wat settings en om hardlinks tussen verschillende sessies te kunnen ondersteunen (doe ik met symbolic link naar laatste run). Of dit nog netter kan met rdiff staat op de todo om nog eens te bekijken.

De reden dat ik hier even stil was komt omdat ik de NFS client op OpenWRT niet werkend krijg. Ik wil namelijk geen shell gebaseerde oplossing met de root user, maar een methode waarmee ik de scope van het sharen wat meer kan inperken tot alleen de backup-tree en alleen read-only.

[ Voor 5% gewijzigd door Rukapul op 23-03-2011 12:18 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Dank voor je uitleg, heb gelijk de 'Bash Guide for Beginners by Machtelt Garrels' opgehaald .
Het lukt wel om te rommelen in bestaande code, maar zelf schrijven...
Pagina: 1