Implantar o Linux em e inicializar a partir do VHD

0

Desde o lançamento do Microsoft Windows 7, a plataforma Windows oferece suporte a um recurso muito impressionante chamado Native VHD Boot. Isso permite que você instale o Windows em um arquivo VHDX, em vez de instalá-lo diretamente em um volume físico.

Usando esta configuração, a instalação do Windows é executada inteiramente em "bare metal" (não dentro de um hipervisor).

Eu gostaria de fazer algo semelhante com o Linux, embora não tenha experiência com isso. Como posso conseguir isso?

    
por Trevor Sullivan 14.09.2016 / 21:13

3 respostas

1

Uma maneira seria usar MEMDISK . Você pode criar facilmente imagens brutas de um sistema existente usando dd ou algo semelhante. Você também pode criar facilmente máquinas virtuais com libvirt / virt-manager ou virtualbox para citar algumas. Por exemplo, com virt-manager , você pode criar um disco virtual e instalar um sistema operacional nele com um arquivo ISO (entre outros métodos). Não tenho 100% de certeza dos formatos que o memdisk suporta, por isso presumo que seria melhor usar o formato de imagem raw com um tamanho fixo alocado antecipadamente.

Se o seu objetivo é simplesmente ter vários sistemas Linux inicializáveis em uma partição física, o LVM é uma opção mais direta. Isso envolve criar uma partição física, um grupo de volumes lógicos, vários volumes lógicos (e um sistema de arquivos em cada um) e instalar ou copiar um sistema para cada um (no último caso, você precisará editar o grub). Parece um monte de etapas, mas a maioria dos instaladores de distribuição do Linux permite que você configure facilmente isso.

    
por 14.09.2016 / 21:50
1

Eu tenho jogado essa ideia nos últimos dias e finalmente consegui que funcionasse.

Primeiro você precisa compilar um binário que irá montar arquivos VHD. Mas também pode montar VMDK, VDI e imagens de disco bruto. Você pode obter a fonte para compilar este programa a partir daqui. link

Mas antes de compilar vdfuse você precisa executar este comando.

sudo apt install libfuse-dev virtualbox pkg-config

libfuse-dev tem os arquivos de cabeçalho necessários para o vdfuse compilar.
virtualbox possui drivers pré-compilados necessários para montar imagens de disco.
pkg-config é usado por um script ao compilar o vdfuse.
Agora, com todos os arquivos e binários necessários, vamos compilar o vdfuse.

Assim, os comandos que você precisa executar para compilar vdfuse são os seguintes:

./autogen.sh
./configure
make
sudo make install

Em seguida, precisamos adicionar alguns scripts para executar antes do init dentro do intird.img.

Crie estes arquivos da seguinte forma:

/ usr / share / initramfs-tools / hooks / vdfuse

#!/bin/sh -e
PREREQ=""
prereqs()
{
    echo "$PREREQ"
}

case "$1" in
    prereqs)
    prereqs
    exit 0
    ;;
esac

. /usr/share/initramfs-tools/hook-functions

copy_exec /usr/local/bin/vdfuse /sbin

/ usr / share / initramfs-tools / scripts / init / top / vdfuse

#!/bin/sh -e
PREREQ="udev"
prereqs()
{
    echo "$PREREQ"
}

case "$1" in
    prereqs)
    prereqs
    exit 0
    ;;
esac

if [ ! -z $vdisk ]; then
    mkdir /vdhost
    mkdir /dev/vdhost
    mount -t ntfs $host /vdhost/
    vdfuse -t VHD -f /vdhost$vdisk /dev/vdhost
    mount -t ext4 $ROOT /root
fi

/ usr / share / initramfs-tools / scripts / init-bottom / vdhost

#!/bin/sh -e
PREREQ=""
prereqs()
{
    echo "$PREREQ"
}

case "$1" in
    prereqs)
    prereqs
    exit 0
    ;;
esac

if [ -d ${rootmnt}/vdhost ]; then
    mount -n -o move /vdhost ${rootmnt}/vdhost
fi

Em seguida, você precisa tornar esses arquivos executáveis executando o seguinte:

sudo chmod +x /usr/share/initramfs-tools/hooks/vdfuse
sudo chmod +x /usr/share/initramfs-tools/scripts/init-top/vdfuse
sudo chmod +x /usr/share/initramfs-tools/scripts/init-bottom/vdhost

Agora precisamos criar um novo kernel usando este comando: sudo update-initramfs -k all -c

Isso é tudo que você precisa fazer dentro do Linux. A última coisa é configurar o grub para inicializar a imagem do disco virtual.

Aqui estão os comandos que precisam ser adicionados ao arquivo grub.cfg.

 set vhd=/vhd/Ubuntu.vhd
 set vdhost
 search --no-floppy -s root -f $vhd
 loopback lp0 $vhd tdisk=VHD
 linux   (lp0,1)/vmlinuz root=/dev/vdhost/Partition1 vdisk=$vhd host=/dev/sda1 quiet splash
 initrd  (lp0,1)/initrd.img

Mude / dev / sda1 para qualquer dispositivo em que o VHD esteja localizado.

    
por 28.08.2018 / 04:12
0

Eu também gostaria de inicializar o Linux a partir de um VHD ... e armazenar o VHD em um HD / USB / SD / etc ...

um baseado no Debian seria minha primeira escolha ...

Existem experiências interessantes com o GRUB4DOS no link
usando uma imagem pré-criada chamada "UBT-small.vhd" ...

Eu acho que pode ser adaptado para outros gerenciadores de inicialização com pequenos ajustes ...

    
por 18.01.2017 / 03:08