Spiegelung (RAID1 / Mirroring) ist eine Technik, bei der identische Daten auf mehr als ein Laufwerk geschrieben werden. Spiegel werden in der Regel zum Schutz vor Datenverlust aufgrund von Festplattenausfällen verwendet. Jedes Laufwerk in einem Spiegel enthält eine identische Kopie der Daten. Wenn ein einzelnes Laufwerk ausfällt, funktioniert der Spiegel weiterhin und die Daten werden von den restlichen Festplatten bereit gestellt. Der Rechner läuft einfach weiter und der Administrator hat die Gelegentheit, das defekte Laufwerk auszutauschen.
Zwei häufige Situationen werden in diesem Beispiel erläutert. Im ersten Beispiel wird ein Spiegel aus zwei neuen Laufwerken erstellt, der die existierende Platte ersetzt. Das zweite Beispiel erzeugt ein Spiegel mit einem einzigen Laufwerk, kopiert dann die Daten von der alten Platte und fügt die alte Platte zum Spiegel hinzu. Obwohl dieses Verfahren etwas komplizierter ist, wird nur ein neues Laufwerk benötigt.
Traditionell sind die Laufwerke in einem Spiegel vom gleichen Modell und besitzen die gleiche Kapazität. Dies ist jedoch keine Voraussetzung für gmirror(8). Hier können Spiegel mit unterschiedlichen Kapazitäten verwendet werden. Die Kapazität richtet sich dann nach dem kleinsten Laufwerk im Spiegel. Zusätzlicher Speicherplatz auf größeren Laufwerken bleibt dann ungenutzt. Werden später weitere Laufwerke zum Spiegel hinzugefügt, müssen diese mindestens so viel Kapazität haben wie das kleinste Laufwerk im Spiegel.
Die hier gezeigten Verfahren löschen keine Daten. Dennoch sollte, wie bei jeder größeren Operation, zuerst eine vollständige Sicherung erstellt werden.
Obwohl in diesem Abschnitt dump(8) zum Kopieren der Dateisysteme verwendet wird, funktioniert es nicht auf Dateisystemen mit aktiviertem Soft-Updates Journaling. In tunefs(8) finden Sie Informationen, wie Sie Soft-Updates Journaling erkennen und deaktivieren.
Viele Plattensysteme speichern Metadaten am Ende der Platte. Alte Metadaten sollten vor der Wiederverwendung in einem Spiegel gelöscht werden, da die meisten Probleme aus zwei Arten von übrig gebliebenen Metadaten resultieren: GPT-Partitionstabellen und alte Metadaten aus einem vorherigen Spiegel.
GPT-Metadaten können mit gpart(8)
gelöscht werden. Dieses Beispiel löscht sowohl die primären,
als auch die GPT-Partitionstabelle von der
Festplatte ada8
:
#
gpart destroy -F ada8
Mit gmirror(8) kann eine Platte aus einem aktiven
Spiegel entfernt und gleichzeitig die Metadaten gelöscht
werden. In diesem Beispiel wird die Platte
ada8
aus dem aktiven Spiegel
gm4
entfernt:
#
gmirror remove gm4 ada8
Wenn der Spiegel nicht aktiv ist, sich jedoch noch alte
Metadaten auf der Festplatte befinden, benutzen Sie
gmirror clear
, um die Metadaten zu
entfernen:
#
gmirror clear ada8
gmirror(8) speichert einen Datenblock an Metadaten am Ende der Festplatte. Da das GPT-Partitionschema die Metadaten auch am Ende der Platte speichert, wird es nicht empfohlen, mit gmirror(8) einen Spiegel aus einem gesamten GPT-Datenträger zu erstellen. In diesen Fällen sollte eine MBR-Partitionierung benutzt werden, weil hier nur eine Partitionstabelle am Anfang der Platte gespeichert wird und somit nicht mit den Metadaten des Spiegels im Konflikt steht.
In diesem Beispiel wurde FreeBSD bereits auf der vorhandenen
Festplatte ada0
installiert. Zwei neue
Platten, ada1
und
ada2
, wurden bereits mit dem System
verbunden. Ein neuer Spiegel soll mit diesen beiden Platten
erzeugt und verwendet werden, um die alte vorhandene Platte zu
ersetzen.
Das Kernelmodul geom_mirror.ko
muss
entweder in den Kernel eingebaut, oder zur Laufzeit geladen
werden. Sie können das Modul manuell laden:
#
gmirror load
Erstellen Sie den Spiegel mit den beiden neuen Festplatten:
#
gmirror label -v gm0 /dev/ada1 /dev/ada2
gm0
ist ein vom Benutzer gewählter
Name, der dem neuen Spiegel zugeordnet wird. Nachdem der
Spiegel gestartet wurde, erscheint dieser Gerätename in
/dev/mirror/
.
MBR- und
bsdlabel-Partitionstabellen können
jetzt auf dem neuen Spiegel erzeugt werden. Dieses Beispiel
verwendet das herkömmliche Dateisystem-Layout für
/
, swap, /var
,
/tmp
und /usr
. Eine
einzelne Root- und Swap-Partition würde ebenfalls
funktionieren.
Die Partitionen auf dem Spiegel müssen nicht zwingend die
gleiche Größe wie die auf der Festplatte haben, aber sie
müssen groß genug sein, um alle Daten aufnehmen zu können, die
bereits auf ada0
gespeichert sind.
#
gpart create -s MBR mirror/gm0
#
gpart add -t freebsd -a 4k mirror/gm0
#
gpart show mirror/gm0
=> 63 156301423 mirror/gm0 MBR (74G) 63 63 - free - (31k) 126 156301299 1 freebsd (74G) 156301425 61 - free - (30k)
#
gpart create -s BSD mirror/gm0s1
#
gpart add -t freebsd-ufs -a 4k -s 2g mirror/gm0s1
#
gpart add -t freebsd-swap -a 4k -s 4g mirror/gm0s1
#
gpart add -t freebsd-ufs -a 4k -s 2g mirror/gm0s1
#
gpart add -t freebsd-ufs -a 4k -s 1g mirror/gm0s1
#
gpart add -t freebsd-ufs -a 4k mirror/gm0s1
#
gpart show mirror/gm0s1
=> 0 156301299 mirror/gm0s1 BSD (74G) 0 2 - free - (1.0k) 2 4194304 1 freebsd-ufs (2.0G) 4194306 8388608 2 freebsd-swap (4.0G) 12582914 4194304 4 freebsd-ufs (2.0G) 16777218 2097152 5 freebsd-ufs (1.0G) 18874370 137426928 6 freebsd-ufs (65G) 156301298 1 - free - (512B)
Damit von dem Spiegel gebootet werden kann, muss der Bootcode in den MBR installiert, ein bsdlabel erstellt und die aktive Partition gesetzt werden:
#
gpart bootcode -b /boot/mbr mirror/gm0
#
gpart set -a active -i 1 mirror/gm0
#
gpart bootcode -b /boot/boot mirror/gm0s1
Erstellen Sie die Dateisysteme auf dem neuen Spiegel und aktivieren Sie Soft-Updates:
#
newfs -U /dev/mirror/gm0s1a
#
newfs -U /dev/mirror/gm0s1d
#
newfs -U /dev/mirror/gm0s1e
#
newfs -U /dev/mirror/gm0s1f
Die Dateisysteme der vorhandenen Platte
ada0
können jetzt mit dump(8) und
restore(8) auf den Spiegel kopiert werden.
#
mount /dev/mirror/gm0s1a /mnt
#
dump -C16 -b64 -0aL -f - / | (cd /mnt && restore -rf -)
#
mount /dev/mirror/gm0s1d /mnt/var
#
mount /dev/mirror/gm0s1e /mnt/tmp
#
mount /dev/mirror/gm0s1f /mnt/usr
#
dump -C16 -b64 -0aL -f - /var | (cd /mnt/var && restore -rf -)
#
dump -C16 -b64 -0aL -f - /tmp | (cd /mnt/tmp && restore -rf -)
#
dump -C16 -b64 -0aL -f - /usr | (cd /mnt/usr && restore -rf -)
Fügen Sie die Dateisysteme für den Spiegel in
/etc/rc.conf
hinzu:
# Device Mountpoint FStype Options Dump Pass# /dev/mirror/gm0s1a / ufs rw 1 1 /dev/mirror/gm0s1b none swap sw 0 0 /dev/mirror/gm0s1d /var ufs rw 2 2 /dev/mirror/gm0s1e /tmp ufs rw 2 2 /dev/mirror/gm0s1f /usr ufs rw 2 2
Wenn das Modul geom_mirror.ko
nicht
im Kernel enthalten ist, können Sie
/mnt/boot/loader.conf
bearbeiten, damit
das Modul beim Systemstart geladen wird:
geom_mirror_load="YES"
Starten Sie das System neu und überprüfen Sie, ob alle Daten erfolgreich kopiert wurden. Das BIOS wird den Spiegel vermutlich als zwei einzelne Laufwerke erkennen. Da beide Laufwerke jedoch identisch sind, spielt es keine Rolle, welches Laufwerk zum Booten ausgewählt wird.
Falls es Probleme beim Booten gibt, lesen Sie den
Abschnitt 18.3.4, „Fehlerbehebung“. Die alte
Festplatte ada0
kann vom System
getrennt und als Offline-Sicherung aufbewahrt werden.
Im laufenden Betrieb verhält sich der Spiegel genau wie ein einzelnes Laufwerk.
In diesem Beispiel wurde FreeBSD bereits auf der
Festplatte ada0
installiert und eine
weitere Platte, ada1
, wurde an
das System angeschlossen. Zunächst wird ein Spiegel mit
einer Festplatte erstellt, dann das vorhandene System auf
den Spiegel kopiert. Zuletzt wird die alte Festplatte in den
Spiegel eingefügt. Diese etwas komplexere Vorgehensweise ist
erforderlich, da gmirror
512 Byte an
Metadaten am Ende der Festplatte speichert, und die bestehende
Platte, ada0
, in der Regel den Platz
bereits belegt hat.
Laden Sie das Kernelmodul
geom_mirror.ko
:
#
gmirror load
Prüfen Sie mit diskinfo
die Mediengröße
der vorhandenen Festplatte:
#
diskinfo -v ada0 | head -n3
/dev/ada0 512 # sectorsize 1000204821504 # mediasize in bytes (931G)
Jetzt können Sie den Spiegel auf der neuen Festplatte
erzeugen. Um sicherzustellen, dass die Kapazität nicht größer
ist, als die Kapazität der vorhandenen Platte
ada0
, benutzen Sie gnop(8) um eine
Platte mit der exakt gleichen Größe zu imitieren. Diese
Platte speichert keine Daten und wird nur verwendet, um die
Größe des Spiegels zu begrenzen. gmirror(8) wird die
Kapazität des Spiegels auf die Größe von
gzero.nop
beschränken, auch wenn die neue
Festplatte ada1
mehr Platz zur Verfügung
hätte. Beachten Sie, dass
1000204821504
in der zweiten Zeile
der ermittelten Mediengröße von diskinfo
entspricht.
#
geom zero load
#
gnop create -s 1000204821504 gzero
#
gmirror label -v gm0 gzero.nop ada1
#
gmirror forget gm0
Da gzero.nop
keine Daten speichert,
sieht der Spiegel sie als nicht verbunden an. Der Spiegel ist
so konfiguriert, dass er nicht verbundene Komponenten einfach
„vergisst“. Das Ergebnis ist ein Spiegel mit nur
einer einzigen Platte, ada1
.
Sehen Sie sich nach der Erstellung von
gm0
die Partitionstabelle von
ada0
an. Diese Ausgabe stammt von einer
1 TB Festplatte. Falls am Ende der Platte noch freier
Speicherplatz ist, kann der Inhalt von
ada0
direkt auf den Spiegel kopiert
werden.
Falls jedoch der gesamte Speicherplatz auf der Platte zugeordnet ist, dann gibt es keinen Platz mehr für die 512 Byte Metadaten für den Spiegel am Ende der Platte, wie in dieser Auflistung zu sehen.
#
gpart show ada0
=> 63 1953525105 ada0 MBR (931G) 63 1953525105 1 freebsd [active] (931G)
In diesem Fall muss die Partitionstabelle bearbeitet
werden, um die Kapazität von mirror/gm0
um einen Sektor zu reduzieren. Dieses Verfahren wird später
erläutert.
In beiden Fällen sollte die Partitionstabelle der primären
Platte mit gpart backup
gesichert
werden.
#
gpart backup ada0 > table.ada0
#
gpart backup ada0s1 > table.ada0s1
Diese Kommandos erstellen zwei Dateien,
table.ada0
und
table.ada0s1
. Das Beispiel verwendet
eine 1 TB Festplatte:
#
cat table.ada0
MBR 4 1 freebsd 63 1953525105 [active]
#
cat table.ada0s1
BSD 8 1 freebsd-ufs 0 4194304 2 freebsd-swap 4194304 33554432 4 freebsd-ufs 37748736 50331648 5 freebsd-ufs 88080384 41943040 6 freebsd-ufs 130023424 838860800 7 freebsd-ufs 968884224 984640881
Wenn am Ende der Platte kein Platz vorhanden ist, muss die Größe des Slice und der letzten Partition verringert werden. Bearbeiten Sie die beiden Dateien, und verringern Sie die Größe der Slice und der Partition jeweils um eins. Dies bezieht sich auf die letzten Zahlen in der Liste.
#
cat table.ada0
MBR 4 1 freebsd 63 1953525104 [active]
#
cat table.ada0s1
BSD 8 1 freebsd-ufs 0 4194304 2 freebsd-swap 4194304 33554432 4 freebsd-ufs 37748736 50331648 5 freebsd-ufs 88080384 41943040 6 freebsd-ufs 130023424 838860800 7 freebsd-ufs 968884224 984640880
Wenn mindestens ein Sektor der Platte nicht zugewiesen wurde, kann die Platte ohne Modifikation verwendet werden.
Jetzt kann die Partitionstabelle auf
mirror/gm0
wiederhergestellt
werden:
#
gpart restore mirror/gm0 < table.ada0
#
gpart restore mirror/gm0s1 < table.ada0s1
Prüfen Sie die Partitionstabellen mit
gpart show
. Dieses Beispiel nutzt
gm0s1a
für /
,
gm0s1d
für /var
,
gm0s1e
für /usr
,
gm0s1f
für /data1
und gm0s1g
für
/data2
.
#
gpart show mirror/gm0
=> 63 1953525104 mirror/gm0 MBR (931G) 63 1953525042 1 freebsd [active] (931G) 1953525105 62 - free - (31k)#
gpart show mirror/gm0s1
=> 0 1953525042 mirror/gm0s1 BSD (931G) 0 2097152 1 freebsd-ufs (1.0G) 2097152 16777216 2 freebsd-swap (8.0G) 18874368 41943040 4 freebsd-ufs (20G) 60817408 20971520 5 freebsd-ufs (10G) 81788928 629145600 6 freebsd-ufs (300G) 710934528 1242590514 7 freebsd-ufs (592G) 1953525042 63 - free - (31k)
Sowohl die Slice, als auch die letzte Partition, muss mindestens einen freien Block am Ende der Platte haben.
Erstellen Sie Dateisysteme auf diesen neuen Partitionen:
#
newfs -U /dev/mirror/gm0s1a
#
newfs -U /dev/mirror/gm0s1d
#
newfs -U /dev/mirror/gm0s1e
#
newfs -U /dev/mirror/gm0s1f
#
newfs -U /dev/mirror/gm0s1g
Damit Sie von dem Spiegel booten können, müssen Sie den Bootcode in den MBR installieren, ein bsdlabel anlegen und das aktive Slice setzen:
#
gpart bootcode -b /boot/mbr mirror/gm0
#
gpart set -a active -i 1 mirror/gm0
#
gpart bootcode -b /boot/boot mirror/gm0s1
Bearbeiten Sie /etc/fstab
, um die
neuen Partitionen auf dem Spiegel nutzen zu können. Speichern
Sie zunächst eine Kopie der Datei unter
/etc/fstab.orig
:
#
cp /etc/fstab /etc/fstab.orig
Ersetzen Sie in /etc/fstab
/dev/ada0
durch
mirror/gm0
.
# Device Mountpoint FStype Options Dump Pass# /dev/mirror/gm0s1a / ufs rw 1 1 /dev/mirror/gm0s1b none swap sw 0 0 /dev/mirror/gm0s1d /var ufs rw 2 2 /dev/mirror/gm0s1e /usr ufs rw 2 2 /dev/mirror/gm0s1f /data1 ufs rw 2 2 /dev/mirror/gm0s1g /data2 ufs rw 2 2
Wenn das Modul geom_mirror.ko
nicht
im Kernel enthalten ist, können Sie
/boot/loader.conf
bearbeiten, damit
das Modul beim Systemstart geladen wird:
geom_mirror_load="YES"
Die Dateisysteme der ursprünglichen Platte können jetzt
mit dump(8) und restore(8) auf den Spiegel kopiert
werden. Wenn Sie das Dateisystem mit
dump -L
sichern, wird zunächst ein Snapshot
des Dateisystems erstellt, was einige Zeit dauern kann.
#
mount /dev/mirror/gm0s1a /mnt
#
dump -C16 -b64 -0aL -f - / | (cd /mnt && restore -rf -)
#
mount /dev/mirror/gm0s1d /mnt/var
#
mount /dev/mirror/gm0s1e /mnt/usr
#
mount /dev/mirror/gm0s1f /mnt/data1
#
mount /dev/mirror/gm0s1g /mnt/data2
#
dump -C16 -b64 -0aL -f - /usr | (cd /mnt/usr && restore -rf -)
#
dump -C16 -b64 -0aL -f - /var | (cd /mnt/var && restore -rf -)
#
dump -C16 -b64 -0aL -f - /data1 | (cd /mnt/data1 && restore -rf -)
#
dump -C16 -b64 -0aL -f - /data2 | (cd /mnt/data2 && restore -rf -)
Starten Sie das System neu und booten Sie von
ada1
. Wenn alles funktioniert, wird
das System von mirror/gm0
booten,
welches jetzt die gleichen Daten enthält wie
ada0
. Lesen Sie Abschnitt 18.3.4, „Fehlerbehebung“, falls es Probleme beim
Booten gibt.
An dieser Stelle besteht der Spiegel immer noch aus der
einzelnen Platte ada1
.
Nachdem erfolgreich von mirror/gm0
gebootet wurde, besteht der letzte Schritt darin,
ada0
in den Spiegel einzufügen.
Wenn Sie ada0
in den Spiegel
einfügen, wird der Inhalt der Platte mit den Daten aus
dem Spiegel überschrieben. Sie müssen sicherstellen, das
mirror/gm0
den gleichen Inhalt wie
ada0
hat, bevor Sie
ada0
zum Spiegel hinzufügen. Falls der
zuvor mit dump(8) und restore(8) kopierte Inhalt
nicht mit dem von ada0
identisch ist,
machen Sie die Änderungen an /etc/fstab
rückgängig, starten Sie das System neu und beginnen Sie die
Prozedur von vorn.
#
gmirror insert gm0 ada0
GEOM_MIRROR: Device gm0: rebuilding provider ada0
Die Synchronisation zwischen den beiden Platten wird
direkt gestartet. Verwenden Sie gmirror
status
um den Fortschritt zu beobachten.
#
gmirror status
Name Status Components girror/gm0 DEGRADED ada1 (ACTIVE) ada0 (SYNCHRONIZING, 64%)
Nach einer Weile wird die Wiederherstellung abgeschlossen sein.
GEOM_MIRROR: Device gm0: rebuilding provider ada0 finished.#
gmirror status
Name Status Components mirror/gm0 COMPLETE ada1 (ACTIVE) ada0 (ACTIVE)
mirror/gm0
besteht nun aus den beiden
Platten ada0
und
ada1
. Der Inhalt der beiden Platten wird
automatisch miteinander synchronisiert. Im laufenden Betrieb
verhält sich mirror/gm0
wie eine einzelne
Festplatte.
Falls das System nicht mehr startet, müssen möglicherweise die BIOS-Einstellungen geändert werden, um von dem neuen gespiegelten Laufwerk zu booten. Beide Platten des Spiegels können zum Booten verwendet werden, da sie als Komponenten des Spiegels identische Daten enthalten.
Wenn der Bootvorgang mit der folgenden Meldung abbricht, ist irgendwas mit dem Spiegel nicht in Ordnung:
Mounting from ufs:/dev/mirror/gm0s1a failed with error 19. Loader variables: vfs.root.mountfrom=ufs:/dev/mirror/gm0s1a vfs.root.mountfrom.options=rw Manual root filesystem specification: <fstype>:<device> [options] Mount <device> using filesystem <fstype> and with the specified (optional) option list. eg. ufs:/dev/da0s1a zfs:tank cd9660:/dev/acd0 ro (which is equivalent to: mount -t cd9660 -o ro /dev/acd0 /) ? List valid disk boot devices . Yield 1 second (for background tasks) <empty line> Abort manual input mountroot>
Dieses Problem kann durch ein nicht geladenes
Kernelmodul geom_mirror.ko
in
/boot/loader.conf
verursacht werden.
Um das Problem zu beheben, booten Sie von einem
FreeBSD-Installationsmedium und wählen Sie
Shell
an der Eingabeaufforderung. Laden
Sie dann das Modul und hängen Sie den Spiegel ein:
#
gmirror load
#
mount /dev/mirror/gm0s1a /mnt
Bearbeiten Sie dann
/mnt/boot/loader.conf
und fügen Sie
eine Zeile für das Kernelmodul hinzu:
geom_mirror_load="YES"
Speichern Sie die Datei und starten Sie das System neu.
Andere Probleme, die error 19
verursachen können, sind nur mit mehr Aufwand zu beheben.
Obwohl das System von ada0
booten
sollte, wird ein weiterer Prompt erscheinen, wenn
/etc/fstab
fehlerhaft ist. Geben
Sie am Loader-Prompt ufs:/dev/ada0s1a
ein
und drücken Sie Enter. Machen Sie die
Änderungen an /etc/fstab
rückgängig und
hängen Sie anstelle des Spiegels die originale Festplatte
(ada0
) ein. Starten Sie dann das
System neu und versuchen Sie den Vorgang erneut.
Enter full pathname of shell or RETURN for /bin/sh:#
cp /etc/fstab.orig /etc/fstab
#
reboot
Der Vorteil der Plattenspiegelung ist, dass eine Platte
ausfallen kann, ohne dass Sie dabei Daten verlieren. Falls
ada0
aus dem obigen Beispiel ausfällt,
steht der Spiegel weiterhin zur Verfügung und bietet die Daten
von der verbleibenden Platte ada1
an.
Um das ausgefallene Laufwerk zu ersetzen, muss das System
heruntergefahren werden und das ausgefallene Laufwerk durch
ein neues Laufwerk von gleicher oder größerer Kapazität
ersetzt werden. Hersteller verwenden oft etwas
willkürliche Werte für die Kapazität. Der einzige Weg, um
wirklich sicher zu sein, ist die Gesamtzahl der Sektoren von
diskinfo -V
zu vergleichen. Ein Laufwerk
mit größerer Kapazität wird funktionieren, allerdings wird der
zusätzliche Platz ungenutzt bleiben.
Nachdem der Rechner wieder eingeschaltet ist, wird der Spiegel im „degraded“ Modus ausgeführt werden. Der Spiegel wird angewiesen, Laufwerke zu vergessen, die noch nicht verbunden sind:
#
gmirror forget gm0
Alte Metadaten sollten von der Ersatzfestplatte nach den
Anweisungen in Abschnitt 18.3.1, „Probleme mit Metadaten“ gelöscht
werden. Anschließend kann die Ersatzfestplatte, in diesem
Beispiel ada4
, in den Spiegel eingefügt
werden:
#
gmirror insert gm0 /dev/ada4
Die Wiederherstellung beginnt, sobald das neue Laufwerk in den Spiegel eingesetzt wird. Das Kopieren der Daten vom Spiegel auf das neue Laufwerk kann eine Weile dauern. Die Leistung des Spiegels ist während dieser Zeit stark reduziert, deswegen sollten neue Laufwerke idealerweise dann eingefügt werden, wenn der Rechner nicht benötigt wird.
Der Fortschritt der Wiederherstellung kann mit
gmirror status
überwacht werden. Während
der Wiederherstellung ist der Status
DEGRADED
. Wenn der Vorgang
abgeschlossen ist, wechselt der Status zu
COMPLETE
.
Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an
<de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an
<de-bsd-translators@de.FreeBSD.org>.