Beitrag
von scientific » 28.04.2017 02:46:55
Snapshots und Backups sind auch für mich zwei verschiedene Paar Schuhe, wenngleich auch ähnliche.
Wenn dir @TomL beim Gedanken an Subvolumes und Subvolumes in Subvolumes schwindlig wird, dann erlaube mir die Frage: "Installierst du dein System in Summe auf eine einzige Partition, oder hast du für /home und ev. für /var und andere Directories oder Subdirectories eigene Partitionen?"
Ich habe wirklich lange experimentiert (sowohl am Rechner als auch mittels Gedankenexperiment) wie man einen Rechner mittels btrfs-Snapshots so organisieren kann, dass er
1. nach einem missglückten Update oder einer missglückten Installation eines Programmes binnen kürzester Zeit wiederhergestellt werden kann
2. Bei einer Wiederherstellung keine Userdaten verloren gehen, sondern diese am aktuellen Stand bleiben - trotzdem das System auf einen früheren Punkt zurückgesetzt wurde.
3. Der User soll auf seine eigenen Daten in Historie einfachst zugreifen können, damit er sich selbst irrtümlich gelöschte/veränderte Dateien wiederherstellen kann, wenn er den Zeitpunkt kennt, wo die Datei noch in Ordnung war.
4. Die Übertragung eines Snapshots soll möglichst wenig Systemressourcen (IO-Last, Netzwerk) beanspruchen.
Ich hab früher mit rsnapshot (basiert auf rsync) gearbeitet. Aber das ist auf älteren Systemen mit großen Datenmengen auf einer HD durchaus unbrauchbar. Selbst mit ionice führte das regelmäßig zu einem unbenutzbaren Rechner, der nur extrem verzögert während des Backups reagierte. Ich war sehr unglücklich damit.
Mit zentral gespeicherten Nutzerdaten hab ich so meine gedanklichen Probleme. Das größte davon ist, wie komme ich an meine Daten, wenn ich kein Netzwerk habe? Szenario: Ich bin auf einer längeren Bahnfahrt mit meinem Laptop unterwegs. Österreich ist ein geologisch durchaus anspruchsvolles Land, moderne Bahnbauten haben grundsätzlich auch in flacheren Gegenden einen hohen Tunnelanteil... Der Empfang in der Bahn ist von endenwollender Qualität. Allein auf der Westbahn von Wien bis St. Pölten hat man bei einer Reisedauer von 30 Minuten knapp 8 Minuten in Summe Mobilfunk-Empfang. Das gilt auch für zugsinterne WLAN-Verbindungen... DAs WLAN ist durchaus durchgängig vorhanden, jedoch nicht darüber hinaus ins Internet - wie denn auch, Wenn kein Mobilfunk den Zug erreicht, kann der genausowenig ins Internet wie wenn ich mein Handy als Modem oder Router missbrauche.
Also gut, ich bin auf Reisen und möchte auf meinem Laptop arbeiten und habe nur unzureichend Internet - wenn meine Daten zuhause auf einem Filserver liegen, zu dem ich mich per VPN verbinden muss, um an sie ranzukommen, kann ich genau in der Nase bohren und sonst nichts tun. Und ich weiß im Vorhinein zwar ungefähr, welche Dateien ich benötige, aber nie exakt... und im Nachhinein die Datenbestände wieder synchronisieren... das ist mir etwas zu aufwändig... Also hab ich meine Daten lieber bei immer am Rechner und ein zweites oder gar drittes Mal auf anderen Geräten (Backup!!)
Ein zentraler Datenspeicher für die /home-Directories ist hingegen durchaus im Büroumfeld sinnvoll, wo ich fixe Arbeitsplätze habe, die sicher immer gute Netzwerkverbindung haben.
Bei uns in der Arbeit wird mit Citrix bzw. Windows Terminal-Server gearbeitet. Sprich die Rechner sind alle irgendwelche Windows-Standardinstallationen, auf deinen ein Client für den virtuellen Desktop gestartet wird. Sowohl fixe PCs als auch Laptops für die Kollegen die in der Gegend herumschwirren.
Unser Internetanbieter hat aber regelmäßig gröbere Schwierigkeiten, eine stabile Netzwerkverbindung am Haupstandort herzustellen und in Außenstandorten sind teilweise durch die Gebäude bedingte sehr schlechte Mobilfunk-Verbindungen. Das führt regelmäßig zu längeren Kaffeepausen, weil mit einer Netzschwankung das Drucken hängt oder der virtuelle Desktop gar nicht mehr erreichbar ist. Die Ersparnisse durch einfache zentrale Wartung und Konfiguration aller Mitarbeiter-Arbeitsplätze frisst der regelmäßige Produktionsausfall durch die Netzschwankungen (mein Arbeitgeber hat schon mehrere Anbieter durch... bei keinem war das Ergebnis dauerhaft zufriedenstellend) aber meiner Meinung nach wieder auf. Zumal auch auf den lokalen Arbeitsplätzen regelmäßig Updates gemacht werden müssen (und wie schon des öfteren auch hier bemängelt, die Windowsupdates sehr rigoros schon mal zu einem 1,5-2-stündigen Ausfall des Arbeitsplatzes führen... besonders bei Win10). Und obwohl virtuelle Desktops eingesetzt werden, kommen vollwertige Rechner zum Einsatz. Die Begründung dafür ist, dass nicht alle Arbeitsplätze gleich sind - auf manchen muss Spezialsoftware für Bildbearbeitung, Zeitungsredaktion oder spezielle Datenbankanwendungen laufen, und die Rechner müssen untereinander austauschbar sein... (nicht meine Verantwortung diese Entscheidung... ich halte diese für nicht klug, und schon gar nicht für kostensparend. Der Dienstleister begründet auf so einem Arbeitsplatz 4GB RAM als das Minimum, da darauf ja Win10 läuft... HDs mit 200GB ohne gestatteter lokaler Speicherung... wie gesagt, nicht meine Entscheidung oder Verantwortung...)
Mit kurzen Worten, ein zentraler Fileserver für die Userdaten steht und fällt mit der Zuverlässigkeit und Verfügbarkeit des Netzes. Und meine persönliche Erfahrung durch intensive Nutzung ist, dass es lästig bis teuer ist, wenn der Fileserver irgendwo in $RECHENZENTRUM steht und nicht am Standort.
Zurück zu den Snapshots vs. Backups.
Ich habe also am lokalen Rechner Snapshots sowohl des Systems, als auch der Userdaten, Emails, Serverinhalte usw.
Mit den Systemsnapshots setze ich den Rechner mit dem Zeitaufwand eines Reboots in einen früheren Zeitpunkt zurück (das geht um ein Hauseck schneller mit Debian als mit Windows und Wiederherstellungspunkt)
Mittels 10-minütiger, stündlicher, täglicher, wöchentlicher usw. Snapshots kann ich dem User anbieten, dass er an vergangene Versionen seiner Dateien und Verzeichnisse über eine einfache Schnittstelle (ein ~/backup -Verzeichnis in seinem Home, wo jeder einzelne Snapshot seiner Userdaten in einem eindeutig benannten Verzeichnis liegt) zugreifen kann um diese bei Bedarf wieder herzustellen. Das funktioniert sowohl in der Shell, als auch in $FILEMANAGER ohne größeren Umweg.
Ein solcher Snapshot ist readonly, das heißt ein Verschlüsselungstrojaner (gibts solche eigentlich auch unter Linux?) kann an den nicht ran. Sollten also die Userdaten so einem Angriff zum Opfer fallen, kann ich sogar diese durch das Umbiegen eines Symlinks oder das gezielte Klonen eines älteren Snapshots und read-write-Setzen wiederherstellen.
Da das Erstellen eines btrfs-Snapshots auf älteren Systemen auch zu Performance-Einbußen führt (wenngleich diese deutlich geringer sind als mit rsnapshot/rsync) kann ich gezielt nur vom System oder den Nutzerdaten oder von beiden zu verschiedenen Intervall-Zeitpunkten einen Snapshot machen. Sprich, nach dem Boot, nach apt upgrade wird ein Snapshot nur vom System-Subvolume gemacht - das merkt der User kaum, und einmal am Tag mache ich am alten System einen Snapshot vom gesamten System. Oder ich mache stündlich einen Snapshot, lasse diesen aber nur nach dem Einstecken des externen Datenträgers einen Snapshot machen, der dann auf diesen übertragen wird.
Ich kann das so durch gezieltes De/Aktivieren der Snapshot-Intervalle an die Gegebenheiten meines Rechners anpassen.
Wenn ich wieder mal an meinen Fotos herumfuhrwerke (Sortieren, Bearbeiten, Umbenennen, Taggen...), dann habe ich in kurzer Zeit viel Veränderung. Dann schalte ich die 10-minütigen Snapshots per Gnome-Extension ein, bin ich mit dem Bearbeiten fertig, schalte ich diese wieder aus. Das hat mich schon einiges an unnötiger doppelter Arbeit oder Suche nach verlorenen Bildern erspart...
Nochmals zurück zu Snapshots vs. Backup.
Am lokalen Rechner mache ich in genannter Art und Weise Snapshots aus den oben sehr ausführlich erklärten Gründen.
Diese Snapshots übertrage ich dann auf externe Datenträger. Dadurch, dass btrfs in der Lage ist, aus zwei Subvolumes (ein Snapshot in btrfs ist nichts anderes als ein weiteres Subvolume) mit dem selben Elternsubvolume die Differenz zu berechnen und nur diese Differenz zu versenden um sie auf einem anderen Datenträger so einzubauen, dass aus dem vorhandenen älteren Snapshot der exakt gleiche jüngere dort entsteht, habe ich am externen Datenträger trotz incrementeller Erstellung vollwertige Backups meines Systems inclusive Deduplikation ohne Hardlinks, da btrfs vorhandene Daten in mehreren Snapshots nur einmal abspeichert.
Wenn ich mich also auf die Snapshots alleine verlasse, kann ich ganz schön auf die Fresse fallen, wenn das Speichermedium den Geist aufgibt. Wenn eine Datei in 100 Snapshots gleich vorhanden ist, ist sie dennoch nur 1x drauf. Ich habe diese eine Datei nur so oft gespeichert, wie ich sie auf verschiedenen Datenträgern gespeichert habe.
Das Schöne an diesen Btrfs-Snapshots ist aber, dass diese vollwertige Klone des Systems darstellen. Folgendes Szenario:
Auf meinem Laptop geht die Festplatte unreparierbar kaputt. Ein Vogel hat im Chemiewerk nebenan etwas gefressen und mir direkt über der HD mit ätzender Kacke ein Loch bis zum Tisch durchgebrannt...
Ich baue eine neue Platte ein, formatiere sie mit btrfs und ziehe mir mit einer Live-ISO mittels des selben Programms womit ich meine Snapshots/Backups erstelle den letzten Snapshot von System und Userdaten (das Programm macht das rekursiv, was die btrfs-progs nicht tun!!!!) nur unter geänderten Pfadangaben für Source und Target auf die Platte.
Die Partition hat vorsorglich die selbe UUID wie die vorhergehende bekommen, oder ich passe in /etc/fstab die UUID an die neue an.
Das Wiederherstellen dauer so lange, wie es eben dauert um 10, 20 oder 500GB an Daten von einem Datenträger auf einen anderen zu kopieren. (Ja, ein System hat so ~10GB, Nutzerdaten oft bedeutend mehr... da ist eine zentrale Speicherung der Nutzerdaten und Mounten mit nfs, cifs oder so wesentlich schneller... Probleme gibts halt an anderer Stelle damit). Bootpartition einrichten, Grub wiederherstellen, UEFI... Und schon arbeite ich an der exakt gleichen Situation weiter, an der mein letzter Snapshot gemacht wurde.
Anderes Szenario:
Ich habe einen Fileserver den ich mit btrfs und genanntem Setup betreibe. Die Platte des Fileservers geht kaputt. Die Backups liegen auf einem anderen Server. Da die Backups voll bootfähige Snapshots meines Fileservers sind, kann ich den anderen Server in so einen Snapshot booten und bin innerhalb weniger Minuten wieder online - Diesmal aber vom Backupserver. Ich kann mich um den Fileserver kümmern, ihn reparieren, Daten versuchen zu retten (wenn wirklich zwischen dem letzten Snapshot und dem Ausfall unwiederbringliches und wichtiges gespeichert wurde) und mit oben genannter Methode den letzten Snapshot vom Backup-Server (den ich gezielt auch Erzeugen kann!!) wieder auf den reparierten Fileserver übertragen und die ggfs. gesicherten Dateien dazuspielen, und bin wieder mit meinem Fileserver online. Der Backupserver übernimmt wieder seine angestammte Funktion als Backupspeicher.
Ich kann auch regelmäßig testen, ob die Backups (nicht nur, aber auch die Snapshots) tatsächlich boot- und korrekt benutzbar sind. Das geht mit btrfs in der Tat ziemlich einfach. Und wer testet schon wirklich, ob die Backups nicht nur gemacht, sondern auch funktionell korrekt sind? Ob incrementelle Backups tatsächlich alle Daten korrekt enthalten?
Ich nutze Linux sehr intensiv und auch die Möglichkeiten, das System anpassen zu können. Natürlich ist eine Standardinstallation was feines, wo ich im Schadensfalle bloß ein Netinstall-Iso am Stick starten muss... Das passt halt auch so gut wie ein Anzug von der Stange. Aber wie fein wäre es - um beim Vergleich zu bleiben - wenn ich meinen Lieblingsanzug, der angemessen wurde, und der schon seine Ausbeulungen an den richtigen Stellen hat um noch perfekter zu sitzen, zu verschiedenen Zuständen einfach klonen könnte. Und wenn ich dann am Baugerüst am Gehsteig hängen bleibe und mir meinen Anzug zerreisse, greif ich einfach in die Aktentasche und hole den gleichen Anzug - sogar mit dem selben Inhalt der Taschen - heraus, zieh in an geh weiter und werfe den kaputten in die nächste Mülltonne.
Das was du machst, ist einen Stangenanzug neu zu kaufen und im Bedarfsfalle die Taschen umräumen. Dabei darfst du aber keine Tasche vergessen...
Wenn ich natürlich einen Fleck von einem ausgeronnenen Kugelschreiber habe, oder mein Kind hat mir in eine Tasche ein klebriges Zuckerl gepickt, dann hab ich das im geklonten ebenfalls... nehm ich halt einen älteren Klon. Die Taxi- und Restaurantrechnung von letzter Woche vom ausufernden Geschäftsessen die ich noch nicht in die Buchhaltung gebracht habe, ist ebenfalls noch drinnen.
LIebe Grüße
scientific