Ich habe vor 2 Jahren eine ähnliche Frage gestellt .
In meinem Fall hatte ich jedoch nur vor, ein einzelnes Gerät auf raid0 zu kopieren.
Ich habe schließlich eine Lösung gefunden . Zu der Zeit konnten Sie nicht von raid0 nach raid10 konvertieren, aber es sieht so aus, als ob Sie dies seit Kernel 3.3 jetzt können. Diese Lösung könnte also am Ende für Sie funktionieren.
Ein Problem bei diesem Ansatz ist, dass die fsuid kopiert wird. Das heißt, Sie können den FS und seine Kopie nicht auf demselben Computer bereitstellen. Zu der Zeit gab es kein Werkzeug, um das fsuid
eines FS zu ändern , aber es könnte sich jetzt geändert haben.
Die Idee ist, eine Copy-on-Write-Ebene über dem Originalgerät hinzuzufügen, damit darauf geschrieben werden kann. Änderungen werden jedoch an einer anderen Stelle vorgenommen, die Sie später verwerfen können. Das heißt, Sie benötigen zusätzlichen Speicherplatz (z. B. auf einem externen Laufwerk).
Hängen Sie dann diesen COW'd FS anstelle des Originals ein, fügen Sie die Geräte für die FS-Kopie hinzu und entfernen Sie das COW-Gerät.
Zum Kopieren beim Schreiben können Sie den Geräte-Mapper verwenden.
Für die Einwegkopie im Schreibbereich verwende ich hier ein Loop-Gerät.
Angenommen, Sie möchten klonen /dev/sda
auf /dev/sd[bcde]
:
Erstellen Sie den COW Back Store:
truncate -s 100G /media/STORE/snap-store
losetup /dev/loop0 /media/STORE/snap-store
Hängen Sie nun den Ursprungs-FS aus, wenn er gemountet ist, und modprobe -r btrfs
stellen Sie sicher, dass er nicht stört, und vergessen Sie den Gerätescan.
Dann machen Sie das COW-Gerät:
echo "echo 0 $(blockdev --getsize /dev/sda) snapshot /dev/sda /dev/loop0 N 8 | dmsetup create cowed
Jetzt /dev/mapper/cowed
ist es so, /dev/sda
außer dass alles, was darauf geschrieben wird, endet /dev/loop0
und /dev/sda
unberührt bleibt.
Jetzt können Sie es montieren:
mount /dev/mapper/cowed /mnt
Fügen Sie die anderen Geräte hinzu:
btrfs dev add /dev/sd[bcde] /mnt
Und entferne den alten:
btrfs dev del /dev/mapper/cowed /mnt
Wenn das vorbei ist, möchten Sie vielleicht herunterfahren und den Netzstecker ziehen oder schreibgeschützt machen, /dev/sda
da es die gleiche Fsuid wie die anderen hat und btrfs
möglicherweise immer noch Probleme damit hat.
Wenn ich das richtig verstehe, sollten Sie unter der Annahme, dass Sie das neueste btrfs-prog haben, in der Lage sein, Folgendes zu tun:
btrfs balance start -d convert=raid10 /mnt
In raid10 konvertieren. Theoretisch sollte dies sicherstellen, dass jeder Datenblock auf mindestens 2 Festplatten kopiert wird.
Ich würde dringend empfehlen, dass Sie zuerst Tests mit einem Dummy-BTRFS auf Loop-Geräten durchführen, da alles aus dem Speicher stammt und ich es möglicherweise falsch verstanden habe (siehe zum Beispiel meine erste Antwort vor meiner Bearbeitung).
Beachten Sie, dass btrfs seit Kernel 3.6 das Senden / Empfangen ein bisschen wie in zfs implementiert. Das könnte eine Option für Sie sein.