Moving an existing install into (or out of) a virtual machine (Português)
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.
Configurar 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.
Transferir o sistema
Na máquina virtual, abra um terminal e transfira o sistema:
# rsync -aAXv /* /path/to/shared/folder --exclude={/dev/*,/proc/*,/sys/*,/tmp/*,/run/*,/mnt/*,/media/*,/lost+found,/home/*/.gvfs}
Entrar em chroot e reinstalar 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/
.
Ajustar 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.
Gerar novamente 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.
Criar o contêiner
Isso criará uma imagem bruta de 10 GB:
# dd if=/dev/zero of=/media/Backup/backup.img bs=1024 count=10482381
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.
Agora carregue o módulo necessário e monte-o como um dispositivo de loopback, em /dev/loop5
(por exemplo):
# modprobe loop # losetup /dev/loop5 /media/Backup/backup.img
Em seguida, particione o dispositivo /dev/loop5
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. Em seguida, crie um sistema de arquivos nas partições, que aparecerão como /dev/loop5p1
, /dev/loop5p2
, etc.
Transferir o sistema
Monte o dispositivo de loopback e transfira o sistema:
/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}
Converter 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
Entrar em chroot e reinstalar 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
nosyslinux.cfg
.
- Para o GRUB, é recomendado que você gere de novo automaticamente um
grub.cfg
.
Ajustar 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
Desabilitar quaisquer arquivos relacionados a 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
Gerar novamente 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 pede a senha de 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
.