Backupkonzept: Unterschied zwischen den Versionen

Aus Linupedia.org
Wechseln zu: Navigation, Suche
 
(Hinweis geändert)
 
(13 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 +
== Backupkonzept mit tar ==
  
 +
Der kleine Linuxuser braucht ein kleines Backupkonzept mit dem er regelmäßig seine Dateisystemsicherungen machen kann.
 +
Was er aber vor allem braucht, ist die Sicherheit mit Hilfe dieses Backups sein System jeder Zeit auch wieder schnell herstellen zu können.
  
[[Category:Security]]
+
Im folgenden hier einige dokumentierte Beispiele, die bei der Erstellung eines kleinen Backupkonzeptes mit Bordmitteln von Linux behilflich sein sollen.
 +
 
 +
 
 +
; [[#Komplettsicherung | Komplettsicherung]] : Sicherung eines Linuxrechners mittels des tar-Befehles
 +
; [[#Komplettes Restore | Komplettes Restore]] : wiederherstellen des Systems nach Austausch einer baugleichen Festplatte
 +
; [[#Austausch eines laufenden LINUX | Austausch eines laufenden LINUX]] : restore auf einem remote Rechner durch die Backupdaten mit gleichzeitigem teilweise Umbau des Systems. 
 +
 
 +
 
 +
''' Hinweis: '''
 +
* Es wird der komplette Ablauf und die vollständigen Befehle mit allen Optionen aufgezeigt
 +
* Befehlsausgaben sind auf die relevanten Informationen gekürzt.
 +
* Die einzelnen Befehle sollten mit Hilfe dieser Dokumentation auf andere Systeme recht einfach übertragen und angepasst werden können.
 +
* Es wird auf mögliche Problembereiche hingewiesen.
 +
 
 +
 
 +
=== Komplettsicherung ===
 +
 
 +
Die Ausgangssituation:
 +
<pre>
 +
LINUX:~ # df
 +
Filesystem          1K-blocks      Used Available Use% Mounted on
 +
/dev/sda2              4883300  1131272  3752028  24% /
 +
/dev/sda1              260020    55320    204700  22% /boot
 +
/dev/sda3              4883300  2240880  2642420  46% /usr
 +
/dev/sda6            24837316    49300  24788016  1% /home
 +
 
 +
LINUX:~ # fdisk -l /dev/sda
 +
  Device Boot      Start        End      Blocks  Id  System
 +
/dev/sda1  *          1        254      260080  83  Linux
 +
/dev/sda2            255        5023    4883456  83  Linux
 +
/dev/sda3            5024        9792    4883456  83  Linux
 +
/dev/sda4            9793      35003    25816064    5  Extended
 +
/dev/sda5            9793      10747      977904  82  Linux swap / Solaris
 +
/dev/sda6          10748      35003    24838128  83  Linux
 +
</pre> 
 +
Das System ist also auf mehrere Partitionen der /dev/sda verteilt. Es existieren 4 Filesysteme / /usr /boot /home und eine Swappartition. Man sichert mit tar immer komplette Filesysteme von ihrem [[Mountpoint]] aus, in seperate Archive.
 +
Zuerst sammeln wir jedoch einige Zusatzinformationen vom System ein, die zum Beheben von schweren Fehlern und zum Wiederherstellen des Systems sehr hilfreich sein können. Dazu sammeln wir folgende Dateien und Ausgaben von Befehlen ein, und kopieren diese in ein spezielles [[Directory|Verzeichnis]] /root/backup , das wir uns zum sammeln der Informationen vom Backup anlegen.
 +
<pre>
 +
LINUX:/boot/grub # cp device.map menu.lst /root/backup/            #Grubkonfiguration
 +
LINUX:/etc # cp /etc/fstab /root/backup                            #/etc/fstab
 +
LINUX:/etc # fdisk -l > /root/backup/fdisk_l                      #die komplette Partitionierung
 +
LINUX:/etc # dd if=/dev/sda of=/root/backup/sda_MBR bs=512 count=1 #den MBR von der Bootplatte
 +
LINUX:/etc # sfdisk -d /dev/sda > /root/backup/sda_sfdisk_dump    #einen Partitionsdump mit sfdisk
 +
LINUX:/etc # mount > /root/backup/mount                            #die Ausgabe von mount
 +
LINUX:/etc # df > /root/backup/df                                  #die Ausgabe von df
 +
</pre>
 +
Diese Informationen können uns später helfen, die orginal Partitionierung, die Filesysteme und Mountpunkte schnell und zielsicher wieder herzustellen.<br/>
 +
Je nach Rechner können hier noch mehrere Daten wichtig sein, zB Rechnernamen, Datum, Kernel, initrd, Kernelkonfiguration, Partitionierung weiterer Platten, Filesystemparameter  usw. aber man sollte sich wirklich auf das beschränken, was man wirklich zum booten und zur Wiederherstellung der Filesysteme benötigen könnten.
 +
 
 +
Als nächstes kommt die eigentliche Sicherung. Als Sicherungsmedium dient hier im Beispiel eine 2 Platte die schon nach /mnt temporär gemountet wurde. Gesichert wird mittels tar, die Komprimierung mit gzip schalten wir ein. Eine Logdatei der Namen der gesicherten Dateien wird je Archiv ebenfalls in /root/backup angelegt. Als Namen für diese Listen wählen wir "list.MOUNTPOINT". Damit kann später durch auslesen dieser Dateien schnell festgestellt werden, was in unseren Archiven alles enthalten ist, ohne gleich alle großen Archive auslesen zu müssen<br/>
 +
Es werden 4 Filesysteme / /usr /boot /home in jeweils ein eigenes Archiv gesichert. Anschließend wird ein Archiv von /root/backup ebenfalls als seperates Archiv erstellt und in eine eigene Datei die md5sum der 5 Archive geschrieben, das könnte man als Vergleich heranziehen, wenn die Archive zB über das Netz kopiert oder verschoben wurden, oder auf DVD gebrannt wurden.
 +
 
 +
 
 +
----
 +
 
 +
{{Überarbeiten}}
 +
''die Option '''-l''' die hier verwendet wurde ist mittlerweile in aktuellen Versionen nicht mehr erhalten, was zur Entstehung dieses Howtos noch zu einer unbedeutenten Warnung geführt hat, erzeugt jetzt einen Fehler. Abschnitt muss überarbeitet und neu ausgetestet werden. [[Benutzer:Robi|Robi]] 11:28, 20. Mär. 2009 (UTC)''
 +
 
 +
 
 +
<pre>
 +
LINUX:/ # tar -czvl  -f /mnt/root.tgz / >/root/backup/list.root
 +
LINUX:/ # tar -czvl  -f /mnt/boot.tgz /boot >/root/backup/list.boot
 +
LINUX:/ # tar -czvl  -f /mnt/home.tgz /home >/root/backup/list.home
 +
LINUX:/ # tar -czvl  -f /mnt/usr.tgz /usr >/root/backup/list.usr
 +
LINUX:/ # tar -czl  -f /mnt/backup.tgz /root/backup
 +
LINUX:/ # md5sum /mnt/*tgz > /mnt/md5sum.log
 +
</pre>
 +
Während der Sicherung werden einige Warnungen erscheinen, hier einige Beispiele, was ignoriert werden kann:
 +
<pre>
 +
tar: Semantics of -l option will change in the future releases.
 +
tar: Please use --one-file-system option instead.
 +
tar: /var/spool/postfix/private/proxymap: socket ignored
 +
tar: /usr/: file is on a different filesystem; not dumped
 +
tar: Removing leading `/' from member names
 +
tar: Removing leading `/' from hard link targets
 +
</pre>
 +
Die komplette Sicherung umfasst jetzt folgende Dateien:
 +
<pre>
 +
LINUX:/ # ls -l /mnt/*
 +
-rw-r--r-- 1 root root  4881455 Aug 26 04:27 /mnt/backup.tgz
 +
-rw-r--r-- 1 root root  17058527 Aug 26 04:12 /mnt/boot.tgz
 +
-rw-r--r-- 1 root root  2561794 Aug 26 04:12 /mnt/home.tgz
 +
-rw-r--r-- 1 root root      216 Aug 26 04:34 /mnt/md5sum.log
 +
-rw-r--r-- 1 root root 514285322 Aug 26 03:56 /mnt/root.tgz
 +
-rw-r--r-- 1 root root 843629265 Aug 26 04:24 /mnt/usr.tgz
 +
</pre>
 +
Damit ist die komplette Sicherung abgeschlossen, die 2 Platte kann jetzt umountet werden, oder die Sicherungsarchive auf einen anderen Rechner oder auf DVD verbannt werden.
 +
 
 +
----
 +
 
 +
=== Komplettes Restore ===
 +
Wiederherstellen des Systems aus dem Backup nach Plattentausch
 +
 
 +
 
 +
Während man das Backup sehr gut automatisieren kann, bleibt das Restore oftmals Handarbeit. Zu einem Backupkonzept gehört also eine genaue und getestete Beschreibung der Vorgehensweise des Restore.<br/>
 +
Wir gehen in diesem Beispiel davon aus, das man die Möglichkeit hat, ein anders Linux von CD/DVD/Floppy zu booten.
 +
 
 +
 
 +
An dieses Linux stellen wir folgende Anspüche
 +
* es soll einigermaßen aktuelles LINUX sein
 +
* es muss unsere Festplattenkontroller und Festplatten + CD/DVD automatisch erkennen.
 +
* Sollte die 2 Platte über USB angeschlossen sein, dann natürlich auch diese
 +
* eventuell noch die Unterstützung der Netzwerkkarte
 +
* die wenigen zum Restore benötigte Programme befinden sich auf jeder LiveCD oder RescueCD.
 +
* eine CD/DVD sollte man dennoch vor einem wirklichem Recoverfall auf diesem Rechner nach diesen Kriterien getesten.(und immer am Lagerort der Backupmedien zu finden sein)
 +
 
 +
 
 +
'' Hier im Beispiel wurde von der SUSE 10.1 das Rescue-System gestartet. ''
 +
 
 +
Auf solchen von CD/DVD gebooteten Systemen hat man eventuell das Problem, dass fast alle Filesysteme readonly gemountet sind. Es gibt aber in mindestens einem Verzeichnis, meistens unter /tmp, die Möglichkeit ein paar kleine Dateien anzulegen. Obwohl wir in diesem Beispiel auf der 2 Platte die Möglichkeit hätten schreibend zuzugreifen, wollen wir darauf verzichten, das gibt auch denen die Chance das Beispiel nachzustellen, die als Backupmedium eine CD/DVD benutzen.
 +
 
 +
Als erstes mounten wir unser Backupmedium nach /mnt und da wir uns nicht erinnern wie unsere Partitionierung und unsere Filesysteme aussahen, suchen wir nach den Informationen aus denen wir das erkennen können. Wir lassen uns als erstes die Dateinamen aus backup.tgz ausgeben und schreiben diese in eine Datei /tmp/list
 +
<pre>
 +
Rescue:/ # mount /dev/sdb1 /mnt
 +
Rescue:/ # tar -tzf /mnt/backup.tgz > /tmp/list
 +
Rescue:/ # cat /tmp/list
 +
root/backup/
 +
root/backup/df
 +
root/backup/menu.lst
 +
root/backup/list.usr
 +
root/backup/fstab
 +
root/backup/mount
 +
root/backup/sda_MBR
 +
root/backup/device.map
 +
root/backup/fdisk_l
 +
root/backup/list.boot
 +
root/backup/list.home
 +
root/backup/list.root
 +
root/backup/sda_sfdisk_dump
 +
</pre>
 +
Wir benötigen die beiden Dateien fstab und sda_sfdisk_dump. Mit Hilfe von sda_sfdisk_dump läßt sich mit einem einzigem sfdisk Befehl die orginal Partitionierung der Platte wiederherstellen. Aus fstab erkennt man die Mountpunkte und die Filesystemtypen. Wir löschen entweder aus /tmp/list alle anderen Zeilen heraus oder legen diese Datei mit nur diesen beiden Zeilen neu an. Mit dieser Datei können wir dann mit tar diese beiden Dateien aus dem Archiv gezielt nach /tmp entpacken.
 +
<pre>
 +
Rescue:/ # tar -tzf backup.tgz | grep -e sfdisk -e fstab > /tmp/list
 +
Rescue:/ # cat /tmp/list
 +
root/backup/fstab
 +
root/backup/sda_sfdisk_dump
 +
Rescue:/ # cd /tmp
 +
Rescue:/tmp # tar -xzT /tmp/list -f /mnt/backup.tgz
 +
Rescue:/tmp # find .
 +
./root
 +
./root/backup
 +
./root/backup/sda_sfdisk_dump
 +
./root/backup/fstab
 +
./list
 +
</pre>
 +
Jetzt kann die Partitionierung von /dev/sda wieder orginal hergestellt werden und die fstab ausgelesen werden
 +
<pre>
 +
Rescue:/tmp # sfdisk /dev/sda1 < /tmp/root/backup/sda_sfdisk_dump
 +
Rescue:/tmp # cat /tmp/root/backup/fstab
 +
/dev/sda2            /                  reiserfs    defaults              1 1
 +
/dev/sda5            swap              swap        pri=42                0 0
 +
/dev/sda1            /boot              reiserfs    defaults              1 2
 +
/dev/sda3            /usr              reiserfs    defaults              1 2
 +
/dev/sda6            /home              reiserfs    defaults              1 2
 +
</pre>
 +
Aus der fstab erkennen wir 4 reiserfs auf Partitionen 1/2/3/6 und ein swap auf Partition 5, das legen wir genauso wieder an
 +
<pre>
 +
Rescue:/tmp # mkfs.reiserfs /dev/sda1
 +
Rescue:/tmp # mkfs.reiserfs /dev/sda2
 +
Rescue:/tmp # mkfs.reiserfs /dev/sda3
 +
Rescue:/tmp # mkfs.reiserfs /dev/sda6
 +
Rescue:/tmp # mkswap /dev/sda5
 +
</pre>
 +
Jetzt kann man die neuen Filesysteme so einhängen wie sie benötigen werden. Auf /mnt hängt im Moment noch unsere Backuppartition, die hängen wir erstmal weg und mounten statt dessen dort das neue Root-Filesystem /dev/sda2 hin. In dieses legen wir die Einhängepunkte für die anderen Dateisysteme als Verzeichnisse neu an, und mounten anschließend die anderen Filesysteme dort hin. Als Vorlage dient uns die fstab mit dem Unterschied das / als /mnt eingehängt ist. Unser Backupmedium hängen wir dann unter /mnt/mnt wieder mit ein.
 +
<pre>
 +
Rescue:/tmp # umount /mnt
 +
Rescue:/tmp # mount /dev/sda2 /mnt
 +
Rescue:/tmp # mkdir /mnt/boot /mnt/usr /mnt/home /mnt/mnt
 +
Rescue:/tmp # mount /dev/sda1 /mnt/boot
 +
Rescue:/tmp # mount /dev/sda3 /mnt/usr
 +
Rescue:/tmp # mount /dev/sda6 /mnt/home
 +
Rescue:/tmp # mount /dev/sdb1 /mnt/mnt
 +
Rescue:/tmp # mount
 +
/dev/sda2 on /mnt type reiserfs (rw)
 +
/dev/sda1 on /mnt/boot type reiserfs (rw)
 +
/dev/sda3 on /mnt/usr type reiserfs (rw)
 +
/dev/sda6 on /mnt/home type reiserfs (rw)
 +
/dev/sdb1 on /mnt/mnt type ext2 (rw)
 +
</pre>
 +
Damit sind die Vorbereitungen für das eigentliche Recover abgeschlossen und man kann die Archive auspacken.
 +
Da wir die Verzeichnisnamen relativ zum Rootverzeichnis mit gesichert haben, gehen wir nach /mnt das ja unser Rootfilesystem werden soll.<br/>
 +
Komplettsicherungen werden immer in leere Filesysteme ausgepackt, das ist sichergestellt, da wir die Filesysteme neu angelegt haben.
 +
<pre>
 +
Rescue:/tmp # cd /mnt
 +
Rescue:/mnt # ls -l /mnt/mnt/
 +
-rw-r--r-- 1 root root    4881455 Aug 26 02:27 backup.tgz
 +
-rw-r--r-- 1 root root  17058527 Aug 26 02:12 boot.tgz
 +
-rw-r--r-- 1 root root    2561794 Aug 26 02:12 home.tgz
 +
-rw-r--r-- 1 root root        216 Aug 26 02:34 md5sum.log
 +
-rw-r--r-- 1 root root  514285322 Aug 26 01:56 root.tgz
 +
-rw-r--r-- 1 root root  843629265 Aug 26 02:24 usr.tgz
 +
Rescue:/mnt # tar -xzf /mnt/mnt/root.tgz
 +
Rescue:/mnt # tar -xzf /mnt/mnt/boot.tgz
 +
Rescue:/mnt # tar -xzf /mnt/mnt/usr.tgz
 +
Rescue:/mnt # tar -xzf /mnt/mnt/home.tgz
 +
</pre>
 +
Das komplette Linux wurde damit wieder in die richtigen Partitionen zurückgesichert. Was jetzt noch gemacht werden muss ist:
 +
* das eingespielte Linux sollte kurz einmal überprüft werden
 +
* der Bootloader muss wieder auf die Bootplatte /dev/sda installiert werden.
 +
Dazu richtet man am besten eine chrootumgebung ein.<br/>
 +
Man bindet die Systemefilesysteme /proc /sys /udev in das neues Linuxsystem innerhalb von /mnt ein und setzt den chroot Befehl ab.<br/>
 +
Dort kann jetzt das System auf allgemeine Funktion getestet werden (wenn einige Befehle funktionieren / /home /boot und /usr mit Dateien gefüllt sind, sollte es soweit ok sein) und natürlich installieren des Bootloaders auf die neuen Platte. Wenn das alles soweit in Ordnung ist, dann das System mit ''halt'' beenden. Wenn alles funktioniert hat, sollte das System jetzt wieder sauber von Platte booten und genau so funktionieren, wie zum Zeitunkt der Sicherung.
 +
<pre>
 +
Rescue:/ # mount --bind /proc /mnt/proc
 +
Rescue:/ # mount --bind /sys /mnt/sys
 +
Rescue:/ # mount --bind /dev /mnt/dev
 +
Rescue:/ # chroot /mnt
 +
Rescue:/ # grub-install /dev/sda
 +
Rescue:/ # halt
 +
</pre>
 +
 
 +
 
 +
 
 +
 
 +
=== Austausch eines laufenden LINUX ===
 +
 
 +
In dem nun folgenden Beispiel für Fortgeschrittene, wollen wir etwas derber mit unserem System umgehen. Wir gehen davon aus, wir haben nicht die Möglichkeit ein 2. Linux mittels CD/DVD zu starten, also zB wie man es auf einem Rootserver vorfinden würden. Unser bestehendes LINUX gefällt uns nicht mehr, oder der letzte Update ging schief, egal jedemfalls möchten wir es gegen das Backup austauschen. Gleichzeitig möchten wir  / /usr /boot auf ext3 umstellen, das wollten wir schon lange mal machen, jetzt haben wir die Gelegenheit dazu. Das wird einiges an Konfigurationsarbeit mehr darstellen, als das erste Beispiel, und soll vor allem aufzeigen, was in gewissen Situationen an einem System überprüft und konfiguriert werden muss, damit es wieder sauber bootet. Wir wollen mit 2 Mal reboot sicher zum Ziel kommen.
 +
 
 +
Die derzeitige Situation:
 +
<pre>
 +
LINUX:~ # mount
 +
/dev/sda2 on / type reiserfs (rw)
 +
/dev/sda1 on /boot type reiserfs (rw)
 +
/dev/sda3 on /usr type reiserfs (rw)
 +
/dev/sda6 on /home type reiserfs (rw)
 +
LINUX:~ # df
 +
Filesystem          1K-blocks      Used Available Use% Mounted on
 +
/dev/sda2              4883300  1141720  3741580  24% /
 +
/dev/sda1              260020    55324    204696  22% /boot
 +
/dev/sda3              4883300  2240800  2642500  46% /usr
 +
/dev/sda6            24837316    49488  24787828  1% /home
 +
</pre>
 +
Wir erkennen, alle Filesysteme sind derzeit reiserfs und /home bietet im Moment noch genügend freien Platz, um das gesamte Linuxsystem System aufzunehmen. Das wollen wir gleich ausnutzen. /home ist im Moment gemountet, es befinden sich keine Verzeichnisse oder Files darin die mit ihrem Namen, mit den Verzeichnisnamen des Rootfilesystems in Konflikt stehen. (Das ist auch der Grund warum sich /usr dafür weniger eignet.)<br/>
 +
Bei Namenskonflikten mit Userverzeichnissen müssen solche Dateine/Verzeichnisse vorläufig umbenannt werden. Wir nutzen den Platz und die Möglichkeit unser komplettes Backup neben die Homeverzeichnisse auf /home auszupacken.
 +
 
 +
Wir binden unser Backup wieder unter /mnt ein und suchen uns die Archive.<br/>
 +
Danach packen wir die Archive nach /home aus, wobei wir mit root.tgz , also unserem Rootverzeichnis beginnen, dabei achten wir darauf, das wir uns zum Auspacken im Verzeichnis /home befinden, denn die Daten werden relativ zum aktuellem Verzeichnis ausgepackt.
 +
<pre>
 +
LINUX:~ # mount /dev/sdb1 /mnt
 +
LINUX:~ # ls /mnt/*tgz
 +
/mnt/backup.tgz  /mnt/boot.tgz  /mnt/home.tgz  /mnt/root.tgz  /mnt/usr.tgz
 +
LINUX:~ # cd /home
 +
LINUX:/home # ls
 +
lost+found  puppe  robi
 +
 
 +
LINUX:/home # tar -xzf /mnt/root.tgz
 +
LINUX:/home # tar -xzf /mnt/boot.tgz
 +
LINUX:/home # tar -xzf /mnt/usr.tgz
 +
LINUX:/home # tar -xzf /mnt/home.tgz
 +
 
 +
LINUX:/home # ls
 +
.gnupg    bin  dev  lib        mnt  puppe  sbin    subdomain  usr
 +
.qt      boot  etc  lost+found  opt  robi  sicher  sys        var
 +
.viminfo  data  home  media      proc  root  srv    tmp
 +
</pre>
 +
Als nächstes wollen wir jetzt das neu eingespielte Linuxsystem auf der /home booten. Damit werden die anderen Partitionen frei.
 +
Als Bootsystem werden wir vorerst jedoch noch das alte, sich noch im Verzeichnis /boot befindliche, benutzen.
 +
 +
''' Achtung: ''' Das geht nur wenn sich der Kernel und die initrd mit dem System das wir jetzt als Rootfilesystem aus dem Backup gewonnen haben, vertragen.
 +
Wenn sich der Kernel nicht mit dem Rootfilesystem verträgt, liegt das daran, dass die Module die zum Kernel passen würden, nicht im Filesystem enthalten sind, und der Kernel sie deshalb auch nicht laden kann. Der Rechner wird zwar booten, aber nicht alles sauber starten können. Um sicher zu gehen, müssten wir die Kernelversion im derzeitigen Verzeichnis /boot mit den Verzeichnissen in derzeitig /home/lib/modules vergleichen. 
 +
Sollte Unverträglichkeit vorliegen, muss hier der Kernel und die initrd aus /home/boot nach /boot kopiert werden und im /boot/grub/menu.lst der kernel und die initrd als Bootparameter eingetragen werden.
 +
Sollte das jetzige / und das jetzige /home unterschiedliche Filesystemtypen sein, müssten dazu einige Überlegungen und Konfigurationen mehr gemacht werden, ''(siehe hierzu auch weiter unten in diesem Beispiel)'', aber das ist ja bei uns nicht der Fall.
 +
 
 +
Wir gehen jedoch hier im diesem Beispiel davon aus, das die Filesysteme gleich sind und dass das alte System auf der Platte die selbe Kernelversion hatte wie das gespeicherte System im Backup.
 +
 
 +
{{Achtung|'''Hinweis:''' Dieser Artikelabschnitt handelt explizit von der Version ''GRUB Legacy''. Für [[GRUB 2]] sind komplett andere Konfigurationen notwendig, siehe dort }}
 +
 
 +
Um das booten des neuen Systems von der alten Bootkonfiguration auszuführen, müssen kleine Änderungen an der derzeitigen Datei /boot/grub/menu.lst und an der derzeitigen /home/etc/fstab vorgenommen werden. Die meisten Zeilen in der fstab können wir auskommentieren, da ja im Moment alles auf einer einzigen Partition liegt.
 +
<pre>
 +
LINUX:/home # cat /home/etc/fstab  #(vor der Aenderung)
 +
/dev/sda2            /                  reiserfs    defaults              1 1
 +
/dev/sda5            swap              swap        pri=42                0 0
 +
/dev/sda1            /boot              reiserfs    defaults              1 2
 +
/dev/sda3            /usr              reiserfs    defaults              1 2
 +
/dev/sda6            /home              reiserfs    defaults              1 2
 +
 
 +
LINUX:/home # cat /home/etc/fstab  #(nach der Aenderung)
 +
/dev/sda6            /                  reiserfs    defaults              1 1
 +
#/dev/sda5          swap              swap        pri=42                0 0
 +
#/dev/sda1          /boot              reiserfs    defaults              1 2
 +
#/dev/sda3          /usr              reiserfs    defaults              1 2
 +
#/dev/sda6          /home              reiserfs    defaults              1 2
 +
</pre> 
 +
In der menu.lst ändern wir nur den Eintrag für das Rootdevice
 +
<pre>
 +
LINUX:/home # cat /boot/grub/menu.lst    #(vor der Aenderung)
 +
    root (hd0,0)
 +
    kernel (hd0,0)/vmlinuz root=/dev/sda2 vga=0x314 acpi=off resume=/dev/sda5 sp
 +
lash=silent  showopts
 +
    initrd (hd0,0)/initrd
 +
 
 +
LINUX:/home # cat /boot/grub/menu.lst    #(nach der Aenderung)
 +
    root (hd0,0)
 +
    kernel (hd0,0)/vmlinuz root=/dev/sda6 vga=0x314 acpi=off resume=/dev/sda5 sp
 +
lash=silent  showopts
 +
    initrd (hd0,0)/initrd
 +
 
 +
LINUX:/home # init 6
 +
</pre>
 +
Das System sollte jetzt einen Reboot ausführen und als einzige Datenpartition die /dev/sda6 einbinden
 +
<pre>
 +
LINUX:~ # mount
 +
/dev/sda6 on / type reiserfs (rw)
 +
 
 +
LINUX:~ # df
 +
Filesystem          1K-blocks      Used Available Use% Mounted on
 +
/dev/sda6            24837316  3404956  21432360  14% /
 +
</pre>
 +
Jetzt haben wir das komplette System, das wir im Backup gesichert hatten, zu einem fast vollständig lauffähigen System auf einer einzigen Partition gemacht.<br/>
 +
Die einzige Einschränkung, dieses System hat keine eigene funktionieren Bootkonfiguration, wir haben ja mittels der geänderten alten Konfiguration auf /dev/sda1 gebootet.
 +
Wir wollen dieses System jetzt aber nur als Hilfssystem benutzen und wollen weiter an unserem entgültigen System herumbauen.
 +
 
 +
Die anderen Partitionen sind frei geworden, wir legen jetzt darauf die neue Filesysteme an, aber wir ändern jetzt auf ext3 Filesysteme.<br/>
 +
Danach mounten wir wieder unseren neuen Dateibaum ( Ausnahme hier im Beispiel das Homeverzeichnis, die alten Userverzeichnisse sind im Moment ja noch auf dem derzeigigen Rootverzeichnis. Wir müssen das deshalb jetzt anders behandeln)
 +
Die anderen Verzeichnisse werden wie in vorherigen Beispiel wieder mit den Daten gefüllt.
 +
<pre>
 +
LINUX:~ # mkfs.ext3 -j /dev/sda1
 +
LINUX:~ # mkfs.ext3 -j /dev/sda2
 +
LINUX:~ # mkfs.ext3 -j /dev/sda3
 +
LINUX:~ # mount /dev/sda2 /mnt
 +
LINUX:~ # mkdir /mnt/boot /mnt/usr /mnt/home /mnt/mnt
 +
LINUX:~ # mount /dev/sda1 /mnt/boot
 +
LINUX:~ # mount /dev/sda3 /mnt/usr
 +
LINUX:~ # mount /dev/sdb1 /mnt/mnt
 +
LINUX:~ # ls /mnt/mnt/*tgz
 +
/mnt/mnt/backup.tgz  /mnt/mnt/home.tgz  /mnt/mnt/usr.tgz
 +
/mnt/mnt/boot.tgz    /mnt/mnt/root.tgz
 +
 
 +
LINUX:/mnt # tar -xzf /mnt/mnt/root.tgz
 +
LINUX:/mnt # tar -xzf /mnt/mnt/boot.tgz
 +
LINUX:/mnt # tar -xzf /mnt/mnt/usr.tgz
 +
</pre>
 +
Unser jetziges Rootverzeichnis enthält noch die Homeverzeichnisse des alten Systems, diese löschen wir und kopieren an deren Stelle die jetzigen  Homeverzeichnisse, die haben wir ja vor dem letzen Reboot schon aus dem Backuparchiv entpackt. In diesem Beispiel benutzen wir cpio dafür.
 +
<pre>
 +
LINUX:/mnt # cd /
 +
LINUX:/ # rm -rf robi puppe
 +
LINUX:/ # cd /home
 +
LINUX:/home # ls
 +
lost+found  puppe  robi
 +
LINUX:/home # find puppe robi | cpio -pdumC65536  /
 +
</pre>
 +
Wie im vorherigen Beispiel legen wir auch jetzt wieder eine chroot-Umgebung an, um das System zu testen und die notwendigen Änderungen vorzunehmen damit das System wieder sicher bootet.
 +
<pre>
 +
LINUX:/home # mount --bind /proc /mnt/proc
 +
LINUX:/home # mount --bind /sys /mnt/sys
 +
LINUX:/home # mount --bind /dev /mnt/dev
 +
LINUX:/home # chroot /mnt
 +
LINUX:/ #
 +
</pre>
 +
Wir überprüfen und ändern die fstab, wir müssen jetzt hier die Filesystemtypen und eventuell die Mount Optionen ändern.
 +
<pre>
 +
LINUX:/etc # cat /etc/fstab
 +
/dev/sda2            /                  reiserfs    defaults              1 1
 +
/dev/sda5            swap              swap        pri=42                0 0
 +
/dev/sda1            /boot              reiserfs    defaults              1 2
 +
/dev/sda3            /usr              reiserfs    defaults              1 2
 +
/dev/sda6            /home              reiserfs    defaults              1 2
 +
 
 +
LINUX:/etc # cat /etc/fstab
 +
/dev/sda2            /                  ext3        defaults              1 1
 +
/dev/sda5            swap              swap        pri=42                0 0
 +
/dev/sda1            /boot              ext3        defaults              1 2
 +
/dev/sda3            /usr              ext3        defaults              1 2
 +
/dev/sda6            /home              reiserfs    defaults              1 2
 +
</pre>
 +
Wir überprüfen die /boot/grub/menu.lst, da wir jedoch keine Veränderungen an den Partitionen oder der Zuordnung des Rootverzeichnisses vorgenommen haben, ist die im Backup enthaltene schon richtig, wir prüfen das aber dennoch.
 +
<pre>
 +
LINUX:/etc # cat /boot/grub/menu.lst
 +
title SUSE 10.1
 +
    root (hd0,0)
 +
    kernel (hd0,0)/vmlinuz root=/dev/sda2 vga=0x314 acpi=off resume=/dev/sda5 sp
 +
lash=silent  showopts
 +
    initrd (hd0,0)/initrd
 +
</pre>
 +
 
 +
 
 +
 
 +
==== Problem Filesystemwechsel ====
 +
 
 +
{{Achtung|'''Hinweis:''' Dieser Artikelabschnitt handelt explizit von der Version ''GRUB Legacy''. Für [[GRUB 2]] sind komplett andere Konfigurationen notwendig, siehe dort }}
 +
   
 +
Jetzt kommen wir zu neuen Problemen, '''die wir uns mit dem Ändern der Filesystemetypen eingehandelt haben'''.
 +
Wir haben das Dateisystem in dem sich die Dateien /boot/grub/* befinden gewechselt. Das müssen wir aber dem Bootloader mitteilen, sonst erwartet der Bootloader noch ein reiserfs dort. Wir müssen also einen neuen Bootloader auf die Bootplatte schreiben.<br/>
 +
Wir haben aber auch den Type von unserem Rootfilesystem gewechselt, wenn der Kern jetzt nicht das Kernelmodul für das neue Filesystem hat, dann bleibt unser boot hängen. Welche Module im Kernel fest einkompiliert sind, könnten wir aus der ''' /boot/config..... ''' Datei herauslesen, dort im Abschnitt ''' File systems ''' steht ''' CONFIG_EXT3_FS=m ''' also ext3 ist hier nicht im Kernel enthalten sondern muss als Modul vor dem Einhängen des Rootfilesystems geladen werden. <br/>
 +
Das Laden dieser Module während der frühen Bootphase obliegt der initrd. (initrd ist kleines Filesystem das vom Kernel in den Speicher geladen wird, um Module zu laden die nicht im Kernel selbst enthalten sind, noch bevor das Rootverzeichniss geladen wird) Das initrd müssen wir also neu konfigurieren und anlegen.
 +
Dazu müssen wir in der Datei ''' /etc/sysconfig/kernel ''' in der Zeile ''' INITRD_MODULES= ''' die Module eintragen die der Kernel zum Laden des Rootfilesystems braucht und anschließend eine neue initrd erstellen.
 +
<pre>
 +
LINUX:/etc # cat /etc/sysconfig/kernel  #(vor der Aenderung)
 +
INITRD_MODULES="serverworks sym53c8xx processor thermal fan jbd reiserfs"
 +
 
 +
LINUX:/etc # cat /etc/sysconfig/kernel  #(nach der Aenderung)
 +
INITRD_MODULES="serverworks sym53c8xx processor thermal fan jbd ext3"
 +
 
 +
LINUX:/etc # mkinitrd -d /dev/sda2
 +
LINUX:/etc # grub-install /dev/sda
 +
LINUX:/etc # init 6
 +
</pre>
 +
'''Achtung:''' es ist möglich, das bei einer älteren Versionen von '''mkinitrd die Option -d nicht bekannt''' ist. Sollte es hier zu einer solchen Fehlermeldung kommen, dann reicht auch '''mkinitrc ohne Optionen''', dann holt er sich die Informationen aus der Bootkonfiguration. Dort sollte jetzt ja auch root=/dev/sda2 drinstehen.
 +
 
 +
Bei diesem Reboot sollte das ursprüngliche Linux jetzt wieder richtig auf den Partitionen verteilt starten.
 +
 
 +
 
 +
 
 +
Wir überprüfen das.
 +
<pre>
 +
LINUX:~ # mount
 +
/dev/sda2 on / type ext3 (rw)
 +
/dev/sda1 on /boot type ext3 (rw)
 +
/dev/sda3 on /usr type ext3 (rw)
 +
/dev/sda6 on /home type reiserfs (rw)
 +
 
 +
LINUX:~ # df
 +
Filesystem          1K-blocks      Used Available Use% Mounted on
 +
/dev/sda2              4806784  1337100  3225512  30% /
 +
/dev/sda1              251871    26495    212372  12% /boot
 +
/dev/sda3              4806784  2489796  2072816  55% /usr
 +
/dev/sda6            24837316  3411092  21426224  14% /home
 +
</pre>
 +
Jetzt müssen wir nur noch ein paar Leichen entfernen, auf unserem /home Verzeichnis befindet sich jetzt noch das komplette Linuxsystem das wir dort als Hilfssystem angelegt hatten. Dieses können wir jetzt löschen.
 +
<pre>
 +
LINUX:~ # cd /home
 +
LINUX:/home # ls -a
 +
.      .qt      boot  etc  lost+found  opt    robi  sicher    success  usr
 +
..      .viminfo  data  home  media      proc  root  srv        sys      var
 +
.gnupg  bin      dev  lib  mnt        puppe  sbin  subdomain  tmp
 +
 
 +
LINUX:/home # rm -rf .qt boot etc opt sicher success usr .viminfo data home media
 +
LINUX:/home # rm -rf proc root srv sys var .gnupg bin dev lib mnt sbin subdomain tmp
 +
LINUX:/home # ls -a
 +
.  ..  lost+found  puppe  robi
 +
</pre>
 +
Damit ist unser Recover und Umbau am System abgeschlossen.
 +
 
 +
'' viel Erfolg beim ausprobieren ''
 +
 
 +
 
 +
 
 +
[[Benutzer:Robi|Robi]] 12:09, 4. Sep 2006 (CEST)
 +
 
 +
----
 +
 
 +
[[Backup|Back To Backup]]
 +
[[Kategorie:Security]][[Kategorie:Backup]]

Aktuelle Version vom 10. Dezember 2013, 20:47 Uhr

Backupkonzept mit tar

Der kleine Linuxuser braucht ein kleines Backupkonzept mit dem er regelmäßig seine Dateisystemsicherungen machen kann. Was er aber vor allem braucht, ist die Sicherheit mit Hilfe dieses Backups sein System jeder Zeit auch wieder schnell herstellen zu können.

Im folgenden hier einige dokumentierte Beispiele, die bei der Erstellung eines kleinen Backupkonzeptes mit Bordmitteln von Linux behilflich sein sollen.


Komplettsicherung 
Sicherung eines Linuxrechners mittels des tar-Befehles
Komplettes Restore 
wiederherstellen des Systems nach Austausch einer baugleichen Festplatte
Austausch eines laufenden LINUX 
restore auf einem remote Rechner durch die Backupdaten mit gleichzeitigem teilweise Umbau des Systems.


Hinweis:

  • Es wird der komplette Ablauf und die vollständigen Befehle mit allen Optionen aufgezeigt
  • Befehlsausgaben sind auf die relevanten Informationen gekürzt.
  • Die einzelnen Befehle sollten mit Hilfe dieser Dokumentation auf andere Systeme recht einfach übertragen und angepasst werden können.
  • Es wird auf mögliche Problembereiche hingewiesen.


Komplettsicherung

Die Ausgangssituation:

 
LINUX:~ # df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2              4883300   1131272   3752028  24% /
/dev/sda1               260020     55320    204700  22% /boot
/dev/sda3              4883300   2240880   2642420  46% /usr
/dev/sda6             24837316     49300  24788016   1% /home

LINUX:~ # fdisk -l /dev/sda
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1         254      260080   83  Linux
/dev/sda2             255        5023     4883456   83  Linux
/dev/sda3            5024        9792     4883456   83  Linux
/dev/sda4            9793       35003    25816064    5  Extended
/dev/sda5            9793       10747      977904   82  Linux swap / Solaris
/dev/sda6           10748       35003    24838128   83  Linux

Das System ist also auf mehrere Partitionen der /dev/sda verteilt. Es existieren 4 Filesysteme / /usr /boot /home und eine Swappartition. Man sichert mit tar immer komplette Filesysteme von ihrem Mountpoint aus, in seperate Archive. Zuerst sammeln wir jedoch einige Zusatzinformationen vom System ein, die zum Beheben von schweren Fehlern und zum Wiederherstellen des Systems sehr hilfreich sein können. Dazu sammeln wir folgende Dateien und Ausgaben von Befehlen ein, und kopieren diese in ein spezielles Verzeichnis /root/backup , das wir uns zum sammeln der Informationen vom Backup anlegen.

LINUX:/boot/grub # cp device.map menu.lst /root/backup/            #Grubkonfiguration
LINUX:/etc # cp /etc/fstab /root/backup                            #/etc/fstab
LINUX:/etc # fdisk -l > /root/backup/fdisk_l                       #die komplette Partitionierung
LINUX:/etc # dd if=/dev/sda of=/root/backup/sda_MBR bs=512 count=1 #den MBR von der Bootplatte
LINUX:/etc # sfdisk -d /dev/sda > /root/backup/sda_sfdisk_dump     #einen Partitionsdump mit sfdisk 
LINUX:/etc # mount > /root/backup/mount                            #die Ausgabe von mount
LINUX:/etc # df > /root/backup/df                                  #die Ausgabe von df

Diese Informationen können uns später helfen, die orginal Partitionierung, die Filesysteme und Mountpunkte schnell und zielsicher wieder herzustellen.
Je nach Rechner können hier noch mehrere Daten wichtig sein, zB Rechnernamen, Datum, Kernel, initrd, Kernelkonfiguration, Partitionierung weiterer Platten, Filesystemparameter usw. aber man sollte sich wirklich auf das beschränken, was man wirklich zum booten und zur Wiederherstellung der Filesysteme benötigen könnten.

Als nächstes kommt die eigentliche Sicherung. Als Sicherungsmedium dient hier im Beispiel eine 2 Platte die schon nach /mnt temporär gemountet wurde. Gesichert wird mittels tar, die Komprimierung mit gzip schalten wir ein. Eine Logdatei der Namen der gesicherten Dateien wird je Archiv ebenfalls in /root/backup angelegt. Als Namen für diese Listen wählen wir "list.MOUNTPOINT". Damit kann später durch auslesen dieser Dateien schnell festgestellt werden, was in unseren Archiven alles enthalten ist, ohne gleich alle großen Archive auslesen zu müssen
Es werden 4 Filesysteme / /usr /boot /home in jeweils ein eigenes Archiv gesichert. Anschließend wird ein Archiv von /root/backup ebenfalls als seperates Archiv erstellt und in eine eigene Datei die md5sum der 5 Archive geschrieben, das könnte man als Vergleich heranziehen, wenn die Archive zB über das Netz kopiert oder verschoben wurden, oder auf DVD gebrannt wurden.



Höhe=24px
Dieses HOWTO zu Linux oder der Abschnitt davon braucht eine Überarbeitung. Weitere Informationen findest Du hier. Deine Hilfe ist gefragt, das HOWTO zu verbessern. Danach entsorge bitte diese Signierung.

die Option -l die hier verwendet wurde ist mittlerweile in aktuellen Versionen nicht mehr erhalten, was zur Entstehung dieses Howtos noch zu einer unbedeutenten Warnung geführt hat, erzeugt jetzt einen Fehler. Abschnitt muss überarbeitet und neu ausgetestet werden. Robi 11:28, 20. Mär. 2009 (UTC)


LINUX:/ # tar -czvl  -f /mnt/root.tgz / >/root/backup/list.root
LINUX:/ # tar -czvl  -f /mnt/boot.tgz /boot >/root/backup/list.boot
LINUX:/ # tar -czvl  -f /mnt/home.tgz /home >/root/backup/list.home
LINUX:/ # tar -czvl  -f /mnt/usr.tgz /usr >/root/backup/list.usr
LINUX:/ # tar -czl  -f /mnt/backup.tgz /root/backup
LINUX:/ # md5sum /mnt/*tgz > /mnt/md5sum.log

Während der Sicherung werden einige Warnungen erscheinen, hier einige Beispiele, was ignoriert werden kann:

tar: Semantics of -l option will change in the future releases.
tar: Please use --one-file-system option instead.
tar: /var/spool/postfix/private/proxymap: socket ignored
tar: /usr/: file is on a different filesystem; not dumped
tar: Removing leading `/' from member names
tar: Removing leading `/' from hard link targets 

Die komplette Sicherung umfasst jetzt folgende Dateien:

LINUX:/ # ls -l /mnt/*
-rw-r--r-- 1 root root   4881455 Aug 26 04:27 /mnt/backup.tgz
-rw-r--r-- 1 root root  17058527 Aug 26 04:12 /mnt/boot.tgz
-rw-r--r-- 1 root root   2561794 Aug 26 04:12 /mnt/home.tgz
-rw-r--r-- 1 root root       216 Aug 26 04:34 /mnt/md5sum.log
-rw-r--r-- 1 root root 514285322 Aug 26 03:56 /mnt/root.tgz
-rw-r--r-- 1 root root 843629265 Aug 26 04:24 /mnt/usr.tgz

Damit ist die komplette Sicherung abgeschlossen, die 2 Platte kann jetzt umountet werden, oder die Sicherungsarchive auf einen anderen Rechner oder auf DVD verbannt werden.


Komplettes Restore

Wiederherstellen des Systems aus dem Backup nach Plattentausch


Während man das Backup sehr gut automatisieren kann, bleibt das Restore oftmals Handarbeit. Zu einem Backupkonzept gehört also eine genaue und getestete Beschreibung der Vorgehensweise des Restore.
Wir gehen in diesem Beispiel davon aus, das man die Möglichkeit hat, ein anders Linux von CD/DVD/Floppy zu booten.


An dieses Linux stellen wir folgende Anspüche

  • es soll einigermaßen aktuelles LINUX sein
  • es muss unsere Festplattenkontroller und Festplatten + CD/DVD automatisch erkennen.
  • Sollte die 2 Platte über USB angeschlossen sein, dann natürlich auch diese
  • eventuell noch die Unterstützung der Netzwerkkarte
  • die wenigen zum Restore benötigte Programme befinden sich auf jeder LiveCD oder RescueCD.
  • eine CD/DVD sollte man dennoch vor einem wirklichem Recoverfall auf diesem Rechner nach diesen Kriterien getesten.(und immer am Lagerort der Backupmedien zu finden sein)


Hier im Beispiel wurde von der SUSE 10.1 das Rescue-System gestartet.

Auf solchen von CD/DVD gebooteten Systemen hat man eventuell das Problem, dass fast alle Filesysteme readonly gemountet sind. Es gibt aber in mindestens einem Verzeichnis, meistens unter /tmp, die Möglichkeit ein paar kleine Dateien anzulegen. Obwohl wir in diesem Beispiel auf der 2 Platte die Möglichkeit hätten schreibend zuzugreifen, wollen wir darauf verzichten, das gibt auch denen die Chance das Beispiel nachzustellen, die als Backupmedium eine CD/DVD benutzen.

Als erstes mounten wir unser Backupmedium nach /mnt und da wir uns nicht erinnern wie unsere Partitionierung und unsere Filesysteme aussahen, suchen wir nach den Informationen aus denen wir das erkennen können. Wir lassen uns als erstes die Dateinamen aus backup.tgz ausgeben und schreiben diese in eine Datei /tmp/list

Rescue:/ # mount /dev/sdb1 /mnt
Rescue:/ # tar -tzf /mnt/backup.tgz > /tmp/list
Rescue:/ # cat /tmp/list
root/backup/
root/backup/df
root/backup/menu.lst
root/backup/list.usr
root/backup/fstab
root/backup/mount
root/backup/sda_MBR
root/backup/device.map
root/backup/fdisk_l
root/backup/list.boot
root/backup/list.home
root/backup/list.root
root/backup/sda_sfdisk_dump

Wir benötigen die beiden Dateien fstab und sda_sfdisk_dump. Mit Hilfe von sda_sfdisk_dump läßt sich mit einem einzigem sfdisk Befehl die orginal Partitionierung der Platte wiederherstellen. Aus fstab erkennt man die Mountpunkte und die Filesystemtypen. Wir löschen entweder aus /tmp/list alle anderen Zeilen heraus oder legen diese Datei mit nur diesen beiden Zeilen neu an. Mit dieser Datei können wir dann mit tar diese beiden Dateien aus dem Archiv gezielt nach /tmp entpacken.

Rescue:/ # tar -tzf backup.tgz | grep -e sfdisk -e fstab > /tmp/list
Rescue:/ # cat /tmp/list
root/backup/fstab
root/backup/sda_sfdisk_dump
Rescue:/ # cd /tmp
Rescue:/tmp # tar -xzT /tmp/list -f /mnt/backup.tgz
Rescue:/tmp # find .
./root
./root/backup
./root/backup/sda_sfdisk_dump
./root/backup/fstab
./list

Jetzt kann die Partitionierung von /dev/sda wieder orginal hergestellt werden und die fstab ausgelesen werden

Rescue:/tmp # sfdisk /dev/sda1 < /tmp/root/backup/sda_sfdisk_dump
Rescue:/tmp # cat /tmp/root/backup/fstab
/dev/sda2            /                  reiserfs     defaults              1 1
/dev/sda5            swap               swap         pri=42                0 0
/dev/sda1            /boot              reiserfs     defaults              1 2
/dev/sda3            /usr               reiserfs     defaults              1 2
/dev/sda6            /home              reiserfs     defaults              1 2

Aus der fstab erkennen wir 4 reiserfs auf Partitionen 1/2/3/6 und ein swap auf Partition 5, das legen wir genauso wieder an

Rescue:/tmp # mkfs.reiserfs /dev/sda1
Rescue:/tmp # mkfs.reiserfs /dev/sda2
Rescue:/tmp # mkfs.reiserfs /dev/sda3
Rescue:/tmp # mkfs.reiserfs /dev/sda6
Rescue:/tmp # mkswap /dev/sda5

Jetzt kann man die neuen Filesysteme so einhängen wie sie benötigen werden. Auf /mnt hängt im Moment noch unsere Backuppartition, die hängen wir erstmal weg und mounten statt dessen dort das neue Root-Filesystem /dev/sda2 hin. In dieses legen wir die Einhängepunkte für die anderen Dateisysteme als Verzeichnisse neu an, und mounten anschließend die anderen Filesysteme dort hin. Als Vorlage dient uns die fstab mit dem Unterschied das / als /mnt eingehängt ist. Unser Backupmedium hängen wir dann unter /mnt/mnt wieder mit ein.

Rescue:/tmp # umount /mnt
Rescue:/tmp # mount /dev/sda2 /mnt
Rescue:/tmp # mkdir /mnt/boot /mnt/usr /mnt/home /mnt/mnt
Rescue:/tmp # mount /dev/sda1 /mnt/boot
Rescue:/tmp # mount /dev/sda3 /mnt/usr
Rescue:/tmp # mount /dev/sda6 /mnt/home
Rescue:/tmp # mount /dev/sdb1 /mnt/mnt
Rescue:/tmp # mount
/dev/sda2 on /mnt type reiserfs (rw)
/dev/sda1 on /mnt/boot type reiserfs (rw)
/dev/sda3 on /mnt/usr type reiserfs (rw)
/dev/sda6 on /mnt/home type reiserfs (rw)
/dev/sdb1 on /mnt/mnt type ext2 (rw)

Damit sind die Vorbereitungen für das eigentliche Recover abgeschlossen und man kann die Archive auspacken. Da wir die Verzeichnisnamen relativ zum Rootverzeichnis mit gesichert haben, gehen wir nach /mnt das ja unser Rootfilesystem werden soll.
Komplettsicherungen werden immer in leere Filesysteme ausgepackt, das ist sichergestellt, da wir die Filesysteme neu angelegt haben.

Rescue:/tmp # cd /mnt
Rescue:/mnt # ls -l /mnt/mnt/
-rw-r--r-- 1 root root    4881455 Aug 26 02:27 backup.tgz
-rw-r--r-- 1 root root   17058527 Aug 26 02:12 boot.tgz
-rw-r--r-- 1 root root    2561794 Aug 26 02:12 home.tgz
-rw-r--r-- 1 root root        216 Aug 26 02:34 md5sum.log
-rw-r--r-- 1 root root  514285322 Aug 26 01:56 root.tgz
-rw-r--r-- 1 root root  843629265 Aug 26 02:24 usr.tgz
Rescue:/mnt # tar -xzf /mnt/mnt/root.tgz
Rescue:/mnt # tar -xzf /mnt/mnt/boot.tgz
Rescue:/mnt # tar -xzf /mnt/mnt/usr.tgz
Rescue:/mnt # tar -xzf /mnt/mnt/home.tgz

Das komplette Linux wurde damit wieder in die richtigen Partitionen zurückgesichert. Was jetzt noch gemacht werden muss ist:

  • das eingespielte Linux sollte kurz einmal überprüft werden
  • der Bootloader muss wieder auf die Bootplatte /dev/sda installiert werden.

Dazu richtet man am besten eine chrootumgebung ein.
Man bindet die Systemefilesysteme /proc /sys /udev in das neues Linuxsystem innerhalb von /mnt ein und setzt den chroot Befehl ab.
Dort kann jetzt das System auf allgemeine Funktion getestet werden (wenn einige Befehle funktionieren / /home /boot und /usr mit Dateien gefüllt sind, sollte es soweit ok sein) und natürlich installieren des Bootloaders auf die neuen Platte. Wenn das alles soweit in Ordnung ist, dann das System mit halt beenden. Wenn alles funktioniert hat, sollte das System jetzt wieder sauber von Platte booten und genau so funktionieren, wie zum Zeitunkt der Sicherung.

Rescue:/ # mount --bind /proc /mnt/proc
Rescue:/ # mount --bind /sys /mnt/sys
Rescue:/ # mount --bind /dev /mnt/dev
Rescue:/ # chroot /mnt
Rescue:/ # grub-install /dev/sda
Rescue:/ # halt



Austausch eines laufenden LINUX

In dem nun folgenden Beispiel für Fortgeschrittene, wollen wir etwas derber mit unserem System umgehen. Wir gehen davon aus, wir haben nicht die Möglichkeit ein 2. Linux mittels CD/DVD zu starten, also zB wie man es auf einem Rootserver vorfinden würden. Unser bestehendes LINUX gefällt uns nicht mehr, oder der letzte Update ging schief, egal jedemfalls möchten wir es gegen das Backup austauschen. Gleichzeitig möchten wir / /usr /boot auf ext3 umstellen, das wollten wir schon lange mal machen, jetzt haben wir die Gelegenheit dazu. Das wird einiges an Konfigurationsarbeit mehr darstellen, als das erste Beispiel, und soll vor allem aufzeigen, was in gewissen Situationen an einem System überprüft und konfiguriert werden muss, damit es wieder sauber bootet. Wir wollen mit 2 Mal reboot sicher zum Ziel kommen.

Die derzeitige Situation:

LINUX:~ # mount 
/dev/sda2 on / type reiserfs (rw)
/dev/sda1 on /boot type reiserfs (rw)
/dev/sda3 on /usr type reiserfs (rw)
/dev/sda6 on /home type reiserfs (rw)
LINUX:~ # df 
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2              4883300   1141720   3741580  24% /
/dev/sda1               260020     55324    204696  22% /boot
/dev/sda3              4883300   2240800   2642500  46% /usr
/dev/sda6             24837316     49488  24787828   1% /home

Wir erkennen, alle Filesysteme sind derzeit reiserfs und /home bietet im Moment noch genügend freien Platz, um das gesamte Linuxsystem System aufzunehmen. Das wollen wir gleich ausnutzen. /home ist im Moment gemountet, es befinden sich keine Verzeichnisse oder Files darin die mit ihrem Namen, mit den Verzeichnisnamen des Rootfilesystems in Konflikt stehen. (Das ist auch der Grund warum sich /usr dafür weniger eignet.)
Bei Namenskonflikten mit Userverzeichnissen müssen solche Dateine/Verzeichnisse vorläufig umbenannt werden. Wir nutzen den Platz und die Möglichkeit unser komplettes Backup neben die Homeverzeichnisse auf /home auszupacken.

Wir binden unser Backup wieder unter /mnt ein und suchen uns die Archive.
Danach packen wir die Archive nach /home aus, wobei wir mit root.tgz , also unserem Rootverzeichnis beginnen, dabei achten wir darauf, das wir uns zum Auspacken im Verzeichnis /home befinden, denn die Daten werden relativ zum aktuellem Verzeichnis ausgepackt.

LINUX:~ # mount /dev/sdb1 /mnt
LINUX:~ # ls /mnt/*tgz
/mnt/backup.tgz  /mnt/boot.tgz  /mnt/home.tgz  /mnt/root.tgz  /mnt/usr.tgz
LINUX:~ # cd /home
LINUX:/home # ls
lost+found  puppe  robi

LINUX:/home # tar -xzf /mnt/root.tgz
LINUX:/home # tar -xzf /mnt/boot.tgz
LINUX:/home # tar -xzf /mnt/usr.tgz
LINUX:/home # tar -xzf /mnt/home.tgz

LINUX:/home # ls
.gnupg    bin   dev   lib         mnt   puppe  sbin    subdomain  usr
.qt       boot  etc   lost+found  opt   robi   sicher  sys        var
.viminfo  data  home  media       proc  root   srv     tmp

Als nächstes wollen wir jetzt das neu eingespielte Linuxsystem auf der /home booten. Damit werden die anderen Partitionen frei. Als Bootsystem werden wir vorerst jedoch noch das alte, sich noch im Verzeichnis /boot befindliche, benutzen.

Achtung: Das geht nur wenn sich der Kernel und die initrd mit dem System das wir jetzt als Rootfilesystem aus dem Backup gewonnen haben, vertragen. Wenn sich der Kernel nicht mit dem Rootfilesystem verträgt, liegt das daran, dass die Module die zum Kernel passen würden, nicht im Filesystem enthalten sind, und der Kernel sie deshalb auch nicht laden kann. Der Rechner wird zwar booten, aber nicht alles sauber starten können. Um sicher zu gehen, müssten wir die Kernelversion im derzeitigen Verzeichnis /boot mit den Verzeichnissen in derzeitig /home/lib/modules vergleichen. Sollte Unverträglichkeit vorliegen, muss hier der Kernel und die initrd aus /home/boot nach /boot kopiert werden und im /boot/grub/menu.lst der kernel und die initrd als Bootparameter eingetragen werden. Sollte das jetzige / und das jetzige /home unterschiedliche Filesystemtypen sein, müssten dazu einige Überlegungen und Konfigurationen mehr gemacht werden, (siehe hierzu auch weiter unten in diesem Beispiel), aber das ist ja bei uns nicht der Fall.

Wir gehen jedoch hier im diesem Beispiel davon aus, das die Filesysteme gleich sind und dass das alte System auf der Platte die selbe Kernelversion hatte wie das gespeicherte System im Backup.

Hinweis: Dieser Artikelabschnitt handelt explizit von der Version GRUB Legacy. Für GRUB 2 sind komplett andere Konfigurationen notwendig, siehe dort

Um das booten des neuen Systems von der alten Bootkonfiguration auszuführen, müssen kleine Änderungen an der derzeitigen Datei /boot/grub/menu.lst und an der derzeitigen /home/etc/fstab vorgenommen werden. Die meisten Zeilen in der fstab können wir auskommentieren, da ja im Moment alles auf einer einzigen Partition liegt.

LINUX:/home # cat /home/etc/fstab  #(vor der Aenderung)
/dev/sda2            /                  reiserfs     defaults              1 1
/dev/sda5            swap               swap         pri=42                0 0
/dev/sda1            /boot              reiserfs     defaults              1 2
/dev/sda3            /usr               reiserfs     defaults              1 2
/dev/sda6            /home              reiserfs     defaults              1 2

LINUX:/home # cat /home/etc/fstab   #(nach der Aenderung)
/dev/sda6            /                  reiserfs     defaults              1 1
#/dev/sda5           swap               swap         pri=42                0 0
#/dev/sda1           /boot              reiserfs     defaults              1 2
#/dev/sda3           /usr               reiserfs     defaults              1 2
#/dev/sda6           /home              reiserfs     defaults              1 2

In der menu.lst ändern wir nur den Eintrag für das Rootdevice

LINUX:/home # cat /boot/grub/menu.lst    #(vor der Aenderung)
    root (hd0,0)
    kernel (hd0,0)/vmlinuz root=/dev/sda2 vga=0x314 acpi=off resume=/dev/sda5 sp
lash=silent  showopts
    initrd (hd0,0)/initrd

LINUX:/home # cat /boot/grub/menu.lst    #(nach der Aenderung)
    root (hd0,0)
    kernel (hd0,0)/vmlinuz root=/dev/sda6 vga=0x314 acpi=off resume=/dev/sda5 sp
lash=silent  showopts
    initrd (hd0,0)/initrd

LINUX:/home # init 6

Das System sollte jetzt einen Reboot ausführen und als einzige Datenpartition die /dev/sda6 einbinden

LINUX:~ # mount
/dev/sda6 on / type reiserfs (rw)

LINUX:~ # df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda6             24837316   3404956  21432360  14% /

Jetzt haben wir das komplette System, das wir im Backup gesichert hatten, zu einem fast vollständig lauffähigen System auf einer einzigen Partition gemacht.
Die einzige Einschränkung, dieses System hat keine eigene funktionieren Bootkonfiguration, wir haben ja mittels der geänderten alten Konfiguration auf /dev/sda1 gebootet. Wir wollen dieses System jetzt aber nur als Hilfssystem benutzen und wollen weiter an unserem entgültigen System herumbauen.

Die anderen Partitionen sind frei geworden, wir legen jetzt darauf die neue Filesysteme an, aber wir ändern jetzt auf ext3 Filesysteme.
Danach mounten wir wieder unseren neuen Dateibaum ( Ausnahme hier im Beispiel das Homeverzeichnis, die alten Userverzeichnisse sind im Moment ja noch auf dem derzeigigen Rootverzeichnis. Wir müssen das deshalb jetzt anders behandeln) Die anderen Verzeichnisse werden wie in vorherigen Beispiel wieder mit den Daten gefüllt.

LINUX:~ # mkfs.ext3 -j /dev/sda1
LINUX:~ # mkfs.ext3 -j /dev/sda2
LINUX:~ # mkfs.ext3 -j /dev/sda3
LINUX:~ # mount /dev/sda2 /mnt
LINUX:~ # mkdir /mnt/boot /mnt/usr /mnt/home /mnt/mnt 
LINUX:~ # mount /dev/sda1 /mnt/boot
LINUX:~ # mount /dev/sda3 /mnt/usr
LINUX:~ # mount /dev/sdb1 /mnt/mnt
LINUX:~ # ls /mnt/mnt/*tgz
/mnt/mnt/backup.tgz  /mnt/mnt/home.tgz  /mnt/mnt/usr.tgz
/mnt/mnt/boot.tgz    /mnt/mnt/root.tgz

LINUX:/mnt # tar -xzf /mnt/mnt/root.tgz
LINUX:/mnt # tar -xzf /mnt/mnt/boot.tgz
LINUX:/mnt # tar -xzf /mnt/mnt/usr.tgz

Unser jetziges Rootverzeichnis enthält noch die Homeverzeichnisse des alten Systems, diese löschen wir und kopieren an deren Stelle die jetzigen Homeverzeichnisse, die haben wir ja vor dem letzen Reboot schon aus dem Backuparchiv entpackt. In diesem Beispiel benutzen wir cpio dafür.

LINUX:/mnt # cd /
LINUX:/ # rm -rf robi puppe
LINUX:/ # cd /home
LINUX:/home # ls
lost+found  puppe  robi
LINUX:/home # find puppe robi | cpio -pdumC65536  /

Wie im vorherigen Beispiel legen wir auch jetzt wieder eine chroot-Umgebung an, um das System zu testen und die notwendigen Änderungen vorzunehmen damit das System wieder sicher bootet.

LINUX:/home # mount --bind /proc /mnt/proc
LINUX:/home # mount --bind /sys /mnt/sys
LINUX:/home # mount --bind /dev /mnt/dev
LINUX:/home # chroot /mnt
LINUX:/ #

Wir überprüfen und ändern die fstab, wir müssen jetzt hier die Filesystemtypen und eventuell die Mount Optionen ändern.

LINUX:/etc # cat /etc/fstab
/dev/sda2            /                  reiserfs     defaults              1 1
/dev/sda5            swap               swap         pri=42                0 0
/dev/sda1            /boot              reiserfs     defaults              1 2
/dev/sda3            /usr               reiserfs     defaults              1 2
/dev/sda6            /home              reiserfs     defaults              1 2

LINUX:/etc # cat /etc/fstab
/dev/sda2            /                  ext3         defaults              1 1
/dev/sda5            swap               swap         pri=42                0 0
/dev/sda1            /boot              ext3         defaults              1 2
/dev/sda3            /usr               ext3         defaults              1 2
/dev/sda6            /home              reiserfs     defaults              1 2

Wir überprüfen die /boot/grub/menu.lst, da wir jedoch keine Veränderungen an den Partitionen oder der Zuordnung des Rootverzeichnisses vorgenommen haben, ist die im Backup enthaltene schon richtig, wir prüfen das aber dennoch.

LINUX:/etc # cat /boot/grub/menu.lst
title SUSE 10.1 
    root (hd0,0)
    kernel (hd0,0)/vmlinuz root=/dev/sda2 vga=0x314 acpi=off resume=/dev/sda5 sp
lash=silent  showopts
    initrd (hd0,0)/initrd


Problem Filesystemwechsel

Hinweis: Dieser Artikelabschnitt handelt explizit von der Version GRUB Legacy. Für GRUB 2 sind komplett andere Konfigurationen notwendig, siehe dort

Jetzt kommen wir zu neuen Problemen, die wir uns mit dem Ändern der Filesystemetypen eingehandelt haben. Wir haben das Dateisystem in dem sich die Dateien /boot/grub/* befinden gewechselt. Das müssen wir aber dem Bootloader mitteilen, sonst erwartet der Bootloader noch ein reiserfs dort. Wir müssen also einen neuen Bootloader auf die Bootplatte schreiben.
Wir haben aber auch den Type von unserem Rootfilesystem gewechselt, wenn der Kern jetzt nicht das Kernelmodul für das neue Filesystem hat, dann bleibt unser boot hängen. Welche Module im Kernel fest einkompiliert sind, könnten wir aus der /boot/config..... Datei herauslesen, dort im Abschnitt File systems steht CONFIG_EXT3_FS=m also ext3 ist hier nicht im Kernel enthalten sondern muss als Modul vor dem Einhängen des Rootfilesystems geladen werden.
Das Laden dieser Module während der frühen Bootphase obliegt der initrd. (initrd ist kleines Filesystem das vom Kernel in den Speicher geladen wird, um Module zu laden die nicht im Kernel selbst enthalten sind, noch bevor das Rootverzeichniss geladen wird) Das initrd müssen wir also neu konfigurieren und anlegen. Dazu müssen wir in der Datei /etc/sysconfig/kernel in der Zeile INITRD_MODULES= die Module eintragen die der Kernel zum Laden des Rootfilesystems braucht und anschließend eine neue initrd erstellen.

LINUX:/etc # cat /etc/sysconfig/kernel   #(vor der Aenderung)
INITRD_MODULES="serverworks sym53c8xx processor thermal fan jbd reiserfs"

LINUX:/etc # cat /etc/sysconfig/kernel   #(nach der Aenderung)
INITRD_MODULES="serverworks sym53c8xx processor thermal fan jbd ext3"

LINUX:/etc # mkinitrd -d /dev/sda2
LINUX:/etc # grub-install /dev/sda
LINUX:/etc # init 6

Achtung: es ist möglich, das bei einer älteren Versionen von mkinitrd die Option -d nicht bekannt ist. Sollte es hier zu einer solchen Fehlermeldung kommen, dann reicht auch mkinitrc ohne Optionen, dann holt er sich die Informationen aus der Bootkonfiguration. Dort sollte jetzt ja auch root=/dev/sda2 drinstehen.

Bei diesem Reboot sollte das ursprüngliche Linux jetzt wieder richtig auf den Partitionen verteilt starten.


Wir überprüfen das.

LINUX:~ # mount
/dev/sda2 on / type ext3 (rw)
/dev/sda1 on /boot type ext3 (rw)
/dev/sda3 on /usr type ext3 (rw)
/dev/sda6 on /home type reiserfs (rw)

LINUX:~ # df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2              4806784   1337100   3225512  30% /
/dev/sda1               251871     26495    212372  12% /boot
/dev/sda3              4806784   2489796   2072816  55% /usr
/dev/sda6             24837316   3411092  21426224  14% /home

Jetzt müssen wir nur noch ein paar Leichen entfernen, auf unserem /home Verzeichnis befindet sich jetzt noch das komplette Linuxsystem das wir dort als Hilfssystem angelegt hatten. Dieses können wir jetzt löschen.

LINUX:~ # cd /home
LINUX:/home # ls -a
.       .qt       boot  etc   lost+found  opt    robi  sicher     success  usr
..      .viminfo  data  home  media       proc   root  srv        sys      var
.gnupg  bin       dev   lib   mnt         puppe  sbin  subdomain  tmp

LINUX:/home # rm -rf .qt boot etc opt sicher success usr .viminfo data home media 
LINUX:/home # rm -rf proc root srv sys var .gnupg bin dev lib mnt sbin subdomain tmp
LINUX:/home # ls -a
.  ..  lost+found  puppe  robi

Damit ist unser Recover und Umbau am System abgeschlossen.

viel Erfolg beim ausprobieren


Robi 12:09, 4. Sep 2006 (CEST)


Back To Backup