LXD 管理的容器(在 ZFS 上)在删除另一个容器后消失

LXD 管理的容器(在 ZFS 上)在删除另一个容器后消失

我在 Xenial 服务器上设置了几个容器,使用 ZFS 数据集进行存储(我不确定这是否相关;我们会讲到这一点)。它们都运行良好。

尝试重新启动其中一个,mail-server我现在得到

error: Error calling 'lxd forkstart mail-server /var/lib/lxd/containers /var/log/lxd/mail-server/lxc.conf': err='exit status 1'
Try `lxc info --show-log mail-server` for more info

看看日志,我看到

        lxc 20160518112750.405 ERROR    lxc_conf - conf.c:mount_rootfs:807 - No such file or directory - failed to get real path for '/var/lib/lxd/containers/mail-server/rootfs'
        lxc 20160518112750.405 ERROR    lxc_conf - conf.c:setup_rootfs:1221 - failed to mount rootfs
        lxc 20160518112750.405 ERROR    lxc_conf - conf.c:do_rootfs_setup:3611 - failed to setup rootfs for 'mail-server'

这并不奇怪,因为当我检查

$ sudo ls -l /var/lib/lxd/containers/mail-server.zfs
total 0

但是,如果我检查另一个容器,我会得到同样的结果:

$ sudo ls -l /var/lib/lxd/containers/smb-server.zfs
total 0

该容器目前正在运行:

$ lxc list
+---------------+---------+--------------------------------+------+------------+-----------+
|     NAME      |  STATE  |              IPV4              | IPV6 |    TYPE    | SNAPSHOTS |
+---------------+---------+--------------------------------+------+------------+-----------+
| smb-server    | RUNNING | 192.168.2.11 (eth0)            |      | PERSISTENT | 2         |
+---------------+---------+--------------------------------+------+------------+-----------+
| mail-server   | STOPPED |                                |      | PERSISTENT | 0         |
+---------------+---------+--------------------------------+------+------------+-----------+
| ub-test       | STOPPED |                                |      | PERSISTENT | 0         |
+---------------+---------+--------------------------------+------+------------+-----------+
| www-server    | STOPPED |                                |      | PERSISTENT | 1         |
+---------------+---------+--------------------------------+------+------------+-----------+

$ lxc exec smb-server -- /bin/bash
root@smb-server:~# ls -l /
total 88
drwxr-xr-x   2 root   root    173 May 17 10:10 bin
drwxr-xr-x   3 root   root      3 Apr 20 17:58 boot
drwxr-xr-x   9 root   root    480 May 17 21:40 dev
...

www-server也在运行,但 中没有显示任何内容ls,一旦我停止它,就无法再启动它,原因相同。rootfs我仍然可以找到的唯一容器ub-test是:

$ sudo ls -l /var/lib/lxd/containers/ub-test.zfs
total 22
-rw-r--r--  1 lxd    messagebus 1425 Apr 20 18:45 metadata.yaml
drwxr-xr-x 22 100000     100000   22 Apr 22 11:38 rootfs
drwxr-xr-x  2 lxd    messagebus    7 Apr 20 18:45 templates

我确实可以随意停止和开始。


我对这一变化的原因的唯一猜测(我唯一能记得的就是这样做可能可能影响此问题的一个原因是我昨天删除了另一个容器ub-test2。我仍然可以看到它的踪迹:

$ sudo zfs list
NAME                                                                                            USED  AVAIL  REFER  MOUNTPOINT
tank                                                                                      2.80T  2.44T    96K  /tank
tank/lxd                                                                                  4.71G  2.44T    96K  none
tank/lxd/containers                                                                       3.34G  2.44T    96K  none
tank/lxd/containers/smb-server                                                         2.31G  2.44T  2.59G  /var/lib/lxd/containers/smb-server.zfs
tank/lxd/containers/mail-server                                                            279M  2.44T   746M  /var/lib/lxd/containers/mail-server.zfs
tank/lxd/containers/ub-test                                                                485M  2.44T   952M  /var/lib/lxd/containers/ub-test.zfs
tank/lxd/containers/www-server                                                             289M  2.44T   757M  /var/lib/lxd/containers/www-server.zfs
tank/lxd/deleted                                                                           702M  2.44T    96K  none
tank/lxd/deleted/images                                                                    702M  2.44T    96K  none
tank/lxd/deleted/images/f4c4c60a6b752a381288ae72a1689a9da00f8e03b732c8d1b8a8fcd1a8890800   702M  2.44T   702M  none
tank/lxd/images                                                                            704M  2.44T    96K  none
tank/lxd/images/d23ee1f4fd284aeaba6adeb67cccf7b871e96178d637fec96320aab7cc9634b1           704M  2.44T   704M  /var/lib/lxd/images/d23ee1f4fd284aeaba6adeb67cccf7b871e96178d637fec96320aab7cc9634b1.zfs

您还可以看到,尽管没有返回任何内容,但/var/lib/lxd/containers/mail-server.zfs(和smb-server, ) 仍在使用存储 (~280M) ,这让我怀疑该问题与 ZFS 安装出错有关;我的第一步是重新启动整个系统,看看是否能解决问题,但我担心这也会导致最后运行的容器死亡,从而使解决问题变得更加困难。www-serverls


作为参考,这是我的容器的存储目录:

$ sudo ls -l /var/lib/lxd/containers
total 37
lrwxrwxrwx 1 root   root      41 Apr 25 09:19 smb-server -> /var/lib/lxd/containers/deluge-ub1604.zfs
drwxr-xr-x 2 root   root    4096 Apr 25 09:19 smb-server.zfs
-rw-r--r-- 1 root   root   19011 May 18 11:46 lxc-monitord.log
lrwxrwxrwx 1 root   root      39 May 18 02:02 mail-server -> /var/lib/lxd/containers/mail-server.zfs
drwxr-xr-x 2 100000 100000  4096 May 18 02:02 mail-server.zfs
lrwxrwxrwx 1 root   root      35 Apr 22 11:38 ub-test -> /var/lib/lxd/containers/ub-test.zfs
drwxr-xr-x 4 100000 100000     5 Apr 22 11:37 ub-test.zfs
lrwxrwxrwx 1 root   root      38 May 17 09:31 www-server -> /var/lib/lxd/containers/smb-server.zfs
drwxr-xr-x 2 100000 100000  4096 May 17 09:31 www-server.zfs

答案1

我想告诉你,我的所有 Xenial 容器服务器(5)都遇到了同样的问题。

为了向我们的问题添加更多信息,当您键入时,坐骑不再出现mount

如果您输入zfs mount -a它,则只会挂载未运行的容器,而对于正在运行的容器,您会收到以下错误:"filesystem 'lxd/containers/container_name' is already mounted"

因此,要彻底解决问题,您需要先停止容器,然后再发出zfs mount -a

总结一下,要么这些 zfs 挂载出现了超时,要么某些 cron 作业以某种方式将它们删除了,但这肯定是一个错误。

希望这没有损坏任何容器......

答案2

我仍然无法想象到底出了什么问题,但是运行sudo zfs mount -a修复了每个未运行的容器的问题(如上所述,ZFS 数据集确实存在 - 从它们对存储的使用可以看出 - 它们只是由于某种原因被卸载了)。

停止后www-server,我可以使用相同的命令修复它的挂载点,然后重新启动它。

注意:如果有人能在接下来的几天内解释此错误背后的原因,我会接受他们的答案。否则,我会把这个答案留在这里,供遇到同样问题的其他任何人参考(尽管,运行容器是阻止我重新启动的唯一方法,这也可以解决问题——因为所有 ZFS 数据集都是在启动时安装的——所以这个问题远非关键)。

答案3

今天在全新安装的 Xenial 上看到了这个问题,而且前一天还删除了一些容器。

删除/var/lib/lxd/containername.zfs挂载点(rm)然后运行zfs mount -a修复了这个问题

令人不安的是,你不能删除一个容器,而不用担心挂载点被搞砸!

相关内容