我在 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-server
ls
作为参考,这是我的容器的存储目录:
$ 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
修复了这个问题
令人不安的是,你不能删除一个容器,而不用担心挂载点被搞砸!