Moving an existing install into (or out of) a virtual machine (Português)

Status de tradução:
Esse artigo é uma tradução de
Moving an existing install into (or out of) a virtual machine
. Data da última tradução: 2022-08-30. Você pode ajudar a sincronizar a tradução, se houver
alterações
na versão em inglês.
Artigos relacionados
VirtualBox
VMware
QEMU
Migrar instalação para novo hardware
Este artigo descreve como transferir sua instalação atual do Arch Linux para dentro ou fora de um ambiente virtual (por exemplo, QEMU, VirtualBox, VMware). Uma máquina virtual ("VM", abreviadamente) usa hardware diferente, que precisa ser endereçado regenerando a imagem initramfs e possivelmente ajustando o fstab - especialmente se for um
SSD
.
Movendo para fora da uma VM
Mover para fora de um ambiente virtual é relativamente fácil.
Configure uma pasta compartilhada
A configuração de uma pasta compartilhada entre a máquina virtual convidada e o host depende do hipervisor usado. Por favor, refira-se à sua página wiki ou manual específico.
Se você ainda não possui uma partição ext4, veja
Sistemas de arquivos
.
Se você estiver no Windows, instale
Ext2Fsd
para poder montar volumes ext.
Transfira o sistema
Na máquina virtual, abra um terminal e
transfira
o sistema:
# rsync -aAXHSv /* /caminho/para/pasta/compartilhada --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found,/home/*/.gvfs}
Isso também pode ser feito com o
disco de inicialização do clonezilla
ou
dd
de um live-cd Linux aleatório. Se você estiver usando o Virtualbox, precisará conectar a unidade de destino através de USB (ou cabo SATA para USB), caso contrário, use uma unidade USB externa para salvar a imagem do disco (com dd ou clonezilla).
Entre em chroot e reinstale o gerenciador de boot
Inicialize uma distribuição GNU/Linux "live", monte a partição root e faça
chroot
nela.
Reinstale seu gerenciador de boot:
Syslinux
,
GRUB
ou
systemd-boot
. Não se esqueça de atualizar o arquivo de configuração:
syslinux.cfg
para o Syslinux,
grub.cfg
para o Grub ou as entradas de inicialização do systemd-boot localizadas em
/boot/loader/entries/
.
Nota
Você pode inicializar diretamente sem reinstalar o gerenciador de boot. Tente isso antes de usar um chroot. Dessa forma, você pode (possivelmente) reinstalar o gerenciador de boot e regenerar ramfs de um ambiente gráfico.
Ajuste o fstab
Como toda a sua árvore raiz foi transferida para uma única partição, edite o arquivo
fstab
para refletir a(s) partição(ões) correta(s).
Verifique com o comando
blkid
, já que
lsblk
não é muito útil dentro de um chroot.
Regenere a imagem initramfs
Como o hardware mudou, enquanto você ainda está no chroot, gere novamente a imagem do initramfs:
# mkinitcpio -p linux
E é basicamente isso.
É provável que você precise configurar a rede, já que a máquina virtual provavelmente estava usando as configurações de rede do sistema operacional do host. Veja
Configuração de rede
.
Movendo para dentro de uma VM
Mover para
dentro
de um ambiente virtual exige um pouco mais de esforço.
Crie o contêiner
Isso criará uma imagem bruta de 10 GB:
# dd if=/dev/zero of=/media/Backup/backup.img bs=1024 count=10482381
Dica
Usar
fallocate
é muito mais rápido:
# fallocate -l 10GiB -o 1024 /media/Backup/backup.img
Se você quiser criar um com o tamanho exato de sua partição raiz, execute
fdisk -l
e use o valor da coluna
Blocos
para o parâmetro
count=
. Note que você irá transferir toda a sua árvore raiz, de modo que inclua as pastas
/boot
e
/home
. Se você tiver partições separadas para essas, precisará considerá-las ao criar o contêiner.
Particione o arquivo
/media/Backup/backup.img
executando sua
ferramenta de particionamento
favorita. Crie uma tabela de partição nela (por exemplo,
msdos
), escolha o
esquema de partição
e crie as partições.
Agora carregue o módulo necessário e monte-o como um dispositivo de loopback, em
/dev/loop5
(por exemplo):
# modprobe loop
# losetup --partscan /dev/loop5 /media/Backup/backup.img
Em seguida, crie um
sistema de arquivos
nas partições, que aparecerá como
/dev/loop5p1
,
/dev/loop5p2
, etc.
Transfira o sistema
Monte o dispositivo de loopback e
transfira
o sistema:
Nota
Se o contêiner foi salvo em algum lugar diferente de
/mnt
ou
/media
, não se esqueça de adicioná-lo à lista de exclusões.
# mkdir /mnt/Virtual
# mount /dev/loop5p1 /mnt/Virtual
# rsync -aAXv /* /mnt/Virtual --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found,/home/*/.gvfs}
Converta o contêiner para um formato compatível
Escolha o comando apropriado, dependendo da máquina virtual desejada.
Para converter em um contêiner de
KVM
, use
qemu-desktop
com a seguinte linha de comando:
$ qemu-img convert -c -f raw -O qcow /media/backup.img /media/backup.qcow2
Para converter em um contêiner do
VirtualBox
, use o
virtualbox
com a seguinte linha de comando:
$ VBoxManage convertfromraw --format VDI /media/backup.img /media/backup.vdi
Para converter em um contêiner do
VMware
, use o
virtualbox
com a seguinte linha de comando:
$ VBoxManage convertfromraw --format VMDK /media/backup.img /media/backup.vmdk
Entre em chroot e reinstale o gerenciador de boot
Conecte o contêiner à VM, juntamente com um LiveCD do Linux (por exemplo, o ISO do Arch Linux mais recente) no CD-ROM virtual da VM, em seguida, inicie a VM e faça
chroot
nela:
# mount /dev/sda1 /mnt
# arch-chroot /mnt /bin/bash
Reinstale o
Syslinux
ou o
GRUB
. Não esqueça de atualizar seu arquivo de configuração:
Para o Syslinux, deve ser
APPEND root=/dev/sda1 ro
no
syslinux.cfg
.
Para o GRUB, é recomendado que você gere de novo automaticamente um
grub.cfg
.
Ajuste o fstab
Como toda a sua árvore raiz foi transferida para uma única partição, edite o arquivo
fstab
. Você pode usar o UUID ou o rótulo, se quiser, mas eles são mais úteis em configurações de várias unidades e várias unidades (para evitar confusões). Por enquanto,
/dev/sda1
para todo o seu sistema está ótimo.
/etc/fstab
tmpfs                    /tmp      tmpfs     nodev,nosuid          0   0
/dev/sda1                /         ext4      defaults,noatime      0   1
Desabilite quaisquer arquivos relacionados ao Xorg
Ter uma entrada
nvidia
,
nouveau
,
radeon
,
intel
, etc. na seção
Device
de uma dos arquivos de configuração do Xorg evitará que ele seja iniciado, já que você estará usando hardware
emulado
(incluindo a placa de vídeo). Portanto, é recomendável mover/renomear ou excluir o seguinte:
# mv /etc/X11/xorg.conf /etc/X11/xorg.conf.bak
# mv /etc/X11/xorg.conf.d/10-monitor /etc/X11/xorg.conf.d/10-monitor.bak
Regenere a imagem initramfs
Como o hardware mudou, enquanto você ainda está no chroot, gere novamente a imagem do initramfs e faça um desligamento adequado:
# mkinitcpio -p linux
# exit
# umount -R /mnt
# poweroff
Por fim, retire o LiveCD (o arquivo ISO), para que você não inicialize novamente nele e inicie a máquina virtual.
Aproveite o seu novo ambiente virtual.
Solução de problemas
"mount: o dispositivo especial /dev/loop5p1 não existe"
Use
losetup --partscan
, por exemplo:
# losetup --partscan /dev/loop5 /media/Backup/backup.img
Isso deve criar nós de dispositivo para cada partição que você criou dentro do dispositivo de loop.
"Waiting 10 seconds for device /dev/sda1; ERROR: Unable to find root device '/dev/sda1'"
Waiting 10 seconds for device /dev/sda1 ...
ERROR: Unable to find root device '/dev/sda1'.
You are being dropped to a recovery shell
    Type 'exit' to try and continue booting
sh: cannot access tty; job control turned off
[rootfs /]# _
Isso provavelmente significa que você não executou
poweroff
como
você foi orientado
e fechou a VM com o botão "Fechar", que é o equivalente a uma queda de energia. Agora você precisa gerar novamente sua imagem de initramfs. Para fazer isso, você pode iniciar a VM usando a entrada reserva. Se você não tiver uma entrada reserva, pressione
Tab
(para Syslinux) ou
e
(para GRUB) e renomeie-a para
initramfs-linux-fallback.img
. Depois de inicializar, abra um terminal e execute:
# mkinitcpio -p linux
# poweroff
"Missing operating system. FATAL: INT18: BOOT FAILURE"
Você precisa instalar ou reinstalar um gerenciador de boot. Veja
Processo de inicialização do Arch#Gerenciador de boot
.
Você está usando um sistema de arquivos
Btrfs
com compressão para
/boot
, do qual o
Syslinux
atualmente não consegue inicializar.
A ordem de inicialização do BIOS ou das configurações da VM não está configurada corretamente. Certifique-se de que a unidade que contém o gerenciador de boot seja a primeira a ser inicializada.
Me pedem a senha do root, para manutenção
:: Checking Filesystems                        [BUSY]
fsck.ext4: Unable to resolve '...'
Isso significa que você esqueceu de adicionar o UUID da unidade, o rótulo ou o nome do dispositivo em
/etc/fstab
. O UUID é diferente toda vez que você o formata (ou, neste caso, cria um do zero), e eles provavelmente não coincidem. Verifique com
blkid
.