Como migrar uma instalação LVM criptografada para um novo disco


15

Eu tenho uma instalação de laptop um pouco personalizada. Quero passar diretamente para um SSD, sem precisar reinstalar o Ubuntu, reinstalar todos os aplicativos e fazer todas as outras alterações novamente. O SSD é menor, então não posso fazer isso dd.

A instalação original foi feita com o instalador alternativo do Ubuntu, selecionando a criptografia completa do disco com a opção LVM.

Quais etapas são necessárias e como eu as faço? Espero ter que:

  • configurar as partições do disco, criptografia etc
  • copiar os dados
  • instale o grub e faça-o funcionar com novos valores de UUID etc.

Respostas:


14

Particionamento e cópia de arquivo - durante a execução

Eu fiz isso iniciando com o sistema em execução. Conectei o novo SSD a um adaptador USB SATA e o particionei, configurei o LVM e copiei os arquivos.

# confirm disk size is as expected for sdc
sudo fdisk -l /dev/sdc
# now partition - 500 MB partition as boot, the rest as a single (logical) partition
sudo cfdisk /dev/sdc

Seu disco agora deve se parecer com:

sudo fdisk -l /dev/sdc
Disk /dev/sda: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders, total 234441648 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *          63      979964      489951   83  Linux
/dev/sda2          979965   234441647   116730841+   5  Extended
/dev/sda5          980028   234441647   116730810   82  Linux swap / Solaris

O próximo passo é colocar a criptografia na partição e o LVM na parte superior da criptografia.

sudo cryptsetup -y luksFormat /dev/sdc5
sudo cryptsetup luksOpen /dev/sdc5 crypt
sudo vgcreate crypt-lvm /dev/mapper/crypt
sudo lvcreate -L4G -nswap crypt-lvm
sudo lvcreate -l100%FREE -nroot crypt-lvm

Agora crie os sistemas de arquivos, monte-os e copie seu sistema.

sudo mkfs.ext2 /dev/sdc1
# you do ls /dev/mapper to check the name if different
sudo mkfs.ext4 /dev/mapper/crypt-root
sudo mkdir /mnt/boot
sudo mkdir /mnt/root
sudo mount -t ext2 /dev/sdc1 /mnt/boot
sudo mount -t ext4 /dev/mapper/crypt-root /mnt/root

# rsync files
sudo rsync -a /boot/* /mnt/boot/
sudo rsync -aHAX --devices --specials --delete --one-file-system --exclude proc --exclude run --exclude boot --exclude sys --exclude tmp /* /mnt/root/

Até esse ponto, você pode manter o sistema funcionando e usá-lo. Agora você precisa desligar e inicializar em um CD / USB ativo, para poder colocar o sistema no estado desligado.

Particionamento e cópia de arquivo - live CD / USB

Depois de inicializado, abra um terminal e:

sudo apt-get install lvm2

# mount old hard drive
sudo cryptsetup luksOpen /dev/sda5 sda5_crypt
sudo mkdir /mnt/sdaroot
# you can do ls /dev/mapper to check the name if it is different
sudo mount -t ext4 /dev/mapper/sda5_crypt--root /mnt/sdaroot

# mount new hard drive (over USB)
sudo cryptsetup luksOpen /dev/sdc5 sdc5_crypt
sudo mkdir /mnt/sdcroot
sudo mount -t ext4 /dev/mapper/sdc5_crypt--root /mnt/sdcroot

# final rsync
sudo rsync -aHAX --devices --specials --delete --one-file-system --exclude proc --exclude run --exclude boot --exclude sys --exclude tmp /mnt/sdaroot/* /mnt/sdcroot/

chroot

# prepare chroot
cd /mnt/sdcroot
sudo mkdir boot

# these directories are set up by the system and we need them inside the chroot
sudo mount -t proc proc /mnt/sdcroot/proc
sudo mount -t sysfs sys /mnt/sdcroot/sys
sudo mount -o bind /dev /mnt/sdcroot/dev

# now enter the chroot
sudo chroot /mnt/root/

Alterando UUIDs

Agora somos root dentro do chroot e executamos os seguintes comandos:

# inside chroot, as root
mount -t ext2 /dev/sdc1 /boot
blkid

Agora você verá todos os UUIDs dos vários discos do sistema. Você precisará editar os UUIDs /etc/fstabe /etc/crypttabcorresponder aos valores de/dev/sdc?

Em /etc/fstabvocê precisa usar o UUID para o disco de inicialização - /dev/sdc1se seus discos tiverem a mesma letra que eu.

Em /etc/crypttabque você precisa para usar o UUID para a partição de outro (grande) - /dev/sdc5se os discos têm a mesma letra que me.

initramfs e grub

# now update initramfs for all installed kernels
update-initramfs -u -k all

# install grub and ensure it is up to date
grub-install /dev/sdc      # NOTE sdc NOT sdc1
update-grub

# hit Ctrl-D to exit chroot
sudo umount /mnt/root

Agora desligue, coloque o SSD dentro do seu laptop, cruze os dedos e inicialize.

Links Úteis

Bom guia para o material de criptografia em http://www.debian-administration.org/articles/577

Para instalar o grub em uma partição externa: /programming/247030/how-to-set-up-grub-in-a-cloned-hard-disk

https://help.ubuntu.com/community/UsingUUID


Acabei de descobrir que o rsync exclui sys excluiu alguns diretórios que eu queria incluir. Vou apresentar um comando rsync mais exigente e atualizar esta resposta.
quer

Apenas um lembrete: você prometeu uma atualização para este excelente resposta :-)
guntbert

Na seção chroot, antes da montagem, tive que criar os pontos de montagem: do sudo mount -t proc proc /mnt/sdcroot/proc sudo mount -t sysfs sys /mnt/sdcroot/sys sudo mount -o bind /dev /mnt/sdcroot/devanterior: sudo mkdir /mnt/sdcroot/proc sudo mkdir /mnt/sdcroot/sys--- No meu caso, o comando para criar o initramfs não funcionou, porque as versões do kernel não coincidem e, portanto, o initramfs não pôde encontre o kernel correto em / boot, para que eu não conseguisse fazer tudo funcionar.
Blindfreddy 17/09/2014

Eu segui o seu guia "durante a execução", fiz alguns ajustes (ext4) e até agora funcionou maravilhosamente. Alterei o fstab UUID para inicializar na nova partição. Também alterei os pontos de montagem para root e swap. Há mais alguma coisa além do fstab necessária para mudar? Vou tentar inicializar agora: D
Luka

Ao fazer o luksOpen, certifique-se de atribuir o mesmo rótulo usado no crypttab ou a configuração do grub não funcionará corretamente. Levei uma eternidade para descobrir isso. Outra resposta menciona binding / run / lvm. Não sei se isso é necessário. Para depuração, você pode economizar tempo praticando em um disco USB e tentando inicializá-lo com o kvm.
Dan Stahlke 5/08

3

Tentei comentar, mas não tenho a reputação :-)

De qualquer forma, usei com sucesso o incrível guia de Hamish para migrar para um ssd no meu laptop de trabalho criptografado por luks baseado em linux. Apenas algumas observações:
1. Após criar o swap lv, use também

# mkswap /dev/mapper/crypt-swap 

para inicializar a troca, caso contrário, ela falha durante a inicialização, conforme indicado no comentário acima.
2. O rsynccomando é muito restritivo como é. Quando o usei --exclude run, me deparei com todos os tipos de verdades estranhas, geralmente invisíveis aos erros da Internet. A corrida deve ser incluída . De qualquer forma, o sistema está vazio ao inicializar no modo de manutenção, para que possa permanecer. Além disso, se você excluir tmp, os recém-criados no destino / tmp e / var / tmp não ficarão um pouco complicados - lembre-se de configurá-los você mesmo. Acabei usando algo como

# rsync -aHAX --devices --specials --delete --one-file-system --exclude proc --exclude boot /mnt/sdaroot/* /mnt/sdcroot/

No geral - um ótimo guia, mostra a visão geral do processo com precisão! Ensina a pescar, por assim dizer!


0

[Não foi possível colocar um comentário, embora esta postagem pertença a um comentário e não a uma resposta]

Usando esse método, você também pode mover uma instalação lvm criptografada ** não ** existente para uma instalação lvm criptografada no novo disco; você só precisa das etapas adicionais (para instalar o cryptsetup enquanto chrooted no disco de destino), conforme mencionado em http://blog.andreas-haerter.com/2011/06/18/ubuntu-full-disk-encryption-lvm -luks , especificamente:

apt-get install lvm2 cryptsetup

O comando acima também instala o lvm2 no disco de destino, embora isso seja desnecessário, seria útil se você estivesse movendo um sistema não-lvm para um sistema lvm no seu SSD, usando um Live CD / DVD. Observe que você também precisará copiar o /etc/resolve.conf para o chroot para poder executar o apt-get install com êxito: ele é mencionado na URL mencionada acima, fragmento de código:sudo cp /etc/resolv.conf /mnt/sdcroot/etc/resolv.conf

Além disso, é mais fácil fazer um cp (usando uma instalação diferente (não da instalação de origem), por exemplo, um CD / DVD ao vivo) em vez de rsync para a partição /, conforme descrito em Como mover o Ubuntu para um SSD

Você também deve criar swap usando mkswapna sua /dev/mapper/<swap-name-here>partição.

Também deve ativar o suporte ao TRIM ao mesmo tempo, conforme mencionado em http://www.webupd8.org/2013/01/enable-trim-on-ssd-solid-state-drives.html

AVISO: O texto adicional abaixo não é para aqueles que usam MBR, aos quais este tópico / tópico parece pertencer. Achei isso útil de qualquer maneira, por isso estou postando para o benefício daqueles que podem adaptar as instruções neste tópico / tópico ao disco GPT.

E para aqueles que usam GPT em vez de MBR (usando parted / gparted e gdisk em vez de fdisk), aprendi da maneira mais difícil que sua partição / boot (que não é criptografada) não deve ser numerada após o dispositivo luks na ordem GPT. Como eu criei uma partição ESP depois de criar as partições do dispositivo / boot e luks usando o gparted, tive que classificar os números da partição para que o / boot ainda fosse numerado menos do que o dispositivo luks.

Como um aparte e não relacionado a este post, estritamente falando, aqueles que usam GPT e UEFI com rEFInd, rEFInd talvez tenham problemas em apresentar uma lista de partições para inicializar se você tiver vários ESPs em seu sistema, eu tenho um por disco, então, em vez disso de usar rEFInd, estou usando o grub, que funciona bem.


0

Antes da seção initramfs e grub, você pode precisar:

vgscan
vgchange -a y

0

Um pouco tarde, mas você precisa atualizar o arquivo /etc/initramfs-tools/conf.d/resume para refletir a modificação de troca. Sem essa modificação, você interromperá a função de hibernação.

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.