Ho fatto una domanda simile 2 anni fa.
Comunque nel mio caso, stavo solo pianificando di copiare un singolo dispositivo su raid0.
Alla fine ho trovato una soluzione . Al momento non è possibile convertire da raid0 a raid10, ma sembra che dal kernel 3.3, ora puoi farlo. Quindi quella soluzione potrebbe funzionare per te alla fine.
Un problema con questo approccio è che copia il fsuid. Ciò significa che non è possibile montare sia la FS che la sua copia sulla stessa macchina. Al momento, non esisteva uno strumento per modificare il valore fsuid
di un FS, ma ora potrebbe essere cambiato.
L'idea è quella di aggiungere un livello di copia su scrittura sopra il dispositivo originale in modo che possa essere scritto, ma qualsiasi modifica viene apportata da qualche altra parte che è possibile eliminare in seguito. Ciò significa che è necessario ulteriore spazio di archiviazione (ad esempio su un'unità esterna).
Quindi montare quel FS COW anziché l'originale, aggiungere i dispositivi per la copia FS e rimuovere il dispositivo COW.
Per la copia su scrittura, è possibile utilizzare il mapper del dispositivo.
Per la copia usa e getta nell'area di scrittura, qui uso un dispositivo loop.
Diciamo che vuoi clonare /dev/sda
su /dev/sd[bcde]
:
Creare il back store COW:
truncate -s 100G /media/STORE/snap-store
losetup /dev/loop0 /media/STORE/snap-store
Ora smonta l'origine FS se montato e modprobe -r btrfs
per assicurarti che non interferisca e dimentica la scansione del dispositivo.
Quindi crea il dispositivo COW:
echo "echo 0 $(blockdev --getsize /dev/sda) snapshot /dev/sda /dev/loop0 N 8 | dmsetup create cowed
Ora /dev/mapper/cowed
è come /dev/sda
se non fosse tutto ciò che vi è scritto finirà /dev/loop0
e /dev/sda
non sarà toccato.
Ora puoi montarlo:
mount /dev/mapper/cowed /mnt
Aggiungi gli altri dispositivi:
btrfs dev add /dev/sd[bcde] /mnt
E rimuovi quello vecchio:
btrfs dev del /dev/mapper/cowed /mnt
Quando è finito, potresti voler spegnere e scollegare o effettuare di /dev/sda
sola lettura perché, poiché ha lo stesso liquido degli altri, btrfs
potrebbe comunque rovinarlo.
Ora, se ho capito bene, supponendo che tu abbia recente btrfs-prog, dovresti essere in grado di fare un:
btrfs balance start -d convert=raid10 /mnt
Per convertire in raid10. In teoria, ciò dovrebbe assicurarsi che ogni blocco di dati sia copiato su almeno 2 dischi.
Consiglio vivamente di fare dei test su un btrfs fittizio su dispositivi loop prima come tutto ciò che viene dalla memoria e potrei essermi sbagliato (vedi ad esempio la mia risposta iniziale prima della mia modifica).
Si noti che dal kernel 3.6, btrfs implementa un comando di invio / ricezione un po 'come in zfs. Potrebbe essere un'opzione per te.