Virtual-Machine

如何從正常文件夾啟動虛擬機?

  • May 6, 2017

我有我的 rootfs 快照/mnt/mydisk/my_test_snapshot。它是我目前系統的完全可寫副本。

我想啟動一個虛擬機(可能是一個 LXC 容器或其他東西),它將/mnt/mydisk/my_test_snapshot用作它的根 ( /) 文件夾。

最後,我需要啟動一個虛擬機:

  1. 使用正常文件夾作為其根文件系統。
  2. 可以在其虛擬環境中掛載一些允許的文件夾
  3. 將使用橋接網路(主機上的配置為零iptables
  4. 希望會有一個 X 視窗在其中使用 GUI 應用程序

有沒有為此目的的 LXC 配方(或其他東西)?

目的

它可能是重新發明 Docker 之類的,我不知道,但我需要以下好東西:

  1. 由於使用 BTRFS 作為根分區,我們可以免費拍攝目前系統的快照,然後啟動虛擬機並進行遊戲(通過安裝新軟體、刪除某些內容等……)
  2. 如果我們喜歡我們在虛擬機中所做的事情,我們可以從該快照啟動我們的真實作業系統(由 VM 修改)
  3. 我們可以免費複製任何虛擬機(時間、cpu 或磁碟空間)
  4. 例如,我們可以將此虛擬機用作時間機器,它將從備份中為數據庫伺服器提供服務。好的部分是我們可以在 1 分鐘內立即將所有服務上線。有利於災難恢復。
  5. 我們可以將它用於特定的應用程序(我們用於業務),這些應用程序必須在我們需要的任何時間執行,無論我們進行了何種升級或作業系統更改。這將為每個應用程序完全創建一個沙箱,無需磁碟空間成本,並將帶來 BTRFS 優勢(如快照等)

作為部分答案,我創建了以下工具來從子卷創建 LXC 容器:https ://github.com/aktos-io/lxc-to-the-future

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

引用自:https://unix.stackexchange.com/questions/362527