Wir möchten ein Backup von allem auf unserem Debian-Server erstellen, der remote auf der anderen Seite der Welt läuft (gehostet von Linode), ohne ihn herunterzufahren.
Auf diesem System werden Shell, E-Mail, XMPP / Prosody und Web mit ein paar einfachen Nginx-Setups ausgeführt.
Wir möchten Dateien im Zusammenhang mit diesen Dingen sichern, um die Sicherheit zu gewährleisten. Beispielsweise haben Benutzer Dateien in ihren Basisverzeichnissen gespeichert.
Das vorhandene Setup muss nicht für jede einzelne / etc-Datei exakt kopiert werden. Der Grund, warum wir überhaupt das Backup machen, ist, dass wir alles auf ein neues Setup verschieben können (neuere Version von Debian immer noch auf Linode).
Ich sehe, dass Linode einen Backup-Service anbietet. Langfristig brauchen wir aber auch eigene Backups, für den Fall, dass sie untergehen oder etwas anderes Merkwürdiges passiert.
Der Grund für diese Frage ist, dass ich, als ich in der Vergangenheit versucht habe, Backups zu erstellen, immer wieder einen der beiden folgenden Fehler gemacht habe:
- Ich habe "OK, ich kopiere nur
/
und alles darunter" und bin dann in einer seltsamen Endlosschleife hängengeblieben, weil das Laufwerk, auf das ich kopiert habe, unter / media / backup gemountet war und sich selbst rekursiv kopiert hat [obv Dieses spezifische Problem trifft hier nicht zu, da wir ein Backup über rsync oder ähnliches durchführen.] Oder es ist hängengeblieben, als würde versucht werden, "lebendige" Inhalte in / proc oder / var oder was auch immer zu kopieren. oder - Ich habe gesagt: "OK, ich nehme nur das Nötigste von dem, was wir brauchen ... hmm, alle Home-Verzeichnisse und unsere Webserver-Verzeichnisse (alle unter
/var
) und lass uns eine Kopie/etc
und alle alten Mails unter / var / suchen. vmail "und dann habe ich ausnahmslos Dateiberechtigungen oder Zeitstempel versaut (um sicherzugehen, dass ich diesmal keine Unix-Dateien auf ein FAT-Laufwerk kopiere) oder etwas vergessen habe (" oh, schieß, ich hatte einige benutzerdefinierte Skripte in / usr / local / bin, die ich nirgendwo anders gespeichert habe, ich habe vergessen, diese zu bekommen, schätze, sie sind jetzt weg ").
Das obv-Kopieren des gesamten Laufwerks hat also zu Fallstricken geführt, und das selektive Kopieren von Verzeichnissen hat zu Fallstricken geführt. Ich möchte wissen, wie ich es richtig mache.
Die Frage nach dem Serverfehler Was wird für ein vollständiges Backup-System benötigt? deckt Philosophie und gute Praktiken ab, aber ich suche nach diesen spezifischeren Details von:
- Welche Verzeichnisse muss ich kopieren und welche muss ich ausschließen (vorausgesetzt, es ist ein System, das gerade ausgeführt wird und ein Wiki, einen XMPP-Chat und E-Mails bereitstellt - mit neuen Nachrichten, die eingehen, während der Kopierauftrag ausgeführt wird)
- Welche Dateiattribute wie Zeitstempel & Eigentümer & Gruppe muss ich präsentieren und wie mache ich das? ← Ich denke, ich kann diese Hälfte der Frage selbst mit so etwas wie ... ähm ... beantworten.
rsync -HXaz
Ich denke, das ist eine gute Option für uns? Das-z
obv hat nicht wirklich mit der Frage zu tun, was ich bewahre
Ein Großteil der Sicherheitshinweise, die ich wie bei der Verwendung sehe, dd
scheint davon auszugehen, dass das Laufwerk nicht gemountet ist und nicht verwendet wird. Aber soll ich nicht ausschließen „lebenden“ Verzeichnisse wie / proc und einige der Unterverzeichnisse unter / var (aber einige der Sachen unter / var Ich weiß , wir auf jeden Fall tun müssen halten) und / montieren? Woran muss ich in dieser Situation noch denken? Dann kann ich es wohl einfach mit rsync und ein paar --exclude
Flags bearbeiten .
Oder gibt es bessere Ideen, besonders FOSS-freundliche?
cp -r -a
wird erhalten , wie viel Datei wie möglich Attribute beim Kopieren von Dateien (basierend auf , was das Zieldateisystem unterstützt). Das-a
Flag weistcp
an, Attribute beizubehalten. Das Kopieren über ein Netzwerk oder über ein Dateisystem, das die erforderlichen Attribute nicht unterstützt,tar -c
hat immer für mich funktioniert, obwohl ich glaube, dass es einige Randfälle gibt, die es nicht abdeckt, und insbesondere glaube ich, dass sietar
standardmäßig von übereinstimmenden Benutzernamen abhängen beide Systeme. Trotzdem habe ich ein ganzes (nicht gemountetes) Linux-Systemtar
ohne offensichtliche Probleme kopiert .Antworten:
Sie möchten also Ihr gesamtes Laufwerk ohne diese bösen Fehler sichern und auch alle / proc- und anderen temporären Ordner herausfiltern?
Eine Option besteht darin, den Stammordner in einen anderen Ordner im Dateisystem einzuhängen:
Dadurch erhalten Sie alle Dateien auf Ihrem Laufwerk, die nicht als temporär angesehen werden (z. B. die Ordner / proc oder / sys).
Jetzt, da Sie eine saubere Ansicht Ihres Stammordners haben, können Sie ihn einfach mit Standard
cp
oder auf Ihr Sicherungslaufwerk kopierenrsync
. Etwas in der Art von:Dies löst die beiden genannten Probleme:
Siehe auch: Man Mount (8)
quelle
In Linux ist alles eine Datei. Es ist über rsync möglich, aber es gibt Dinge zu beachten, die (bestenfalls) schwer zu umgehen sind.
Sie sollten zuerst über die Replikation nachdenken, insbesondere für Datenbanken. Dies ist auch eine gute Idee, um Proxy / Load Balancer vor Ihrem Primärserver einzurichten, damit Sie während des Übergangs problemlos zwischen Primär- und Spiegelservern wechseln können.
Auf der Hardware-Ebene ist es am besten, einen spiegelähnlichen Server auf einer anderen Seite mit der gleichen Anzahl von Ethernet-Ports, dem gleichen Festplattenlayout usw. zu haben. Alles, was sich unterscheidet, erfordert Änderungen der Systemkonfiguration.
Wenn Sie also über zwei eth-Ports verfügen, möchten Sie sicherstellen, dass die Netzwerkkonfiguration, die Firewall usw. mit dem Schnittstellennamen auf beiden Servern übereinstimmen. Falls dieser abweicht, müssen Sie entweder die Konfiguration nach rsync oder den Gerätenamen auf der zweiten ändern (Ziel-) Server.
Gleiches gilt für das Partitionslayout. Sie sollten dieselben Partitionen wie auf Ihrem Primärserver erstellen. Wenn Sie diese jedoch von Grund auf neu erstellen, erhalten Sie unterschiedliche UUIDs. Daher müssen Sie fstab, grub, mdadm (falls es sich um Soft-Raid handelt) usw. ändern .
Aber es gibt auch viele Dinge, die schief gehen können, wie Datenbanken, die inkonsistent sein können, wenn sie nicht zuvor gestoppt wurden (bevor Sie rsync ausführen).
Die beste Strategie besteht darin, zuerst die Hardware und das Dateisystem (Partitionen) vorzubereiten, um sie an die Konfiguration des Primärservers anzupassen. Mounten Sie dann leere Parititons über ein zwischengeschaltetes System (wie eine Live-CD mit vorübergehend installiertem ssh-Server). Sie erstellen ein leeres / proc, / dev, / sys und synchronisieren dann den Rest wie folgt:
Dann müssen Sie grub auf dem Gerät installieren und an der Konfiguration arbeiten, um es bootfähig zu machen, die Netzwerkkonfiguration, fstab und andere zuvor erwähnte Dinge zu ändern.
Sie können auch versuchen, ein neues System zu installieren (mit derselben Version, die Sie auf Ihrem Primärserver verwenden), es dann auszuschalten, es über ein anderes temporäres System (z. B. eine Live-CD) bereitzustellen und dann alles andere als / proc, / zu ersetzen. sys, / dev und / boot mit rsync.
Aber es ist nur eine allgemeine Idee. Je nachdem, was auf diesem Server tatsächlich vorhanden ist, wie Ihre Konfiguration, Ihr Netzwerk und Ihre Hardwarekonfiguration aussehen, kann dies zu Komplikationen führen. Und am Ende des Tages könnte dies wirklich schwierig oder unmöglich sein, ohne spürbare Ausfallzeiten.
quelle
kill -9
sicher ist, da sie sonst möglicherweise nicht wiederhergestellt werden kann. Eine gute Datenbank sollte diese Situation bewältigen, aber eine überraschende Anzahl von Produkten tut dies nicht (oder noch schlimmer, sie werden fast immer wiederhergestellt, versagen jedoch einmal in einem blauen Mond, wenn Sie sie wirklich brauchen, um zu funktionieren). In der Praxis ist die Replikation wahrscheinlich sowieso zuverlässiger.Was Sie tatsächlich wollen, ist die Wiederherstellung. Was auch immer Sie tun, Sie müssen es regelmäßig testen.
Linode hat einen Backup-Service. Die Snapshots können nach einem begrenzten vordefinierten Zeitplan oder mit einer API erstellt werden.
Ein Vorteil von Snapshot-basierten Backups ist, dass sie einen scharfen Zeitpunkt bieten, da sich die Daten während des Kopierens nicht ändern. Snapshots können auch problemlos auf einem anderen Host, in diesem Fall einem neuen Linode, wiederhergestellt werden.
quelle
Ich verwende BackupPC für meinen kleinen virtuellen privaten Server. Dies funktioniert recht gut. BackupPC kann Rsync unter der Haube verwenden und unterstützt vollständige und inkrementelle Sicherungen. Schauen Sie sich das an und prüfen Sie, ob es Ihren Anforderungen entspricht.
quelle
Führen Sie Ihr System auf ZFS aus. Dann können Sie eine Momentaufnahme eines Atoms machen, die ungefähr so aussieht wie:
Wo auch
tank
immer Ihr ZFS-Pool heißt. Bei diesem Snapshot handelt es sich garantiert um einen Momentaufnahme des Dateisystems und aller seiner untergeordneten Dateisysteme.Sobald Sie den Schnappschuss erstellt haben, können Sie ihn mit
zfs send
und auf einen anderen Host übertragenssh
.quelle
Ich meine Meinung Es kommt darauf an, was und wo Sie Server mit internem Linux-Befehl ausführen. Es ist nicht möglich, vollständige Daten und Bibliotheken zu imitieren / weiterzuleiten. Wenn Sie auf VMware ausgeführt und ordnungsgemäß konfiguriert haben, wird eine Livemigration bereitgestellt. Andernfalls müssen Sie Tools von Drittanbietern verwenden. Hoffe das wird dir helfen. Weitere Referenzen Wie erstelle ich ein Backup eines Live-Servers?
Rsync ist ein guter Befehl zum Synchronisieren der Daten zwischen Servern.
quelle
Es stehen 2 Lösungen zur Verfügung, bei denen Sie sich nicht mehr auf fehlende Teile sowie auf einen fehlenden Eintrag auf Ihrer Liste verlassen müssen, weil die Checkliste unvollständig ist oder nur etwas heißes übersehen wurde.
Erstens können Sie, wenn Sie dies auf eine Plattform verschieben, die mehr Kontrolle über die zugrunde liegende Hardwareplattform bietet, Festplatten-Snapshots aller Dateien erstellen, während der Server ausgeführt wird. In AWS können Sie beispielsweise einen Snapshot einer EBS-Festplatte erstellen und die Differenzen erst bezahlen, wenn Sie später einen weiteren Snapshot erstellen.
Zweitens empfehle ich, das Setup Ihres kompletten Servers mit einem Konfigurationsmanagementsystem wie Ansible zu skripten. Dieser Wille
dokumentieren Sie alles, was Sie in der Quellcodeverwaltung konfiguriert haben
Ermöglichen es Ihnen, den Server anhand von Backups oder Bare-Metal-Dateien neu zu erstellen, um sicherzustellen, dass Ihre Skripts auf dem neuesten Stand sind
Ermöglichen es Ihnen, das Skript auf einem neueren Betriebssystem erneut auszuführen, normalerweise mit geringfügigen Änderungen.
quelle