我的 rootfs 快照位于/mnt/mydisk/my_test_snapshot
.它是我当前系统的完全可写副本。
我想启动一个虚拟机(可能是 LXC 容器或其他东西),该虚拟机将用作/mnt/mydisk/my_test_snapshot
其根 ( /
) 文件夹。
最后,我需要启动一个虚拟机:
- 使用常规文件夹作为其根文件系统。
- 可以在其虚拟环境中安装一些允许的文件夹
- 将使用桥接网络(主机上的零配置
iptables
) - 希望有一个 X 窗口来使用 GUI 应用程序
有没有 LXC 配方(或其他)用于此目的?
目的
我不知道它可能会重新发明 Docker 之类的东西,但我需要以下优点:
由于使用 BTRFS 作为根分区,我们可以免费拍摄当前系统的快照并启动虚拟机并进行操作(通过安装新软件、删除某些内容等......)
如果我们喜欢在虚拟机中所做的事情,我们可以从该快照(由虚拟机修改)启动真正的操作系统
我们可以免费克隆任何虚拟机(时间、CPU 或磁盘空间)
例如,我们可以将此虚拟机用作时间机器,它将通过备份为数据库服务器提供服务。好的一点是我们可以在 1 分钟内立即使所有服务上线。有利于灾难恢复。
我们可以将它用于特定的应用程序(我们用于业务),这些应用程序必须在我们需要的任何时候运行,无论我们进行了哪种升级或操作系统更改。这将为每个应用程序完全创建一个沙箱,无需磁盘空间成本,并将带来 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