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.
Stephanes Idee kann mit den in btrfs integrierten Tools umgesetzt werden (deshalb ist es cool): Machen Sie das alte btrfs zu einem Seed-Gerät über
btrfstune -S 1 /dev/device
, fügen Sie Geräte hinzu, entfernen Sie das Seed-Gerät, tun Sie esbtrfs balance start
. Ein Seed-Gerät ist ein schreibgeschütztes Gerät, das Teil eines schreibgeschützten Dateisystems sein kann.quelle
Ich habe versucht, dem Vorschlag von @ ignis zu folgen, Seeding zu verwenden, hatte aber Probleme damit. Das System hat beim Versuch, das Seed-Gerät zu entfernen, einen Fehler ausgegeben, den ich nicht überwinden konnte. Dann fand ich heraus, dass es (jetzt - btrfs-progs v3.19-64-g19a806f, vielleicht nicht früher) den Befehl gibt:
Das machte das Klonen meines vorhandenen btrfs-Dateisystems (das sich in einem logischen LVM-Volume befand) auf eine neue Partition zu einem Kinderspiel. Beachten Sie, dass es ab Mai 2015 nicht für RAID5 / 6-Profile funktioniert. Weitere Informationen finden Sie auf der Manpage.
quelle
btrfs replace start
für Backup-Zwecke verwenden !! Es beschädigt Ihren Gerätebaum und macht das Laufwerk unmontierbar! Es war mir unmöglich, die Fehler zu beheben, daher habe ich mit dem dd -tool eine Image-Kopie von einem anderen Blockgerät wiederhergestellt. Nurbtrfs replace
für die Migration des endgültigen Laufwerks verwenden.Option 1 - Datenkopie, dann UUID ändern
Stellen Sie sicher, dass die Quellpartition nicht bereitgestellt ist und nicht automatisch bereitgestellt wird.
Verwenden Sie entweder
dd
(langsam, dumm) oderpartclone.btrfs -b -s /dev/src -o /dev/target
Verwenden Sie
btrfstune -u
diese Option, um die UUID nach dem Kopieren und vor dem Mounten zu ändern.Datenverlust - Warnung : Do NOT versuchen, (auto) montieren entweder Original oder Kopie , bis die UUID hat sich geändert
Option 2 -
btrfs-clone
Ich habe es nicht persönlich versucht
btrfs-clone
, aber es gibt vor, ein vorhandenes BTRFS-Dateisystem in ein neues zu klonen und jedes Subvolume der Reihe nach zu klonen.quelle