目的

目的

我的 rootfs 快照位于/mnt/mydisk/my_test_snapshot.它是我当前系统的完全可写副本。

我想启动一个虚拟机(可能是 LXC 容器或其他东西),该虚拟机将用作/mnt/mydisk/my_test_snapshot其根 ( /) 文件夹。

最后,我需要启动一个虚拟机:

  1. 使用常规文件夹作为其根文件系统。
  2. 可以在其虚拟环境中安装一些允许的文件夹
  3. 将使用桥接网络(主机上的零配置iptables
  4. 希望有一个 X 窗口来使用 GUI 应用程序

有没有 LXC 配方(或其他)用于此目的?

目的

我不知道它可能会重新发明 Docker 之类的东西,但我需要以下优点:

  1. 由于使用 BTRFS 作为根分区,我们可以免费拍摄当前系统的快照并启动虚拟机并进行操作(通过安装新软件、删除某些内容等......)

  2. 如果我们喜欢在虚拟机中所做的事情,我们可以从该快照(由虚拟机修改)启动真正的操作系统

  3. 我们可以免费克隆任何虚拟机(时间、CPU 或磁盘空间)

  4. 例如,我们可以将此虚拟机用作时间机器,它将通过备份为数据库服务器提供服务。好的一点是我们可以在 1 分钟内立即使所有服务上线。有利于灾难恢复。

  5. 我们可以将它用于特定的应用程序(我们用于业务),这些应用程序必须在我们需要的任何时候运行,无论我们进行了哪种升级或操作系统更改。这将为每个应用程序完全创建一个沙箱,无需磁盘空间成本,并将带来 BTRFS 的好处(如快照等)

答案1

作为部分答案,我创建了以下工具来从子卷创建 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

相关内容