Estou executando o Arch Linux. Desejo clonar um volume lógico criptografado de 2 discos em um único grupo de volumes (LUKS no LVM). Há uma ligeira captura. Eu quero trocar algumas das unidades.
Eu tenho:
- VG1: LV: PV(OldDrive1) + PV(OldDrive2)
sda (OldDrive1)
-vg1-luks_encrypted_lv
sdb (OldDrive2)
-vg1-luks_encrypted_lv
Eu tenho duas outras unidades (NewDrive1 e NewDrive2). Eu quero criar um VG2 que é um clone do VG1. No entanto, eu quero trocar algumas unidades ao redor. Então eu quero:
- VG1: LV: PV(OldDrive1) + PV(NewDrive1)
- VG2: LV: PV(OldDrive2) + PV(NewDrive2)
sda (OldDrive1)
-vg1-luks_encrypted_lv
sdb (OldDrive2)
-vg2-cloned_luks_encrypted_lv
sdc (NewDrive1)
-vg1-luks_encrypted_lv
sdd (NewDrive2)
-vg2-cloned_luks_encrypted_lv
Meu plano atual é clonar cada unidade. Eu estava pensando anteriormente em usar dd, mas depois de alguma leitura talvez eu precise usar pvmove?:
- OldDrive1 -> NewDrive1
- OldDrive2 -> NewDrive2
Eu poderia então trocar as unidades físicas no LVM, porque as unidades são clones bit a bit? Estou preocupado que estou perdendo alguma coisa. Como eu incorporaria as unidades de notícias no LV? Gostaria de receber alguns conselhos, porque não quero perder nenhum dado. Obrigado.
Editar:
A resposta do @telcoM funcionou muito bem. Muito obrigado. Usei o método online. Se alguém quiser fazer algo semelhante, há poucas coisas dignas de nota.
Na Etapa 7 :
O lvconvert -m
padrão agora é raid1, não o próprio sistema de espelhos do lvm. Leia man lvconvert
para mais detalhes. Como eu queria dividir imediatamente o espelho, era muito mais fácil usar apenas o espelho legado do lvm com o mirrorlog armazenado na memória:
lvconvert --type mirror -m +1 --mirrorlog core vg1/luks_encrypted_lv OldDrive2 NewDrive2
Basta lembrar que --mirrorlog core
coloca o mirrorlog na memória. Portanto, não desligue seu computador antes de executar lvconvert --splitmirrors
ou você perderá seu arquivo mirrorlog.
Na Etapa 9 :
Antes disso, vgsplit
você precisa desmontar o sistema de arquivos e desativar o volume lógico .
Na Etapa 11 :
A maioria das pessoas provavelmente percebe isso, mas você precisa atribuir um UUID $uuid
antes de executar o cryptsetup luksUUID --uuid $(uuid) /dev/mapper/VG2-LVx
. Execute algo como uuid=$(uuidgen)
primeiro.
"Necessidade" é uma palavra forte - há mais de uma maneira de alcançar o que você deseja.
Com
pvmove
, você pode fazer isso on-line, enquanto o LV criptografado está em uso.1.)
pvcreate
Nova Unidade12.)
vgextend VG1 NewDrive1
3.)
pvmove OldDrive2
(significa efetivamente: "mova qualquer extensão alocada ao LVM do OldDrive2 para qualquer outra unidade no VG1 para que o OldDrive2 fique completamente não alocado, se possível." Isso levará algum tempo: talvez você queira executá-lo em umscreen
/tmux
session com uma-v
opção erbose.)4.) Use
pvs
oupvdisplay OldDrive2
para certificar-se de que OldDrive2 agora está completamente não alocado.5.)
pvcreate NewDrive2
6.)
vgextend VG1 NewDrive2
7.) para cada LV em VG1:
lvconvert -m +1 VG1/LVx OldDrive2 NewDrive2
("criar um espelho de VG1/LVx, alocando espaço para o espelho de OldDrive2 e NewDrive2"). Se não houver espaço para o log de espelho no disco, talvez seja necessário usar a--mirrorlog core
opção aqui.8.) uma vez que os espelhos estejam sincronizados, para cada LV no VG1:
lvconvert --splitmirrors 1 --name LVcopyx VG1/LVx OldDrive2 NewDrive2
("Divida um espelho do LVx localizado em OldDrive2 e/ou NewDrive2 e nomeie-o como "LVcopyx" para evitar um conflito de nomes.)9.)
vgsplit VG1 VG2 OldDrive2 NewDrive2
("Divida OldDrive2 e NewDrive2 do VG1, levando seus LVs com eles, e nomeie o novo VG resultante como VG2.")10.) para cada LV no VG2:
lvrename VG2 LVcopyx LVx
para restaurar o(s) nome(s) do LV original, agora que as cópias foram separadas em seu próprio VG e não há mais conflito. Agora você tem um novo VG2 que contém cópias dos LVs do VG1 como eles existiam no ponto de divisão dos espelhos LV na etapa 8.).11.) Antes de realmente usar o VG2, você precisará
vgchange -ay VG2
e, em seguida,cryptsetup luksUUID --uuid $(uuid) /dev/mapper/VG2-LVx
dar a ele um UUID exclusivo distinto de sua contraparte VG1, e depois de desbloquear a criptografia, você também deve fornecer ao sistema de arquivos dentro dele um novo UUID também. Para BtrFS, isso é vital (btrfstune -u /dev/mapper/VG2-LVx-crypt
); para outros sistemas de arquivos, isso é essencialmente apenas uma conveniência para que a montagem baseada em UUID funcione.Se você pode ter o VG off-line e pode desconectar/reconectar discos, você também pode:
1.) Desmonte
cryptsetup luksClose
e desative o VG (vgchange -an VG1
). Para evitar a ativação automática indesejada na inicialização ou no momento do hot-plug, marque-o também como exportado (vgexport VG1
).2.) Clone as unidades conforme planejado.
3.) Desconecte as unidades para que o sistema veja apenas OldDrive2 e NewDrive2. Se o seu hardware permite fazer isso a quente, use
echo 1 > /sys/block/<device name>/device/delete
para uma desconexão a quente graciosa.4.) Inicialize o sistema ou execute
vgscan
após um hot-unplug gracioso. Em seguida, importe e renomeie o VG:vgimport VG1
, depoisvgrename VG1 VG2
. Usevgchange --uuid VG2
para dar ao novo VG2 uma nova identidade distinta do antigo VG1 e usepvchange --uuid OldDrive2
epvchange --uuid NewDrive2
para fazer o mesmo no nível PV. Após importar e renomear, lembre-se de que você precisará ativar o VG antes de poder montá-lo ou fazer qualquer outra operação nele:vgchange -ay VG2
.5.) Depois de ativar o VG, use
cryptsetup luksUUID --uuid=$(uuid) /dev/mapper/VG2-LVx
para dar ao contêiner LUKS uma nova identidade distinta e, depois de desbloquear a criptografia, use uma ferramenta específica do sistema de arquivos para fazer o mesmo no nível do sistema de arquivos também. ( isso é especialmente importante para BtrFSbtrfstune -u /dev/mapper/VG2-LVx-crypt
:)6.) Agora você pode conectar OldDrive1 e NewDrive1 novamente (use
vgscan
se você fizer hot-plug) evgimport VG1
"novamente" e ativá-lo comvgchange -ay VG1
. Agora você tem dois VGs totalmente separados que você pode usar como achar melhor.se você conseguir fechar o contêiner LUKS durante o dd clonig, as etapas podem ser as seguintes:
se você planeja usar ambas as cópias na mesma máquina, você também terá que alterar o UUID do contêiner LUKS e o sistema de arquivos que o contém! obrigado a @telcoM por apontar isso!