![挂载 LXD 客户目录而不破坏数据和所有权](https://linux22.com/image/984947/%E6%8C%82%E8%BD%BD%20LXD%20%E5%AE%A2%E6%88%B7%E7%9B%AE%E5%BD%95%E8%80%8C%E4%B8%8D%E7%A0%B4%E5%9D%8F%E6%95%B0%E6%8D%AE%E5%92%8C%E6%89%80%E6%9C%89%E6%9D%83.png)
我已经创建了一个 LXD 客户机来托管我的网络服务器,并且为了轻松访问文档根目录,我执行以下操作:
lxc config device add guest sharedhtml disk path=/document/root/ source=/home/$USER/public_html
这做了两件事:
- 完全替换
/document/root/
为public_html/
(所有默认网络服务器文件都消失了,为public-html
空) - 破坏了
/document/root
所有权设置;我创建的目录和文件public_html/
现在归nobody:nogroup
据我了解,这更像是反向挂载;不是挂载客户机的目录,而是将主机的目录强制反向挂载到客户机中。
如何在不破坏现有内容的情况下在主机中挂载客户目录,以便更改继承客户目录的所有权设置?
奖励:我该如何删除device
正在挂载的目录?
答案1
要删除您创建的条目,请按照以下步骤操作:
lxc config device remove sharedhtml
现在看来 LXD 确实做了它应该做的事情。您运行的命令指示 LXD 将 /home/$USER/public_html 从主机挂载到容器中作为容器的 /document/root
由于 LXD 容器使用与主机不同的 uid/gid 映射运行,因此主机的文件所有权无法在容器内呈现,导致内核将这些文件显示为 nobody:nogroup。
目前没有任何机制可以将容器内的路径安装在主机上,而且我们不太可能很快添加这样的东西。
无论如何,在您的情况下,您可能应该做的是在主机上为您的 Web 服务器文件设置一个存储路径,然后将其设置为 LXD 中的设备磁盘条目,以便将其安装在容器内的正确位置。
然后在主机上设置 POSIX ACL,以便容器的 uid/gid 和您自己的用户都可以访问文件。
在大多数情况下,主机上的容器 uid 和 gid 将是 165536 + 容器内的 uid 或 gid。一种更简单的方法是让主机上的路径暂时为全球可写,然后在容器内的路径上写入一些内容,并确认谁在主机上显示为所有者。