Kann ich mit einem Gerät ein Software-RAID 1 erstellen?

20

Ich habe eine einzelne Festplatte, von der ich einen Spiegel erstellen möchte. Nennen wir diese Festplatte sda. Ich habe gerade eine andere Diskette mit identischer Größe gekauft, die wir anrufen können sdb. sdaund sdbhaben jeweils eine Partition aufgerufen sda1und sdb1.

Wenn ich einen Raid erstelle, möchte ich meinen nicht sdabereinigen und von vorne beginnen, sondern nur damit beginnen, ihn zu spiegeln sdb. Mein Gedankengang war zu tun:

mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=1 /dev/sda1

... um das Array ohne sdbFestplatte zu erstellen , führen Sie dann so etwas wie aus (ich denke den folgenden Befehl laut aus, weil ich nicht sicher bin, wie ich diesen Schritt erreichen soll)

mdadm /dev/md0 --add /dev/sdb1

Hinweis sdb1wird als ähnlich formatiert angenommensda1

Ist das möglich?

Wer bin ich
quelle
Ja, du kannst. Es ist nicht so einfach wie --add, und Sie müssen vorsichtig sein, aber es ist nicht sehr kompliziert. Siehe Wie richte ich die Festplattenspiegelung in Ubuntu ein? (Ich kann diese Frage wegen der neuen Regeln nicht als Duplikat vorschlagen.)
Gilles 'SO - hör auf, böse zu sein'

Antworten:

28

Die einfache Antwort auf die Frage im Titel lautet "Ja". Was Sie jedoch wirklich tun möchten, ist der nächste Schritt, bei dem die vorhandenen Daten gespiegelt werden.

Es ist möglich, die vorhandene Festplatte zu konvertieren, aber es ist, wie erwähnt, aufgrund des Speicherorts der Metadaten riskant. Besser ist es, mit der neuen Festplatte einen leeren (defekten) Spiegel zu erstellen und die vorhandenen Daten darauf zu kopieren. Wenn es dann nicht funktioniert, booten Sie einfach zum nicht gespiegelten Original zurück.

Initialisiere /dev/sdb1als erstes das neue /dev/md0mit einem fehlenden Laufwerk und initialisiere das Dateisystem (ich gehe von ext3 aus, aber die Wahl liegt bei dir)

mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 /dev/sdb1 missing
mkfs -text3 /dev/md0

Nun /dev/sda1ist höchstwahrscheinlich die Root - Dateisystem ( /) , um für die Sicherheit sollten Sie den nächsten Schritt von einer Live - CD tun, Notfall - CD oder einem anderen startfähiges System , das beide zugreifen kann /dev/sda1und /dev/md0obwohl ich erfolgreich dies getan habe durch den Single - User - Modus fallen.

Kopieren Sie den gesamten Inhalt des Dateisystems auf /dev/sda1zu /dev/md0. Beispielsweise:

mount /dev/sda1 /mnt/a       # only do this if /dev/sda1 isn't mounted as root
mount /dev/md0 /mnt/b
cd /mnt/a                    # or "cd /" if it's the root filesystem
cp -dpRxv . /mnt/b

Bearbeiten Sie /etc/fstaboder stellen Sie auf andere Weise sicher, dass beim nächsten Start /dev/md0statt gemountet wird /dev/sda1. Ihr System ist wahrscheinlich so eingestellt, dass es startet, /dev/sda1und die Startparameter geben dies wahrscheinlich als Root-Gerät an. Wenn Sie also neu starten, sollten Sie dies manuell so ändern, dass sich der Root befindet /dev/md0(vorausgesetzt, er /dev/sda1war Root). Vergewissern Sie sich nach dem Neustart, dass das /dev/md0Gerät nun aktiviert ist ( df) und als beeinträchtigter Spiegel ausgeführt wird ( cat /proc/mdstat). In /dev/sda1dem Array:

mdadm /dev/md0 --add /dev/sda1

Da die Neuerstellung überschreibt /dev/sda1, spielt es keine Rolle, welche Metadatenversion Sie verwenden. Machen Sie wie immer bei größeren Änderungen eine vollständige Sicherung (falls möglich) oder stellen Sie zumindest sicher, dass alles, was nicht wiederhergestellt werden kann, sicher ist.

Sie müssen Ihre Startkonfiguration neu generieren, um sie /dev/md0als Root zu verwenden (sofern /dev/sda1es sich um Root handelte). Möglicherweise müssen Sie die Konfiguration neu generieren, um mdadm.confsicherzustellen, dass sie /dev/md0immer gestartet wird.

StarNamer
quelle
Perfekt genau das, was ich brauche: D
whoami
2
Nicht cpzum Kopieren von Dateisystemen verwenden, da Sie einige Dinge wie feste Links, erweiterte Attribute ... vermissen. Verwenden Sie taroder rsyncmit den richtigen Optionen. Achten Sie beim Booten einer Live-CD darauf, dass sich die UID-Benutzerzuordnungen unterscheiden (siehe --numeric-owner-Optionen von tar / rsync). Siehe auch clone2fs zum Klonen von extx-Dateisystemen.
Stéphane Chazelas
1
Die Optionen zum cpBeibehalten von Links (-d), Modus, Besitz und Zeitstempeln (-p), zum rekursiven Ausführen (-R) und zum Beibehalten eines Dateisystems (-x) Attribute.
StarNamer
rsync -aH --delete /mnt/olddisk/ /mnt/newarray/ist eine gute Option. Fügen -vih --progressSie hinzu, wenn Sie wirklich sehen möchten, was es tut.
Rudolfbyker
4

Sicher, Sie können es erstellen, indem Sie angeben, dass sich die zweite Festplatte aktuell befindet missing:

mdadm --create --verbose /dev/md0 --level=mirror --raid-devices=2 missing /dev/sda1
eppesuig
quelle
Süßer Dank, ich bin wahrscheinlich OCD hier, aber gibt es einen Grund, warum Sie das fehlende vor dem / dev / sda1 hinzugefügt haben, ist die Reihenfolge wichtig?
whoami
Ich denke, die Reihenfolge spielt keine Rolle.
Eppesuig
3
Vorsicht damit! mit --metadata = 1.2 (die neue Standardeinstellung) werden RAID-Metadaten (1 MB) am Anfang eingefügt (wobei der Inhalt dort überschrieben wird). Und der Start des md-Arrays startet 1 MB in / dev / sda1 (/ dev / md0 ist 1 MB kürzer als / dev / sda1). Bei Metadaten = 0.9 (der alten Standardeinstellung) werden die Metadaten (64 KB) am Ende eingefügt und überschreiben die vorhandenen Daten. Verwenden Sie also --metadata = 0.9 und ändern Sie zuerst die Größe des FS. Was auch immer Sie tun, machen Sie vorher ein Backup.
Stéphane Chazelas
3

Das kannst du machen. Sie müssen ein bisschen vorsichtig sein, aber das ist nicht gefährlich¹, wenn Sie sehr vorsichtig sind, nichts falsch zu tippen, und keine Fallstricke im Setup verbleiben.

Ich empfehle dringend, keine Manipulationen an einem Live-System vorzunehmen. Dies ist in einigen Fällen möglich, erfordert jedoch besondere Sorgfalt. Booten Sie von einer Live-CD / Live-USB wie Parted oder SystemRescueCD .

Zuerst müssen Sie die Lautstärke ein wenig verkleinern, um Platz für mdraid-Metadaten (den Superblock) zu schaffen. Es gibt mehrere Metadatenformate . Sie müssen eines verwenden, bei dem die Metadaten am Ende der Festplatte stehen. (In einigen Setups haben Sie möglicherweise genug Platz, um den Superblock am Anfang zu platzieren, aber das ist komplizierter und riskanter, also gehe ich darauf ein.)

Sie müssen sicherstellen, dass die letzten 128 KB des Blockgeräts nicht verwendet werden, um Platz für den Superblock zu schaffen. Sie müssen also das Dateisystem verkleinern /dev/sda1. Wenn es sich um ein ext2 / ext3 / ext4-Dateisystem handelt, ermitteln Sie die aktuelle Dateisystemgröße mit tune2fs /dev/sda1und führen Sie den resize2fs /dev/sda1 NNNBefehl aus , wobei NNN die Größe minus 128 KB ist. Sie können dies stattdessen mit Parted tun . Wenn Sie ein extN-Dateisystem verkleinern müssen, müssen Sie es zuerst aushängen. Ein btrfs-Dateisystem kann live verkleinert werden.

Wenn Sie sichergestellt haben, dass die letzten 128 KB des Blockgeräts frei sind, rufen Sie mdadm --createauf, um ein RAID-1-Volume zu erstellen. Dies berührt keinen Teil des Volumens außer dem Superblock. Anfänglich besteht das Volume aus einer einzigen Komponente: Alle anderen werden als fehlgeschlagen eingestuft. Sie müssen übergeben --level=1(oder gleichwertig -n 1) (dieser Ansatz funktioniert nur für RAID-1) und --metadata=0.9oder --metadata=1.0(das Standard-Superblock-Format 1.2 versetzt den Superblock in die Nähe des Geräteanfangs, wodurch möglicherweise Daten überschrieben werden). Das Argument für --raid-devices( -n) ist die Anzahl der Komponenten (einschließlich der fehlenden) im RAID-Volume.

mdadm --create /dev/md0 --level=1 --raid-devices=2 --metadata=1.0 /dev/sda1 missing

Sie können jetzt das Array aktivieren und weitere Komponenten hinzufügen.

mdadm --add /dev/md0 /dev/sdb1

Ein Hinweis zu Bootloadern: Grub2 versteht Linux RAID-1 und kann von dort booten. Bootloader wie Grub1, die RAID nicht transparent verstehen, lesen von Spiegel-Volumes, aber Ihr System bootet nicht, wenn das Laufwerk, von dem der Bootloader liest, ausfällt. Wenn sich das RAID-Volume auf einer Partition befindet, müssen Sie den Bootsektor von Grub auf beiden Laufwerken installieren.

¹ Stellen Sie sicher, dass Sie Backups haben. "Nicht gefährlich" bedeutet "Sie werden sie wahrscheinlich nicht brauchen", nicht "Ihre Daten spielen".

Reposted und leicht angepasst von So richten Sie die Festplattenspiegelung ein (RAID-1)

Gilles 'SO - hör auf böse zu sein'
quelle