Teil 2: einen ganzen Server Rsyncen

https://marius.bloggt-in-braunschweig.de/2025/04/23/teil-1-wie-man-partitionen-neue-alte-uuids-gibt/

Ihr hat den ersten Teil gelesen und wollt mehr erfahren? Syncen wir doch mal einen ganzen Server.

Teil 2: einen ganzen Server Rsyncen

Ihr habt sicher schon mal etwas von einem Clusterfilesystem gehört. Dabei mounten man auf zwei Servern ein gemeinsames Filesystem, daß sich dann über das Netzwerk abgleicht, in dem alle Blöcke mit Änderungen einzeln von A nach B transportiert werden, das GlusterFS macht(e) sowas z.b.  Problem hier,  das geht nur für ganze Mountpoints, also Verzeichnisse oder Partitionen. Wer Teil 1 gelesen hat, weiß das in dem aktuellen Fall so ein ClusterFS nicht geht, weil es Abweichungen im Netzwerk gibt, die dann jedes mal überschrieben würden.

Natürlich gibt es auch andere ClusterFilesysteme die nach Dateien , statt Blöcken gehen, und da kann man dann Dateien excluden, aber in dem Fall haben wir einen Liveserver den wir nicht stoppen dürfen um dem „umzuformatieren“, so daß er so ein ClusterFS benutzen kann, dazu sind da auch zu viele Daten drauf um den „mal eben“ umzukopieren.

Zum Glück brauchen wir das nicht, weil wir Rsync nehmen können.

Ok, Ich habe gelogen, wir syncen gar nicht den ganzen Server 😉

Wir Syncen /etc/ /home/ /var/lib/mysql und alle anderen Plätze wo Userdaten liegen. Das Prinzip erläutere ich mal bei /etc/ und wo man da aufpassen muß. Das hier führen wir auf dem Hotstand-By-Server aus:

rsync -a –delete -v -e „ssh -C -i /root/.ssh/synckey“ root@$ZIELSERVER:/etc –exclude=/etc/sysconfig –exclude=/etc/fstab –exclude=/etc/systemd –exclude=/etc/iproute2 –exclude=/etc/cron.d /

Wir verbinden uns also zum Live-System und syncen ZU UNS!  Nennen wir das mal PULL-Verfahren. Das würde auch in die andere Richtung gehen, dann wäre ein PUSH-Verfahren. Liegt bei Euch was Ihr machen möchtet. Eines möchte ich aber zu bedenken geben:

Wenn man schon einen anderen Server hinstellt, dann so, daß wenn der aktive Server gehackt wird, der Hacker nicht auf den Reserveserver drauf kommt. Ein PULL hat also einen gewissen Vorteil. Der nicht ausgelastete Reserveserver kann auch das Datenbackup machen und so den Liveserver entlasten. Denkt über solche Sachen vorher nach, es lohnt sich 😉

Der Rsync erklärt

rsync -a –delete -v -e „ssh -C -i /root/.ssh/synckey“

„-a –delete -v „ archiviert und löscht Daten rekursiv auf dem Empfängerserver, wo mit der Hotstand-By im Sync bleibt mit allen Änderungen auf dem Quellserver, aber auf dem Quellserver nichts verändert wird. Das ist ganz wichtig, weil ein Master-Master-Setup beim Sync birgt richtig Potenzial für Datenverluste.

Damit sich unser Rsync überhaupt auf den anderen Server verbinden kann ohne das wir ein Passwort eingeben müssen, nehmen wir einen passwortlosen sshkey ‚-e „ssh -C -i /root/.ssh/synckey“ ‚ , denn einen SSH-Agenten gibt es dort nicht, bzw. der würde es auch nicht sicherer machen, weil der KeyStore nie ablaufen darf, sonst geht der Sync nicht mehr. Wer will da schon jeden Tag rein und den KeyStore verlängern?

Zuerst geben wir an, was wir syncen wollen, also /etc/ , dann die ganzen Excludes, die wir NICHT syncen wollen, dann wohin es gesynct werden muß -> „/“:

root@$ZIELSERVER:/etc –exclude=/etc/sysconfig –exclude=/etc/fstab –exclude=/etc/systemd –exclude=/etc/iproute2 –exclude=/etc/cron.d /

Tip: Wieso „/“ als Ziel? Weil /etc/ in / liegt! Würde man hier /etc als Ziel angeben, dann ergäbe das /etc/etc .

In /etc/sysconfig sind z.b. die Netzwerkkonfigurationen, in /etc/systemd können z.b. lokale Anpassungen im Hotstand-By sein, so daß die nicht gelöscht werden dürfen, nur weil es die auf dem Quellserver nicht gibt. IProute2 ist ein Sonderfall, auf den wir im nächsten Teil eingehen werden und im cron vom Quellserver laufen Dinge die nicht auf dem Hotstand-By laufen sollen.

Kleines Konfigproblem

Wir haben jede Menge Konfigurationsdateien von Netzwerkbasierten Diensten wie Apache HTTPD, Proftp usw. gesynct, die aber alle auf dem Quellserver konfiguriert wurden, sprich: die IPs da drin stimmen nicht! Das können wir aber leicht nach dem Sync beheben. Ein unvollständiges Beispiel:

$ replace „1.2.3.4“ „5.68.7.85“ — /etc/sysconfig/iptables /etc/sysconfig/network-scripts/ifcfg-* /etc/sysconfig/network /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/ssl.conf /etc/named/* /etc/hosts

Da Ihr clever wart und Eure Dienste auf dem Reserveserver erst gestartet habt, nachdem Ihr den IP Replace gemacht habt, brauchen die Dienst deswegen nicht nach jedem Sync neu gestartet werden. Die laufen ja schon auf der richtigen IP.

Jetzt hatte ich eingangs gesagt, einiges wie Netzwerkkonfiguration soll nicht gesynct werden, kann man aber machen, wenn man die IPs / Macs usw. passend ersetzt. Und deswegen sollte das auch ein PULL sein, weil der Hotstand-By weiß, welche IPs er hat, der Quellserver muß das nicht wissen und muß es dann auch nicht fixen, wozu er mehr als nur Rsync Zugang bräuchte.

Wenn man / syncen will

Wenn man wirklich dumme Sachen machen will:

rsync -a –delete -v -e „ssh -C -i /root/.ssh/synckey“ root@$ZIELSERVER:/ –exclude=/{dev,proc,run,sys,tmp} /

dann klammert wenigstens /dev /proc /sys und /run aus, wenn Euch schon nicht anders zu helfen ist 😉  Denkt dran, das bei dem Sync jeder CRON, egal ob per crond oder systemd, sofort gelöscht wird. Ein nachträglicher Fix oder weiteren Sync wird es nicht geben, wenn Ihr die nicht auch excluded!  Außerdem denkt dran, Ihr synct auch die Syncbefehle, libs und /bin usw.. das kann böse ins Auge gehen, deswegen sagte ich, daß das eine Dummheit wäre. Wenn so ein Sync während es Updates passiert, ist das Update weg und nur noch halb vorhanden oder nur halb gesynct. Tut es nicht, wenn es nicht absolut sein muß, oder tut es in ein Unterverzeichnis.

Teil 1: Wie man Partitionen neue/alte UUIDs gibt

Wie ändert man eigentlich eine UUID einer Platte oder Partition und wieso macht man das überhaupt?

Wie man Partitionen neue/alte UUIDs gibt

Zur Zeit habe ich ein spannendes Projekt, bei dem soviel schief geht, daß man aus dem Lernen und kreativ sein, gar nicht mehr rauskommt 🙂 Als Hintergrund müßt Ihr nur wissen, daß wir einen Hotstand-by-Server für einen Kunden realisieren, der in einem anderem Rechenzentrum und Netzsegment steht. Er hat also nicht die gleiche IP, nicht die gleiche MAC usw. aber alle Configs sollen gleich sein, damit alles reibungslos klappt, wenn man dahin umschaltet.

„Warum? Damit die Kiste noch bootet“

So ein Server hat nicht nur eine Webseite, sondern tausende davon, dazu Mailkonten, FTP Zugänge, SSH Benutzer usw. usw. Dies bedeutet, daß eine Menge an Konfigurationen zwischen den Servern synchronisiert werden müssen, wo man ganz leicht den Überblick verlieren kann und so Dateien auf dem Hotstand-by-Server nicht auf Stand wären.

Daher haben wir uns zu einem Full-Sync entschieden, soweit das geht. D.h. es werden alle Dateien des Server gesynct, außer denen die absolut nicht geändert werden dürfen z.b. die Netzwerkkonfiguration. Dies minimiert Fehlerquellen, erzwingt aber 1:1 Hardware und, ob man es glaubt oder nicht, auch die gleichen Festplattenreihenfolge.

Jetzt haben wir eine frische VM auf dem externen Server erstellt, was bedeutet der hat seine Platte frisch Partitioniert und formatiert. Die unterscheidet sich aber von der auf dem Originalserver und das würde nach dem Sync von /etc/ dazu führen, daß der Server nicht mehr bootet, weil die /etc/fstab so aussieht:

#
# /etc/fstab
# Created by anaconda on Thu Mar 3 13:22:46 2016
#
# Accessible filesystems, by reference, are maintained under ‚/dev/disk‘
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=17b8949a-60ad-422f-8b9b-f7b9da7f36fe / ext4 defaults,usrquota 1 1
UUID=614da79b-c6c6-4534-b673-fbec98089270 swap swap defaults 0 0
devtmpfs /opt/root/dev devtmpfs rw,nosuid,mode=755 0 0
proc /opt/root/proc proc rw,nosuid,nodev,noexec,relatime 0 0

Wie man leicht erkennen kann, ist die Systemplatte per UUID eingebunden, und da es eine andere Partition ist, haben wir auch eine andere UUID. Das müssen wir ändern, also schauen wir auf dem normalen Server mal nach, wie denn die UUID ist:

$ lsblk -f
NAME   FSTYPE  FSVER            LABEL                 UUID                                 FSAVAIL FSUSE% MOUNTPOINTS                                                                                                
sdb                                                                                                       
├─sdb1                                                                                                    
├─sdb2 ext4    1.0                                    17b8949a-60ad-422f-8b9b-f7b9da7f36fe  264,1G    59% /
└─sdb3 swap    1                                      614da79b-c6c6-4534-b673-fbec98089270                [SWAP]

Wir haben also zwei Partitionen mit UUIDs, genau wie in der /etc/fstab ( was für ein Zufall 😉 ).

Wenn Ihr das selbst versucht, Ihr werdet andere Partitionen haben und das nicht 1:1 nachmachen können!

Da haben wir eine ext4 und eine swap Partition und damit auch gleich das erste Problem, wie Ihr gleich feststellen werdet, aber eins nach dem anderen. Zuerst setzen wir mal die neue UUID für ext4:

tune2fs -U 17b8949a-60ad-422f-8b9b-f7b9da7f36fe /dev/sdb2

Wenn man jetzt „tune2fs -U 614da79b-c6c6-4534-b673-fbec98089270 /dev/sdb3“ macht, weil das bei sdb2 so gut geklappt hat, dann wird tune2fs das mit einer Fehlermeldung verweigern :

tune2fs 1.47.0 (5-Feb-2023)
tune2fs: Ungültige magische Zahl im Superblock beim Versuch, /dev/sdb3 zu öffnen
/dev/sdb3 hat ein swap-Dateisystem

Es muß also einen anderen Weg geben, einer Swap Partition eine neue UUID zu verpassen… welcher könnte das sein?

Das SWAPLABEL

Holen wir uns doch erst einmal die UUID, wenn wir schon dabei sind:

$ swaplabel /dev/sdb3
UUID: 614da79b-c6c6-4534-b673-fbec98089270

und genauso leicht kann man die auch ändern:

$ swaplabel –uuid 614da79b-c6c6-4534-b673-fbec98089270 /dev/sdb3

Jetzt darf man auf keinen Fall vergessen die /etc/fstab anzupassen, sonst stehen da die alten UUIDs drin und das System bootet nicht mehr. Wenn man natürlich jetzt den Sync von /etc/ anwirft, erübrigt sich das natürlich 😉

Für ReiserFS und andere Filesysteme gibt es teilweise Spezialtools, die mit dem Filesystem zusammen ausgeliefert werden. Wer das mit einem grafischen Werkzeug wie GParted oder Gnome-Disks machen möchte, muß nicht mal wissen, was für ein Filesystem er da vor sich hat.

Apropos neue UUIDs geben, das geht so:

tune2fs -U $(uuidgen) /dev/sdxX

Je nach Distro (hier Fedora) die Ihr verwendet, kann der Befehl auch nur „uuid“ heißen.

Linux am Dienstag – Programm für den 22.4.2025

Diesmal bei Linux am Dienstag gibt es viele kleine Tricks und Bugfixe zum Fedora & Cinnamon Update, wie

Linux am Dienstag – Programm für den 22.4.2025

u.a. im Programm am 22.4.2025, ab 19 Uhr :

Linux – Advanced Routing – 101 (Marius)
Linux – UUID’s von Partitionen ändern
Network – Wieso 3,5Mb/s weißes Rauschen nicht ok sind, auch wenn der Support das sagt.
Linux – Fedora Update Bugs beheben
Linux – RSync für einen ganzen Server (Marius)

und andere IT-Newsbeiträge aus aller Welt. Wie jede Woche per Videokonferenz auf https://meet.cloud-foo.de/Linux .
Hinweis: Die bisherigen Vorträge findet man unter https://linux-am-dienstag.de/archiv/ .