Transferindo o Linux OS de uma unidade para outra com diferentes partições

0

Em primeiro lugar, algumas perguntas relacionadas:

Minha situação é a seguinte:

  1. Crie uma máquina virtual (VBox) para instalar o Linux (teste Debian, kernel 3.14).
  2. Uma partição de inicialização do BTRFS, uma partição raiz do LUKS BTRFS.
  3. Faça modificações intensivas de E / S na VM para velocidade.
  4. Transfira a instalação para uma unidade flash USB.

Minha tentativa inicial foi usar um disco rígido na VM do mesmo tamanho que a unidade flash e apenas dd a coisa toda. Por algum motivo, o UUID da partição de inicialização não pode ser recuperado e, portanto, usado para inicializar na unidade flash.

Se particionar o pendrive manualmente com uma partição de inicialização do EXT4 e uma partição raiz do LUKS BTRFS, a recuperação do UUID funcionará bem ao redor. Em seguida, usei rsync -aEXS --progress para transferir os arquivos de cada partição montada (imagem da VM - > unidade flash). Eu chroot -ed na unidade flash e executei grub-install no dispositivo da unidade flash, junto com update-grub para atualizar os UUIDs do sistema de arquivos. Isso não funcionou. Não foi capaz de detectar / usar corretamente a partição criptografada para obter root. Eu tentei update-initramfs -u sem sucesso.

O que eu perdi ou poderia ter feito melhor para realizar este cenário?

    
por Ioan 24.07.2014 / 14:40

1 resposta

0

As etapas originais estavam corretas, mas por algum motivo, continuei com um initrd corrompido. Resumido abaixo estão todas as etapas que devem resultar em um cenário de trabalho para qualquer pessoa interessada em fazer o mesmo:

  1. Crie uma máquina virtual conforme desejado.
  2. Instale o Linux usando o layout de partição desejado e faça todas as alterações desejadas. Nesse caso, ele consiste em uma partição de inicialização BTRFS e uma partição raiz BTRFS criptografada pelo LUKS. Outros layouts devem funcionar se forem tomados cuidados para atualizar adequadamente as referências durante a transferência.
  3. Inicialize a VM anterior usando um ISO do Linux para que você possa acessar o sistema instalado off-line.
  4. Anexe uma unidade flash USB à VM para a transferência. (Nota: Você pode criar uma imagem dd da unidade instalada e salvar fora da VM, que você pode usar em um sistema Linux normal.)
  5. Prepare as partições da unidade flash.
    1. Opção: dd da imagem original na unidade flash e pule para a etapa 7 e para a etapa 10. (Nota: Parece que, no meu caso, foi necessário recriar as partições por um motivo desconhecido em que blkid foi incapaz de enumerar o UUID da partição BTRFS de inicialização.)
    2. Opção: crie novas partições usando os mesmos UUIDs que os originais. Assumindo /dev/sda1 para inicialização e /dev/sda2 para raiz.
      1. Para partição de inicialização do BTRFS: sudo mkfs.btrfs -f -L BOOT -U <original UUID> /dev/sda1
      2. Para partição raiz do LUKS: sudo cryptsetup --uuid=<original UUID> luksFormat /dev/sda2
      3. Partição raiz do mapa: sudo cryptsetup --allow-discards open --type luks /dev/sda2 flash_luks
      4. Formatar raiz usando BTRFS: sudo mkfs.btrfs -f -L ROOT -U <original UUID> /dev/mapper/flash_luks
    3. Opção: crie novas partições usando novos UUIDs. Repita os mesmos passos da Opção 2, mas remova os argumentos relacionados ao UUID / uuid. Anote os novos UUIDs usando sudo blkid .
  6. Montar partições de imagem originais.
    1. Crie dispositivos de retorno de leitura somente leitura para cada partição: sudo kpartx -ar <flash dd image file> . Assumindo que o kpartx se liga ao loop0.
    2. Crie diretórios para pontos de montagem: sudo mkdir -p /media/orig_boot /media/orig_root
    3. Inicialização: sudo mount -r /dev/mapper/loop0p1 /media/orig_boot
    4. LUKS de raiz: sudo cryptsetup -r open --type luks /dev/mapper/loop0p2 orig_luks
    5. Raiz: sudo mount -r /dev/mapper/orig_luks /media/orig_root
  7. Monte as partições da unidade flash. Assumindo /dev/sda1 para inicialização.
    1. Crie diretórios para pontos de montagem: sudo mkdir -p /media/flash_boot /media/flash_root
    2. Inicialização: sudo mount -t btrfs -o nodiratime,noatime,compress=zlib,discard,ssd,space_cache /dev/sda1 /media/flash_boot
    3. Root (supondo que já tenha sido mapeado usando cryptsetup anteriormente): sudo mount -t btrfs -o relatime,compress=zlib,discard,ssd,space_cache /dev/mapper/flash_luks /media/flash_root
  8. Copiar conteúdo:
    1. Inicialização: sudo rsync -aEXS --progress /media/orig_boot/ /media/flash_boot
    2. Raiz: sudo rsync -aEXS --progress /media/orig_root/ /media/flash_root
  9. Desmontar imagem original.
    1. Raiz: sudo umount /media/orig_root
    2. LUKS de raiz: sudo cryptsetup close orig_luks
    3. Inicialização: sudo umount /media/orig_boot
    4. kpartx: sudo kpartx -d <flash dd image file>
  10. Chroot na unidade flash.
    1. Vincular /sys : sudo mount --bind /sys /media/flash_root/sys
    2. Vincular /dev : sudo mount --bind /dev /media/flash_root/dev
    3. Vincular /dev/pts : sudo mount --bind /dev/pts /media/flash_root/dev/pts
    4. Vincular /proc : sudo mount --bind /proc /media/flash_root/proc
    5. Desmontar inicialização: sudo umount /media/flash_boot
    6. Remontar dentro da raiz: sudo mount -t btrfs -o relatime,compress=zlib,discard,ssd,space_cache /dev/sda1 /media/flash_root/boot
    7. Chroot: sudo chroot /media/flash_root
  11. Atualize /etc/fstab .
    1. Linha de inicialização: UUID=<btrfs boot uuid> /boot btrfs nodiratime,noatime,compress=zlib,discard,ssd,space_cache 0 2
    2. Linha raiz: UUID=<btrfs root uuid> / btrfs nodiratime,noatime,compress=zlib,discard,ssd,space_cache 0 1
  12. Atualizar /etc/crypttab : flash_luks UUID=<luks root uuid> none discard,luks
  13. Instale btrfs-tools (se não estiver instalado): sudo apt-get install btrfs-tools
  14. Atualize o material de inicialização.
    1. Initrd (faz uso do fstab / crypttab para decidir o que é necessário antes de montar e solicitar a senha do LUKS na inicialização): sudo update-initramfs -u -k all (Nota: Você pode recriar todos os initrds usando sudo update-initramfs -c -k all , mas não tente isso para ter certeza.)
    2. Grub (faz uso do fstab para atualizar opções de inicialização do kernel e montar partições corretas): sudo update-grub
    3. Instale o grub no MBR (assumindo /dev/sda ): sudo grub-install --recheck /dev/sda
    4. Saia do chroot: exit
  15. Desmontar tudo.
    1. sudo umount /media/flash_root/boot
    2. sudo umount /media/flash_root/proc
    3. sudo umount /media/flash_root/dev/pts
    4. sudo umount /media/flash_root/dev
    5. sudo umount /media/flash_root/sys
    6. sudo umount /media/flash_root
    7. sudo cryptsetup close flash_luks
por 25.07.2014 / 17:06