Virtual-Machine
如何從正常文件夾啟動虛擬機?
我有我的 rootfs 快照
/mnt/mydisk/my_test_snapshot
。它是我目前系統的完全可寫副本。我想啟動一個虛擬機(可能是一個 LXC 容器或其他東西),它將
/mnt/mydisk/my_test_snapshot
用作它的根 (/
) 文件夾。最後,我需要啟動一個虛擬機:
- 使用正常文件夾作為其根文件系統。
- 可以在其虛擬環境中掛載一些允許的文件夾
- 將使用橋接網路(主機上的配置為零
iptables
)- 希望會有一個 X 視窗在其中使用 GUI 應用程序
有沒有為此目的的 LXC 配方(或其他東西)?
目的
它可能是重新發明 Docker 之類的,我不知道,但我需要以下好東西:
- 由於使用 BTRFS 作為根分區,我們可以免費拍攝目前系統的快照,然後啟動虛擬機並進行遊戲(通過安裝新軟體、刪除某些內容等……)
- 如果我們喜歡我們在虛擬機中所做的事情,我們可以從該快照啟動我們的真實作業系統(由 VM 修改)
- 我們可以免費複製任何虛擬機(時間、cpu 或磁碟空間)
- 例如,我們可以將此虛擬機用作時間機器,它將從備份中為數據庫伺服器提供服務。好的部分是我們可以在 1 分鐘內立即將所有服務上線。有利於災難恢復。
- 我們可以將它用於特定的應用程序(我們用於業務),這些應用程序必須在我們需要的任何時間執行,無論我們進行了何種升級或作業系統更改。這將為每個應用程序完全創建一個沙箱,無需磁碟空間成本,並將帶來 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