Como inicializar uma máquina virtual a partir de uma pasta normal?

1

Eu tenho meu instantâneo rootfs em /mnt/mydisk/my_test_snapshot . É completamente cópia gravável do meu sistema atual.

Eu quero inicializar uma máquina virtual (possivelmente um contêiner LXC ou talvez outra coisa) que usará /mnt/mydisk/my_test_snapshot como sua pasta raiz ( / ).

No final, preciso inicializar uma máquina virtual que:

  1. usa uma pasta regular como seu sistema de arquivos raiz.
  2. pode montar algumas pastas permitidas em seu ambiente virtual
  3. usará a rede em ponte (com configuração zero no iptables do host)
  4. esperançosamente terá uma janela X para usar aplicativos de GUI dentro de

Existe alguma receita LXC (ou outra coisa) para esse fim?

Propósito

Ele pode estar reinventando o Docker ou algo assim, eu não sei, mas preciso dos seguintes bons bits:

  1. Como usando o BTRFS para a partição raiz, podemos tirar um instantâneo do sistema atual sem custo e inicializar uma máquina virtual e brincar (instalando um novo software, apagando algo etc ...)

  2. Se gostamos do que fizemos na máquina virtual, podemos inicializar nosso sistema operacional real a partir desse instantâneo (modificado pela VM)

  3. Podemos clonar qualquer VM sem custo (tempo, cpu ou espaço em disco)

  4. Podemos usar essa máquina virtual como uma máquina do tempo, por exemplo, que servirá um servidor de banco de dados a partir de um backup. Boa parte é que podemos trazer todos os serviços online em 1 minuto e de uma só vez. Bom para recuperação de desastres.

  5. Podemos usá-lo para aplicativos específicos (que usamos para negócios) que precisarão ser executados a qualquer momento que precisarmos, independentemente do tipo de atualização ou alteração do sistema operacional que tenhamos feito. Isso criará completamente um sandbox para cada aplicativo, sem o custo do espaço em disco e trará benefícios BTRFS (como snapshot, etc.)

por ceremcem 02.05.2017 / 03:40

1 resposta

0

Como resposta parcial, criei a seguinte ferramenta para criar um contêiner LXC a partir de um subvolume: link

if [[ "$(grep br0 /etc/network/interfaces)" == "" ]]; then 
    cat <<ONETIME
ERROR: No br0 bridge device found in  /etc/network/interfaces file. 
Edit your /etc/network/interfaces file and add/replace the following section 
in place of "eth0" section 

    auto br0
    iface br0 inet dhcp
        bridge-ifaces eth0
        bridge-ports eth0
        up ifconfig eth0 up

    iface eth0 inet manual


Then run the following: 
    sudo ifup br0
ONETIME
    exit
fi

echo "creating the container directory: $NAME"
mkdir $DIR/$NAME

echo "creating a writable snapshot of given subvolume"
btrfs sub snap $SUBVOL $DIR/$NAME/rootfs

echo "emptying the /etc/fstab file"
echo > $DIR/$NAME/rootfs/etc/fstab

echo "creating the config file"
cat <<CONFIG > $DIR/$NAME/config
# Distribution configuration
lxc.include = /usr/share/lxc/config/debian.common.conf
lxc.arch = x86_64
# Container specific configuration
lxc.rootfs = /var/lib/lxc/$NAME/rootfs
lxc.rootfs.backend = dir
lxc.utsname = $NAME
# Network configuration
lxc.network.type = veth
lxc.network.link = br0
lxc.network.hwaddr = 00:16:3e:7e:11:ac
lxc.network.flags = up 
CONFIG
    
por 06.05.2017 / 01:37