首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用systemd-n sp门诊绑定挂载

用systemd-n sp门诊绑定挂载
EN

Server Fault用户
提问于 2019-12-14 12:25:23
回答 2查看 2.4K关注 0票数 0

我正在使用systemd-nsp结识,并试图在引导时启用一个带有绑定挂载的容器。我已经对系统进行了pacstrap编辑和初始化,并可以在命令行中启动它,如下所示:

代码语言:javascript
复制
$ sudo /usr/bin/systemd-nspawn --quiet --boot --link-journal=try-guest --network-veth -U --settings=override --machine=jekyll --bind-ro /home/xyz/Documents/jekyll:/home/jekyll/site --private-users=off

我的绑定坐骑没问题。当我做的时候

代码语言:javascript
复制
$ sudo cp /usr/lib/systemd/system/systemd-nspawn@.service /etc/systemd/system/machines.target.wants/systemd-nspawn@jekyll.service

并将服务文件中的ExecStart行替换为

代码语言:javascript
复制
ExecStart=/usr/bin/systemd-nspawn --quiet --boot --link-journal=try-guest --network-veth -U --settings=override --machine=%i --bind-ro /home/xyz/Documents/jekyll:/home/jekyll/site --private-users=off

然后再做

代码语言:javascript
复制
$ sudo systemctl daemon-reload
$ sudo systemctl restart systemd-nspawn@jekyll

绑定坐骑不在那里。有人能告诉我怎么做吗?

EN

回答 2

Server Fault用户

回答已采纳

发布于 2019-12-14 22:37:06

当你运行这个命令..。

代码语言:javascript
复制
sudo systemctl restart systemd-nspawn@jekyll

...systemd不会在/etc/systemd/system/Machines.塔吉特/中看到修改过的单元文件。Systemd只在/lib/systemd/system/etc/systemd/system/run/systemd/system中查找单元文件。像/etc/systemd/system/.wants这样的目录中的文件应该是指向其中一个目录的符号链接。

如果希望使用修改后的ExecStart指令启动服务,则不需要复制任何内容。只需运行(作为root):

代码语言:javascript
复制
systemctl edit systemd-nspawn@jekyll.service

在出现的编辑器中,添加以下内容:

代码语言:javascript
复制
[Service]
ExecStart=
ExecStart=/usr/bin/systemd-nspawn --quiet --boot --link-journal=try-guest \
  --network-veth -U --settings=override --machine=%i \
  --bind-ro /home/xyz/Documents/jekyll:/home/jekyll/site \
  --private-users=off

这将创建一个文件/etc/systemd/system/systemd-nspawn@jekyll.d/override.conf,它将在启动服务时与股票单元文件合并,并且绑定挂载应该是可用的。

要使机器能够在启动时启动,只需运行:

代码语言:javascript
复制
systemctl enable systemd-nspawn@jekyll

要回答评论中的问题:

这里的大部分信息来自于systemd.unit手册页。"单元文件加载路径“一节提供了有关Systemd如何定位单元文件的详细信息。

"描述“部分描述了使用插入文件覆盖单元文件的部分内容:

除了一个单元文件foo.service之外,还可能存在一个“下拉”目录foo.service.d/。在对单元文件本身进行分析后,将解析该目录中以".conf“为后缀的所有文件。这对于更改或添加单元的配置设置非常有用,而无需修改单元文件。插入文件必须包含适当的节标题。对于实例化的单元,此逻辑将首先查找实例".d/“子目录(例如"foo@bar.service.d/")并读取其".conf”文件,然后读取模板".d/“子目录(例如"foo@.service.d/")和那里的".conf”文件。此外,对于包含破折号("-")的单元名称,在搜索所有破折号之后通过截断单元名称生成的目录集。具体来说,对于一个单元名称foo baz.service,不仅搜索普通目录foo-bar-baz.service.d/,而且还搜索foo-bar-.service.d/和foo-.service.d/。这对于定义一组相关单元的公共插入非常有用,这些单元的名称以一个公共前缀开头。该方案特别适用于挂载、自动和切片单元,其系统命名结构是以破折号作为组件分隔符来构建的。请注意,前缀层次结构下的等号插入文件覆盖了更高的层次结构,即foo-bar-.service.d/10-override.conf覆盖foo-.service.d/10-override.conf。

在设置ExecStart之前,我们需要清除它(也就是说,在设置配置的链接之前需要ExecStart= )这一事实来自于示例部分:

请注意,对于插入文件,如果要从解析为列表(而不是依赖项)的设置中删除条目,例如AssertPathExists= (或服务单元中的ExecStart= ),则需要先清除列表,然后再添加除要删除的条目以外的所有条目。依赖关系(After=等)不能将其重置为空列表,因此只能在下拉列表中添加依赖项。如果要删除依赖项,则必须覆盖整个单元。

使用systemctl edit创建(或编辑)覆盖文件来自systemctl手册页

票数 1
EN

Server Fault用户

发布于 2019-12-18 12:05:48

与其修补服务文件中的设置,不如(就设计而言)将其配置放在以容器命名的….nspawn-file中,例如- jekyll.nspawn

绑定挂载可以在[Files]部分中提供:

代码语言:javascript
复制
[Files]
BindReadOnly=…

调整这些设置不需要daemon-reload_‘ing才能生效。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/995562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档