如何将物理12.04机器迁移到LXC

是否有标准方法(或标准工具)将物理机器迁移到Ubuntu的LXC容器中? 我正在使用12.04.5机器。 我遇到过

  • https://github.com/deimosfr/lxc-convert

但它专门针对debian。 程序似乎是

  1. 复制根文件系统
  2. 删除不需要的文件
  3. 配置容器

这似乎是一个简单的过程,但我对LXC来说是全新的,希望能有一些不那么容易出错的东西。 我的另一个想法是从模板创建一个ubuntu容器,然后复制该文件系统。 我敢打赌,很多/ etc会被错误地破坏。

自从我发布这个问题以来,我已经完成了这个过程六次而没有太多麻烦。 我想我会从我学到的东西中添加一些提示,希望有人发现它们有用:

您需要做的就是将根文件系统复制到容器的rootfs目录中(/ var / lib / lxc / YOUR_CONTAINER / rootfs /用于基于磁盘的后备存储)。 排除/ proc,/ dev,/ sys和/ tmp。

然后:

  • 在容器中使fstab为空
  • 确保/ dev下的最小设备文件集。 我从使用模板创建的示例容器中复制设备文件。
  • 如果要使用lxcbr0进行网络连接,请在/ etc / network / interfaces中将网络接口设置为DHCP
  • 如果要连接到物理接口,请将接口设置为静态或手动。 如果是手动,请将IP地址放入容器的配置中。 不要设置为DHCP。
  • 一定要在容器配置中设置一个hwaddr。 如果您不这样做,LXC将在容器加载时随机生成一个,从而导致网络上出现大量过时的ARP条目。
  • 通读/ usr / share / lxc / templates / lxc-ubuntu。 请特别注意configure_ubuntu()函数。 您可能希望在容器中运行大多数这些命令。

容器启动后,遍历pstree中的所有进程,删除容器中不需要的进程(udevd,ntpdate,mdadm等)。 随意删除所有内核包。

以下是完整性的示例容器配置。 此配置适用于可靠的主机。 在这种情况下,容器是精确的。

lxc.include = /usr/share/lxc/config/ubuntu.common.conf lxc.start.auto=1 lxc.rootfs = /var/lib/lxc/myhost/rootfs lxc.mount = /var/lib/lxc/myhost/fstab lxc.utsname = myhost lxc.arch = amd64 # Network configuration lxc.network.type = veth lxc.network.flags = up lxc.network.link = br0 lxc.network.ipv4 = 172.27.3.13/24 lxc.network.ipv4 = 172.27.3.15/24 lxc.network.ipv4.gateway = 172.27.3.1 lxc.network.hwaddr = 52:12:a1:a5:d3:23 

如果主机操作系统是精确的,您也需要在配置中使用它。 公共文件将不可用。

 lxc.devttydir = lxc lxc.tty = 4 lxc.pts = 1024 lxc.cap.drop = sys_module mac_admin lxc.pivotdir = lxc_putold