Eu fiz uma pergunta semelhante há 2 anos.
No entanto, no meu caso, eu estava planejando apenas copiar um único dispositivo no raid0.
Acabei encontrando uma solução . Na época, você não podia converter de raid0 para raid10, mas parece que desde o kernel 3.3, você pode agora. Para que a solução funcione para você no final.
Um problema com essa abordagem é que ela copia o fsuid. O que significa que você não pode montar o FS e sua cópia na mesma máquina. Na época, não havia nenhuma ferramenta para alterar o fsuid
FS, mas poderia ter mudado agora.
A idéia é adicionar uma camada de copiar na gravação na parte superior do dispositivo original para que possa ser gravada, mas qualquer modificação é feita em outro lugar que você possa descartar posteriormente. Isso significa que você precisa de espaço de armazenamento adicional (por exemplo, em uma unidade externa).
Em seguida, monte o FS COW'd em vez do original, adicione os dispositivos para a cópia FS e remova o dispositivo do COW.
Para copiar na gravação, você pode usar o mapeador de dispositivos.
Para a cópia descartável na área de gravação, aqui eu uso um dispositivo de loop.
Digamos que você deseja clonar /dev/sda
em /dev/sd[bcde]
:
Crie a loja traseira da vaca:
truncate -s 100G /media/STORE/snap-store
losetup /dev/loop0 /media/STORE/snap-store
Agora desmonte o FS de origem, se montado, modprobe -r btrfs
para garantir que não interfira e faça com que ele esqueça a verificação do dispositivo.
Em seguida, faça o dispositivo COW'd:
echo "echo 0 $(blockdev --getsize /dev/sda) snapshot /dev/sda /dev/loop0 N 8 | dmsetup create cowed
Agora /dev/mapper/cowed
é como /dev/sda
exceto que qualquer coisa escrita nele terminará /dev/loop0
e /dev/sda
será intocada.
Agora, você pode montá-lo:
mount /dev/mapper/cowed /mnt
Adicione os outros dispositivos:
btrfs dev add /dev/sd[bcde] /mnt
E remova o antigo:
btrfs dev del /dev/mapper/cowed /mnt
Quando isso acabar, você pode desligar e desconectar ou fazer a /dev/sda
leitura apenas porque, porque tem o mesmo fsuid que os outros, btrfs
ainda pode atrapalhar.
Agora, se eu entendi corretamente, supondo que você tenha o btrfs-prog recente, você deve conseguir:
btrfs balance start -d convert=raid10 /mnt
Para converter para raid10. Em teoria, isso deve garantir que cada pedaço de dados seja copiado em pelo menos 2 discos.
Eu recomendo fortemente que você faça testes em um btrfs fictício em dispositivos de loop primeiro, como tudo que é da memória e eu posso ter entendido errado (veja, por exemplo, minha resposta inicial antes da minha edição).
Note que desde o kernel 3.6, o btrfs implementa o envio / recebimento um pouco como no zfs. Essa pode ser uma opção para você.