Você pode preparar uma instalação mínima dentro de uma instância do Kem do qemu e depois transferir a imagem para o sistema remoto.
Por exemplo, para instalar um sistema Centos 7 RAID-1:
Na sua estação de trabalho local:
$ truncate --size 5G disk1.img
$ truncate --size 5G disk2.img
$ qemu-system-x86_64 \
-cdrom CentOS-7.0-1406-x86_64-DVD/CentOS-7.0-1406-x86_64-DVD.iso \
-hda disk1.img -hdb disk2.img -m 2G -boot d -enable-kvm \
-net user,hostfwd=tcp::10022-:22 -net nic # enable net, ssh portforwarding
Dentro da instância do qemu, você pode instalar o CentOS 7 usando o instalador recomendado oficialmente - isto é, selecionar os 2 discos, particionar manualmente, criar partições automaticamente, selecionar raid1 para o grupo / volume, selecionar raid1 nas configurações do tipo de dispositivo / boot Depois que a instalação estiver concluída, você pode até mesmo configurar confortavelmente algumas coisas básicas, por exemplo: atualize o sistema via yum update
, aceite as chaves GPG dos sistemas, configure a rede (com o endereço MAC do sistema alvo), chaves ssh etc.
Para redimensionar posteriormente, é importante desativar o bitmap de intenção de gravação RAID 1 (dentro da vm):
# mdadm --grow /dev/md/*pv00 --bitmap none
Para transferir a imagem, ou seja, a perna esquerda do espelho (da estação de trabalho para o servidor):
$ gzip -c disk1.img | ssh example.org "gzip -d | dd of=/dev/sda bs=128K"
Uma imagem mínima deve ser comprimida com uma proporção muito boa - no meu experimento, o tamanho compactado era de aproximadamente ~ 230 MiB
Para a perna direita, apenas a parte grub2 é necessária:
$ dd if=disk2.img bs=512 count=2048 | gzip -c \
| ssh example.org "zip -d | dd of=/dev/sdb bs=128K"
No servidor (dentro do sistema de recuperação inicializado) você aumenta o grupo de volume raiz:
# partx -v --add /dev/sda
# mdadm --stop /dev/md/*boot --stop /dev/md/*pv00
# echo -e 'd\n2\nn\np\n2\n\n\nt\nfd\nw\n' | fdisk /dev/sda
# mdadm --run /dev/md/*boot --run /dev/*pv00
# mdadm --grow /dev/md/*pv00 --size max
# pvresize /dev/md/*pv00
# lvchange --activate y centos/root
# lvresize --resizefs --extents +100%FREE centos/root
# echo -e 'd\n2\nn\np\n2\n\n\nt\nfd\nw\n' | fdisk /dev/sdb
# mdadm --add /dev/md/*boot /dev/sdb1
# mdadm --add /dev/md/*pv00 /dev/sdb2
# mdadm --wait /dev/md/*pv00
# mdadm --grow /dev/md/*pv00 --bitmap internal
# mdadm --wait /dev/md/*pv00
# shutdown -r now
Material avançado
Quando você quiser usar esse método para instalar várias máquinas bare-metal a partir de uma imagem base, será necessário usar alguns scripts de inicialização que ajustem a imagem base. Além das coisas óbvias (por exemplo, nome do host, configuração de rede, etc.), você precisa alterar todos os UUIDs nos sistemas. Isso inclui UUIDs de:
- dispositivos RAID
- PVs e VGs do LVM
- Sistemas de arquivos
- Trocar
- Scripts de configuração de rede em (
/etc/sysconfig/network-scripts
)
E, claro, você precisa alterar todos os arquivos de configuração que usam esses UUIDS:
- / etc / default / grub (chame
grub2->mkconfig
then ...) - /etc/mdadm.conf
- / etc / fstab
Advertências
O processo fica um pouco mais complicado se o sistema cliente / destino usar diferentes tamanhos de setor físico. Por exemplo, quando o sistema de destino usa setores 4k (em vez de 512 bytes). Então você tem que configurar o qemu de tal forma que ele também use / emula 4k setores físicos (o que o qemu é capaz de fazer).
Outra coisa a observar é se o sistema de destino suporta apenas o boot UEFI. Nesse caso, você também deve garantir que o qemu emule o UEFI também.
Conclusão
Usar uma instância do qemu kvm e depois transplantar a instalação resultante para a máquina remota é um processo relativamente direto.