Eu perguntei a uma pergunta semelhante há dois anos.
No entanto, no meu caso, eu estava planejando apenas copiar um único dispositivo para o raid0.
Eu finalmente encontrei 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. Então, essa solução pode funcionar para você no final.
Um problema com essa abordagem é que 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
de um FS, mas pode ter mudado agora.
A idéia é adicionar uma camada de cópia na escrita sobre o dispositivo original para que ele possa ser gravado, mas qualquer modificação é feita em algum outro lugar que você possa descartar mais tarde. Isso significa que você precisa de espaço de armazenamento adicional (por exemplo, em uma unidade externa).
Em seguida, monte o COW'd FS em vez do original, adicione os dispositivos para a cópia do FS e remova o dispositivo da COW.
Para copiar-em-escrever, 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ê queira clonar /dev/sda
em /dev/sd[bcde]
:
Crie o armazenamento de volta da COW:
truncate -s 100G /media/STORE/snap-store
losetup /dev/loop0 /media/STORE/snap-store
Agora, desmonte o FS de origem, se montado, e modprobe -r btrfs
, para garantir que ele 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 em /dev/loop0
e /dev/sda
não será afetada.
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 querer desligar e desconectar ou fazer /dev/sda
somente como porque ele tem o mesmo fsuid que os outros, btrfs
ainda pode atrapalhar com isso.
Agora, se eu entendi corretamente, supondo que você tenha o btrfs-prog recente, você deve ser capaz de:
btrfs balance start -d convert=raid10 /mnt
Para converter em raid10. Em teoria, isso deve garantir que cada pedaço de dados seja copiado em pelo menos dois discos.
Eu recomendo strongmente que você faça testes em um btrfs fictício em dispositivos de loop primeiro, pois tudo isso é da memória e eu poderia ter errado (veja, por exemplo, minha resposta inicial antes da minha edição).
Note que, desde o kernel 3.6, o btrfs implementa o send / receive um pouco como no zfs. Isso pode ser uma opção para você.