lxd 容器内的 guestmount 出现“操作不允许”错误

lxd 容器内的 guestmount 出现“操作不允许”错误

我在 ubuntu 16.04 lxd 容器(通过以下命令创建:lxc launch images:ubuntu/xenial/amd64 mycont)内创建了一个 qcow2 磁盘(使用 qemu-img)。我已对其进行分区并使用 guestfish 对其进行格式化,没有任何问题。但当我想挂载它以填充文件时,我会执行以下命令...:

guestmount -a 磁盘.qcow2 -m /dev/sda1 /路径/安装/点

...我收到此错误:

*fusermount:安装失败:操作不允许

libguestfs:错误:fuser_mount:/path/mount/point:操作不允许*

在真正的 Ubuntu 上,同样的命令运行良好。事实上,guestfish 中的“mount”命令也运行良好。我快疯了,因为我找不到任何解决办法!

非常感谢!

答案1

我刚刚遇到了类似的问题,我需要 fuse 才能让 sshfs 在 lxd 客户机中运行。LXD 开发人员 (stgraber) 回复了错误报告是 ubuntu 内核限制了容器的挂载。

错误报告链接到本文:Ubuntu 16.04 中的容器挂载

简而言之,你至少需要内核 4.4.0-6.21。在 lxd 主机上启用用户命名空间所需的内核模块对于 fuse 来说

# fuse
echo Y | sudo tee /sys/module/fuse/parameters/userns_mounts
# ext4 (see article for more information, not needed for sshfs)
#echo Y | sudo tee /sys/module/ext4/parameters/userns_mounts

然后创建一个配置文件,为 udev 和 aa_profile 创建所需的设备:

 lxc profile create nsmount  
 lxc profile set nsmount raw.lxc lxc.aa_profile=unconfined
 # expose these devices to the container  
 lxc profile device add nsmount fuse unix-char path=/dev/fuse  
 #lxc profile device add nsmount loop0 unix-block path=/dev/loop0

如果您正在创建新容器,请使用“-p”标志:

lxc launch ubuntu MyNewContainer -p default -p nsmount

如果您有现有容器使用应用:

lxc profile apply MyExistingContainer default,nsmount

如果您有其他特殊配置文件,请记得列出所有应用的配置文件。

相关内容