
É possível mover um volume lógico de um grupo de volumes para outro como um todo?
É possível criar um lv (mais ou menos) correspondente e copiar os dados, mas existe alguma maneira de fazer isso apenas com ferramentas LVM?
Caso contrário, existe uma razão teórica ou uma limitação técnica (tamanhos de extensão)?
Responder1
Um grupo de volumes consiste em volumes físicos inteiros. Um volume físico consiste em muitas extensões (uma extensão normalmente tem 4 MB); cada extensão pode pertencer a um volume lógico diferente. Para transferir um volume lógico para um grupo diferente, você não pode simplesmente transferir extensões, pois isso pode dividir o volume físico entre o VG de origem e o VG de destino.
O que você pode fazer é transferir um ou mais PVs do VG de origem para o VG de destino, com ovgsplit
comando. Você pode especificar quais PVs deseja transferir ou qual LV (mas apenas um de cada vez). Se você especificar um LV, ele e os outros LVs no VG de origem deverão estar em PVs separados. O VG de destino será criado se não existir nenhum VG com o nome especificado.
vgsplit -n source_group/volume_to_copy source_group target_group
vgsplit source_group target_group /dev/sdy99 /dev/sdz99
Você pode precisar usarpvmove
primeiro, organize os volumes lógicos que você deseja mover para PVs separados.
Se você pretende manter os limites físicos do VG e mover os dados, não há nenhuma ferramenta integrada, mas você podefaça um espelho e depois remova o original.
Responder2
A partir do LVM no trecho Debian (9.0), ou seja, 2.02.168-2, é possível fazer uma cópia de um volume lógico entre grupos de volumes usando uma combinação de vgmerge
, lvconvert
, e vgsplit
. Como uma movimentação é uma combinação de copiar e excluir, isso também funcionará para uma movimentação.
Alternativamente, você pode usar pvmove
para mover as extensões físicas. CitarU&L: Finalidade das Extensões Físicas:
Uma única extensão física é a menor unidade de espaço em disco que pode ser gerenciada individualmente pelo LVM.
Uma sessão de exemplo completa e independente usando dispositivos de loop e
lvconvert
a seguir.
Resumo: criamos um grupo de volumes vg1
com volume lógico lv1
e vg2
com lv2
e fazemos uma cópia de lv1
in vg2
.
Crie arquivos.
truncate pv1 --size 100MB
truncate pv2 --size 100MB
Configure dispositivos de loop em arquivos.
losetup /dev/loop1 pv1
losetup /dev/loop2 pv2
Crie volumes físicos em dispositivos de loop (inicialize dispositivos de loop para uso pelo LVM).
pvcreate /dev/loop1 /dev/loop2
Crie grupos de volumes vg1 e vg2 em /dev/loop1 e /dev/loop2 respectivamente.
vgcreate vg1 /dev/loop1
vgcreate vg2 /dev/loop2
Crie volumes lógicos lv1 e lv2 em vg1 e vg2 respectivamente.
lvcreate -L 10M -n lv1 vg1
lvcreate -L 10M -n lv2 vg2
Crie sistemas de arquivos ext4 em lv1 e lv2.
mkfs.ext4 -j /dev/vg1/lv1
mkfs.ext4 -j /dev/vg2/lv2
Opcionalmente, escreva algo em lv1 para poder verificar posteriormente se a cópia foi criada corretamente. Torne vg1 inativo.
vgchange -a n vg1
Execute o comando merge no modo de teste. Isso mescla vg1 em vg2.
# vgmerge -A y -l -t -v <<destination-vg>> <<source-vg>>
vgmerge -A y -l -t -v vg2 vg1
E então de verdade.
vgmerge -A y -l -v vg2 vg1
Em seguida, crie um par de espelhos RAID 1 lv1
usando lvconvert
. O
dest-pv
argumento diz lvconvert
para fazer a cópia espelhada em /dev/loop2
.
# lvconvert --type raid1 --mirrors 1 <<source-lv>> <<dest-pv>>
lvconvert --type raid1 --mirrors 1 /dev/vg2/lv1 /dev/loop2
Em seguida, divida o espelho. O novo LV é agora lv1_copy
.
# lvconvert --splitmirrors 1 --name <<source-lv-copy>> <<source-lv>>
lvconvert --splitmirrors 1 --name lv1_copy /dev/vg2/lv1
Tornar vg2/lv1
inativo.
lvchange -a n /dev/vg2/lv1
Então (modo de teste)
# vgsplit -t -v <<source-vg>> <<destination-vg>> <<moved-to-pv>>
vgsplit -t -v /dev/vg2 /dev/vg1 /dev/loop1
Sério
vgsplit -v /dev/vg2 /dev/vg1 /dev/loop1
Saída resultante:
lvs
[...]
lv1 vg1 -wi-a----- 12.00m
lv1_copy vg2 -wi-a----- 12.00m
lv2 vg2 -wi-a----- 12.00m
NOTAS:
A maioria desses comandos precisará ser executada como root. A
#
frente de alguns dos comandos indica que é um comentário. Não representa o prompt raiz.Se houver alguma duplicação dos nomes dos volumes lógicos nos dois grupos de volumes,
vgmerge
recusar-se-á a prosseguir.Na mesclagem, os volumes lógicos
vg1
devem estar inativos. E na divisão, os volumes lógicosvg2
pertencentesvg1
devem estar inativos. No nosso caso, isso élv1
.
Responder3
Vou oferecer o meu:
umount /somedir/
lvdisplay /dev/vgsource/lv0 --units b
lvcreate -L 12345b -n lv0 vgtarget
dd if=/dev/vgsource/lv0 of=/dev/vgtarget/lv0 bs=1024K conv=noerror,sync status=progress
mount /dev/vgtarget/lv0 /somedir/
se tudo estiver bem, remova a fonte
lvremove vgsource/lv0
Responder4
Digamos que você tenha um volume chamados0
$ pvs -o+pv_used
PV VG Fmt Attr PSize PFree Used
/dev/sda2 cl lvm2 a-- <118.24g 0 <118.24g
/dev/sdb s0 lvm2 a-- <223.57g 0 <223.57g
/dev/sdc1 s0 lvm2 a-- <465.76g 0 <465.76g
/dev/sdd1 lvm2 --- 931.51g 931.51g 0
Quero mudar /dev/sdb
para /dev/sdc1
um novo disco psíquico/dev/sdd1
Crie um volume físico em sdd1
$ pvcreate /dev/sdd1
Agora você pode estender seu grupo de volumes s0
com o novo disco
$ vgextend s0 /dev/sdd1
Agora você pode começar a mover dados
$ pvmove /dev/sdb /dev/sdd1
Espere para terminar
/dev/sdb: Moved: 10.0%
...
/dev/sdb: Moved: 50.0%
...
/dev/sdb: Moved: 100.0%
Verificar
$ pvs -o+pv_used
PV VG Fmt Attr PSize PFree Used
/dev/sda2 cl lvm2 a-- <118.24g 0 <118.24g
/dev/sdb lvm2 --- 223.57g 223.57g 0
/dev/sdc1 s0 lvm2 a-- <465.76g 0 <465.76g
/dev/sdd1 s0 lvm2 a-- <931.51g 707.94g <223.57g
Agora você pode remover /dev/sdb
do s0
grupo
$ vgreduce s0 /dev/sdb
Siga os mesmos passos para/dev/sdc1