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ê.
A ideia de Stephane pode ser feita através das ferramentas internas do btrfs (é por isso que é legal): transformar o antigo btrfs em um dispositivo de semente via
btrfstune -S 1 /dev/device
, adicionar dispositivos, remover o dispositivo de semente, fazerbtrfs balance start
. Um dispositivo inicial é um dispositivo somente leitura que pode fazer parte de um sistema de arquivos gravável.fonte
Tentei seguir a sugestão de @ ignis de usar a semeadura, mas tive problemas com ela; o sistema emitiu um erro ao tentar remover o dispositivo de propagação e não pude superar isso. Então eu descobri que existe (agora - btrfs-progs v3.19-64-g19a806f, talvez não antes) o comando:
o que tornou a clonagem do meu sistema de arquivos btrfs existente (que estava em um volume lógico LVM) em uma nova partição um doddle. Observe que, em maio de 2015, ele não funciona para perfis RAID5 / 6 - consulte a página de manual para obter informações completas.
fonte
btrfs replace start
para fins de backup! Ele corrompe a árvore do seu dispositivo e torna a unidade desmontável! Como era impossível me recuperar dos erros, restaurei uma cópia da imagem de outro dispositivo de bloco com o dd -tool. Use apenasbtrfs replace
para a migração final da unidade.Opção 1 - Cópia de dados e altere UUID
Verifique se a partição de origem está desmontada e não será montada automaticamente.
Use
dd
(lento, burro) oupartclone.btrfs -b -s /dev/src -o /dev/target
Use
btrfstune -u
para alterar o UUID após a cópia e antes da montagem.Aviso de perda de dados : Do NOT tentar (auto) montar quer original ou cópia até que o UUID mudou
Opção 2 -
btrfs-clone
Eu não tentei pessoalmente
btrfs-clone
, mas ele pretende clonar um sistema de arquivos BTRFS existente para um novo, clonando cada subvolume em ordem.fonte