Como clonar o sistema de arquivos btrfs em diferentes mídias, preservando os dados de compartilhamento de snapshots


9

Decidi experimentar os recursos de ataque btrfs. Eu montei um btrfs com

sudo mkfs.btrfs -m raid10 -d raid10 /dev/sda9 /dev/sdb9 /dev/sdc9 /dev/sdd9

Agora eu quero clonar minha partição btrfs existente (que fica no topo do linux-raid). Não é possível usar um simples cp -a, porque há mais de 40 backups baseados em instantâneo (que desejo preservar) e simplesmente sobrecarregava todo o armazenamento que posso poupar várias vezes.

Até agora eu posso ver duas opções:

partclone.btrfs -s /path/to/original/fs -o /dev/sda9 -b

e suponho que eu também precisaria btrfs balance start /dev/sda9

e

do: copie incrementalmente o cp -amáximo que se encaixa no armazenamento e use beduppara desduplicar arquivos e fazer um loop.

Qual é o método preferido (isto é, melhores práticas)? Eu preferiria muito o primeiro; isso levaria muito menos tempo. Ou talvez exista alguma "pegadinha" maligna em qualquer um desses procedimentos (além do fato de que o btrfs é experimental, é claro)


A primeira pergunta está simplesmente fora de questão; Por mais maravilhosa que partclone.btrfsseja a ferramenta , ela obviamente não suporta sistemas de arquivos com vários dispositivos. :-(

Respostas:


7

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 fsuidFS, 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/sdaem /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 btrfspara 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/sdaexceto que qualquer coisa escrita nele terminará /dev/loop0e /dev/sdaserá 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/sdaleitura apenas porque, porque tem o mesmo fsuid que os outros, btrfsainda 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ê.


Ótima resposta, obrigado. Eu testarei isso. Agora estou experimentando o envio / recebimento.
Adam Ryczkowski

@ Stéphane Chazelas Os links gmane estão mortos (provavelmente para sempre). Você poderia ajustar sua resposta?
Jonas Stein

4

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, fazer btrfs balance start. Um dispositivo inicial é um dispositivo somente leitura que pode fazer parte de um sistema de arquivos gravável.


1

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:

  btrfs replace start [-Bfr] <srcdev>|<devid> <targetdev> <path>

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.


1
Nunca use btrfs replace startpara 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 apenas btrfs replacepara a migração final da unidade.
Karmus

0

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 -upara 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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.