Existe uma maneira simples de mover / copiar um volume lógico de um grupo de volumes para outro? (LVM2)
15
Estou reorganizando um monte de discos no meu servidor em casa e me encontro na posição de querer mover um monte de volumes lógicos do LVM para outro grupo de volumes. Existe uma maneira simples de fazer isso? Eu vi menção de um cplvcomando, mas isso parece ser antigo ou não algo que já estava disponível para Linux.
Se você pode organizar para que o volume lógico esteja em um subconjunto separado de volumes físicos do restante do grupo de volumes de origem ( lvconvert sourcevg/sourcelv /dev/pv1 ...pode ajudar), você pode usar vgsplitpara dividir o lv em uma nova vg e vgmergemesclar a nova vg no alvo vg.
Embora o LVM tenha um recurso de espelhamento, você não pode usá-lo (com segurança) para fazer uma cópia entre grupos de volumes, porque as duas pernas do espelho devem viver na mesma vg e a associação não pode ser quebrada .
Você pode copiar um volume LVM para outro da mesma forma como copia qualquer volume para outro: crie um lv de destino do tamanho apropriado e copie o conteúdo com dd if=/dev/sourcevg/sourcelv of=/dev/targetvg/targetlv bs=4M. Se o volume de origem estiver ativo, você poderá alavancar o LVM para fazer uma cópia consistente: primeiro tire um instantâneo do lv de origem lvcreate -se copie o instantâneo.
Gilles brilhante ... O vgsplit / vgmerge provavelmente ficará bem: depois disso, posso usar o pvmove para mover as extensões físicas para o novo disco e remover o volume antigo do VG.
Jkp
Pena, isso não funcionou para mim no final devido a diferentes tamanhos de extensão. Se isso não for um problema para você, sugiro que esse método seja mais fácil.
Jkp
Depois dd(se você não se apressar para jogar fora volumes antigos), não se esqueça de mudar a UUID de novos sistemas de arquivos: tune2fs -U aleatória / dev / targetvg / targetlv
Repito: isso não funciona para dois grupos de volume separados
kissgyorgy
Primeiro vgextendvg1 com um novo pv, depois pvmoveseu lv para o novo pv, vgsplitum vg temporário que você vgmergevg2. Então, pvmovenovamente, lv para vg2 pv original, vgreducevg2 , para ler o pv intermediário. Ou, para evitar a cópia intermediária, você pode simplesmente mesclar vg1 em vg2, pvmovelv1 e vgsplitnovamente vg1 a partir de vg2. Isso deve responder às objeções de @ MattBianco e @kissgyorgy e é equivalente à solução do @Gilles, mas substitui o instantâneo e o nível inferior ddpor umpvmove
marcz
1
A partir do LVM em estiramento Debian (9.0), ou seja 2.02.168-2, é possível fazer uma cópia de um volume lógico entre os grupos de volume utilizando uma combinação de vgmerge, lvconverte vgsplit. Como uma movimentação é uma combinação de uma cópia e uma exclusão, isso também funcionará para uma movimentação.
Como alternativa, você pode usar pvmoveapenas para mover o volume.
Uma sessão de exemplo independente e completa usando dispositivos de loop e
lvconvertsegue.
Resumo: criamos um grupo de volumes vg1com volume lógico lv1, e vg2com lv2, e fazemos uma cópia de lv1in vg2.
dd
(se você não se apressar para jogar fora volumes antigos), não se esqueça de mudar a UUID de novos sistemas de arquivos: tune2fs -U aleatória / dev / targetvg / targetlvO pvmove pode mover dados entre volumes físicos: Guia do administrador do LVM
fonte
vgextend
vg1 com um novo pv, depoispvmove
seu lv para o novo pv,vgsplit
um vg temporário que vocêvgmerge
vg2. Então,pvmove
novamente, lv para vg2 pv original,vgreduce
vg2 , para ler o pv intermediário. Ou, para evitar a cópia intermediária, você pode simplesmente mesclar vg1 em vg2,pvmove
lv1 evgsplit
novamente vg1 a partir de vg2. Isso deve responder às objeções de @ MattBianco e @kissgyorgy e é equivalente à solução do @Gilles, mas substitui o instantâneo e o nível inferiordd
por umpvmove
A partir do LVM em estiramento Debian (9.0), ou seja 2.02.168-2, é possível fazer uma cópia de um volume lógico entre os grupos de volume utilizando uma combinação de
vgmerge
,lvconvert
evgsplit
. Como uma movimentação é uma combinação de uma cópia e uma exclusão, isso também funcionará para uma movimentação.Como alternativa, você pode usar
pvmove
apenas para mover o volume.Uma sessão de exemplo independente e completa usando dispositivos de loop e
lvconvert
segue.Resumo: criamos um grupo de volumes
vg1
com volume lógicolv1
, evg2
comlv2
, e fazemos uma cópia delv1
invg2
.Crie arquivos.
Configure dispositivos de loop em arquivos.
Crie volumes físicos em dispositivos de loop (inicialize dispositivos de loop para uso pelo LVM).
Crie grupos de volumes
vg1
evg2
em/dev/loop1
e/dev/loop2
respectivamente.Crie volumes lógicos
lv1
elv2
emvg1
evg2
respectivamente.Crie sistemas de arquivos ext4 em
lv1
elv2
.Opcionalmente, escreva algo
lv1
para que você possa verificar posteriormente se a cópia foi criada corretamente. Tornarvg1
inativo.Execute o comando mesclar no modo de teste. Isso se funde
lv1
emlv2
.E então de verdade.
Em seguida, crie um par de espelhos RAID 1
lv1
usandolvconvert
. A <> argumento dizlvconvert
para fazer a cópia do espelholv1_copy
no/dev/loop2
.Depois divida o espelho. O novo LV é agora
lv1_copy
.Tornar
vg2
inativo.Então (modo de teste)
Sério
Resultado resultante:
NOTAS:
1) A maioria desses comandos precisará ser executada como root.
2) Se houver alguma duplicação dos nomes dos volumes lógicos nos dois grupos de volumes,
vgmerge
ele se recusará a continuar.3) Na mesclagem:
E na divisão:
fonte