Wie repliziere ich mit xfsdump/xfsrestore?

Diese Anleitung soll helfen die Tools xfsdump und xfsrestore im Netzwerk einzusetzen um eine Partition zu replizieren.

XFS ist ein Journaling File System welches mit 2 nützlichen Tools ausgestattet ist. Dabei handelt es sich um xfsdump und xfsrestore

  • xfsdump erstellt Snapshots einer XFS Partition zur Laufzeit
  • xfsrestore wird zum Zurückspielen des Snapshots verwendet

Warum sollte man diese Backuptools verwenden um zwei Partitionen zu synchronisieren?

  • Weil es simpel ist und man keine zusätzlichen Programme braucht
  • Weil es auf bestehenden Installationen mit XFS Partitionen keine Ausfallzeit verursacht
  • Weil es eine stabile und  getestete Lösung ist
  • Weil Echtzeit-Replikation zu aufwendig für eine schnelle Lösung ist

Wann sollte ich diese Methode nicht einsetzen?

  • Sobald oft große Dateien geändert werden, z.B. Datenbanken mit Dateien über 2 GB
  • uvm

Welche Software brauche ich für diese Lösung?

Meine Server laufen alle samt unter Debian mit mehr oder weniger standardisierten Paketen,  soweit es geht, aber in diesem Fall können alle Pakete mit Debian bzw. GNU/Linux Bordmitteln installiert werden. Zur Vorbereitung installieren wir folgende Programme:

Debian:

apt-get install xfsdump netcat

Bei anderen Distributionen gibt es ähnliche Möglichkeiten, diese werden sich auf der Seite der Distributionen sicher finden lassen.

Wir beginnen mit dem base dump, diesen nennen wir Sonntag und schaut so aus:

xfsdump -f /xfs/KW12/0.dump -l 0 -p 5 -L KW12 -M Sonntag /srv

Parameterliste:

  • -f /xfs/KW12/0.dump – Ist der Pfad zur Backup Datei
  • -l 0 (Null) – Bedeutet das ein komplettes Abbild erstellt wird
  • -p 5 – Zeigt alle 5 Sekunden den aktuellen Transferstatus an
  • -L KW12 – Setzt das Label auf „KW12“
  • -M Sonntag – Benennt das Medium (diesen Dump) als „Sonntag“
  • /srv – Pfad zu der Partition die gesichert werden soll
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 2.2.48 (dump format 3.0) - Running single-threaded
xfsdump: WARNING: most recent level 0 dump was interrupted, but not resuming that dump since resume (-R) option not specified
xfsdump: level 0 dump of battlegate:/srv
xfsdump: dump date: Sat Feb 20 18:23:32 2010
xfsdump: session id: c5c3a85b-9a81-45c2-a8d8-a42d1b4aa744
xfsdump: session label: "KW12"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 11027072 bytes
xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 11030816 bytes
xfsdump: dump size (non-dir files) : 11009488 bytes
xfsdump: dump complete: 0 seconds elapsed
xfsdump: Dump Status: SUCCESS

Für den zweiten Tag (Montag) verwenden wir folgende Parameter:

xfsdump -f /xfs/KW12/1.dump -l 1 -p 5 -L KW12 -M Montag /srv

Parameterliste (geänderte):

  • -f /xfs/KW12/1.dump – Die Datei für diesen Tag heißt 1.dump
  • -l 1 – Das erste Level des Backups im Verhältnis zu 0.dump (Man könnte es auch gleich setzen mit dem ersten Inkrementellen Sicherungspfad)
  • -M Montag – Dieses Medium heißt Montag
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 2.2.48 (dump format 3.0) - Running single-threaded
xfsdump: WARNING: most recent level 1 dump was interrupted, but not resuming that dump since resume (-R) option not specified
xfsdump: level 1 incremental dump of battlegate:/srv based on level 0 dump begun Sat Feb 20 18:23:32 2010
xfsdump: dump date: Sat Feb 20 18:42:31 2010
xfsdump: session id: 955863dc-0319-4925-905c-106e5729f160
xfsdump: session label: "KW12"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 23122560 bytes
xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 23130400 bytes
xfsdump: dump size (non-dir files) : 23108752 bytes
xfsdump: dump complete: 1 seconds elapsed
xfsdump: Dump Status: SUCCESS

Um diese Dumps auf einem neuen XFS Filesystem wiederherzustellen, müssen diese in der gleichen Reihenfolge wie sie erstellt worden sind eingespielt werden.

xfsrestore -p 5 -r -f /xfs/KW12/0.dump /srvrepl/

  • -p 5 – Zeigt alle 5 Sekunden den aktuellen Transferstatus an
  • -r – Setzt xfsrestore davon in Kenntnis das es mehrere Dumps gibt die eingespielt werden
  • -f /xfs/KW12/0.dump – Die Datei für diesen Tag heißt 0.dump
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 2.2.48 (dump format 3.0) - Running single-threaded
xfsrestore: searching media for dump
xfsrestore: examining media file 0
xfsrestore: dump description:
xfsrestore: hostname: battlegate
xfsrestore: mount point: /srv
xfsrestore: volume: /dev/hdd1
xfsrestore: session time: Sat Feb 20 18:23:32 2010
xfsrestore: level: 0
xfsrestore: session label: "KW12"
xfsrestore: media label: "Sonntag"
xfsrestore: file system id: 35bd167c-84a6-47d8-9128-a2027e845a64
xfsrestore: session id: c5c3a85b-9a81-45c2-a8d8-a42d1b4aa744
xfsrestore: media id: bbb03c73-aca1-4172-970d-53d470de50ac
xfsrestore: using online session inventory
xfsrestore: searching media for directory dump
xfsrestore: reading directories
xfsrestore: 1 directories and 1 entries processed
xfsrestore: directory post-processing
xfsrestore: restoring non-directory files
xfsrestore: restore complete: 0 seconds elapsed
xfsrestore: Restore Status: SUCCESS

xfsrestore -p 5 -r -f /xfs/KW12/1.dump /srvrepl/

  • -f /xfs/KW12/1.dump – Die Datei für diesen Tag heißt 1.dump
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 2.2.48 (dump format 3.0) - Running single-threaded
xfsrestore: searching media for dump
xfsrestore: examining media file 0
xfsrestore: dump description:
xfsrestore: hostname: battlegate
xfsrestore: mount point: /srv
xfsrestore: volume: /dev/hdd1
xfsrestore: session time: Sat Feb 20 18:42:31 2010
xfsrestore: level: 1
xfsrestore: session label: "KW12"
xfsrestore: media label: "Montag"
xfsrestore: file system id: 35bd167c-84a6-47d8-9128-a2027e845a64
xfsrestore: session id: 955863dc-0319-4925-905c-106e5729f160
xfsrestore: media id: 7fbedf79-4a55-4270-8ba9-08ee4da163a4
xfsrestore: using online session inventory
xfsrestore: searching media for directory dump
xfsrestore: reading directories
xfsrestore: 1 directories and 2 entries processed
xfsrestore: directory post-processing
xfsrestore: restoring non-directory files
xfsrestore: restore complete: 0 seconds elapsed
xfsrestore: Restore Status: SUCCESS

Nachdem alle Dumps eingespielt wurden, müssen noch 1 bzw. 2 Verzeichnisse gelöscht werden.

rm -R /srvrepl/xfsrestorehousekeepingdir
rm -R /srvrepl/orphanage

Und wenn wir die Dumps direkt auf einem anderen Rechner replizieren wollen, können wir ganz simpel netcat dazu verwenden.
Auf Empfängerseite:

nc -l -p 2222 | xfsrestore -p 5 -r /srvbackup

Netcat

  • -l – versetzt Netcat in den Servermodus
  • -p 2222 – ist der Port auf dem Netcat zuhören soll

xfsrestore

  • -p 5 – Zeigt alle 5 Sekunden den aktuellen Transferstatus an
  • -r – Setzt xfsrestore davon in Kenntnis das es mehrere Dumps gibt die eingespielt werden

Auf Senderseite:

xfsdump -l 0 -p 5 -L KW12 – /srv | nc 2222 -q 5

xfsdump -l 1 -p 5 -L KW12 – /srv | nc 2222 -q 5

xfsdump Parameter:

  • -f – Diese Option ist weggefallen und wurde durch einen Bindestrich vor dem xfs Pfad ersetzt
  • -l 0/1 – Hier wird das 0 Dump und der 1 Dump in zwei getrennten Aufrufen gesendet
  • -M – Ist nicht notwendig da es direkt eingespielt wird.

Netcat Parameter:

  • 2222 – Die IP des Zielrechners und der Port dazu. (Der gleiche wie beim Empfänger netcat angegeben)
  • -q 5 – Beendet netcat nach einem EOF und 5 Sekunden Wartezeit

In diesem Fall löschen wir die zwei Verzeichnisse nicht, da diese vielleicht von xfsrestore in zukünftigen Aufrufen gebraucht werden.

Ich hoffe dieser Artikel ist hilfreich, bei Anregungen, Fehlern oder ähnlichem, einfach einen Kommentar hinterlassen.

Notice: This work is licensed under a BY-NC-SA. Permalink: Wie repliziere ich mit xfsdump/xfsrestore?

One Comment

  1. R1D2 sagt:

    Ganz schön kompliziert bei euch Linuxern!

    Der einfachste Weg, mit xfsdump das gesamte Dateisystem auf eine andere Platte oder einen anderen Server (ssh oder netcat einfügen) zu replizieren, lautet:

    xfsdump -J – /src | xfsrestore -J – /dest

    Fertig.

    Der Hauptgrund übrigens, weshalb man xfsdump (auch für Backups!) nutzen sollte: weil es auch die Directory-Struktur sichert, also auch gelöschte Directories berücksichtigt.

    Gruß vom SGI’ler :grin:

Mastodon