首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在RancherOS中动态地挂载外部USB硬盘驱动器?

如何在RancherOS中动态地挂载外部USB硬盘驱动器?
EN

Stack Overflow用户
提问于 2018-02-10 23:42:09
回答 1查看 1.3K关注 0票数 1

与标题状态一样,我在裸金属主机上安装了RancherOS,并希望动态处理外部USB硬盘驱动器的添加/删除。它应该可以作为其他容器的绑定安装来访问。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-10 23:42:09

你可以这样做:

代码语言:javascript
复制
# udev_config.yml
write_files:
- path: /etc/udev/rules.d/99-media-Storage-usb-drive.rules
  container: udev
  permissions: "0644"
  owner: root
  content: |
    ATTRS{ID_FS_UUID}!="161E-5755", GOTO="media_Storage_usb_drive_exit"
    ACTION=="add", \
      RUN{program}+="/usr/bin/udev-mount.sh -o nodev,noexec,nosuid,uid=1100,gid=5000,umask=007 $root/$name /media/Storage"
    ACTION=="remove", \
      RUN{program}+="/usr/bin/udev-umount.sh /media/Storage"
    LABEL="media_Storage_usb_drive_exit"
- path: /usr/bin/udev-mount.sh
  container: udev
  permissions: "0755"
  owner: root
  content: |
    #!/bin/sh
    set -e
    eval path=\${$#}
    system-docker exec console /usr/bin/mkdir -p "$path"
    system-docker exec console /usr/bin/mount "$@"
- path: /usr/bin/udev-umount.sh
  container: udev
  permissions: "0755"
  owner: root
  content: |
    #!/bin/sh
    system-docker exec console /usr/bin/umount "$@"

然后执行

代码语言:javascript
复制
sudo ros config merge -i udev_config.yml && sudo ros service restart udev

你可以拔掉和插入你的设备,或者如果你知道你的DEVNAME (见下文),例如/dev/sdb1,执行

代码语言:javascript
复制
sudo system-docker exec udev udevadm trigger --action=add /dev/sdb1

其中有几个部分:

动态地对硬件添加/删除采取行动

udev是这项工作的常用工具。udev(7)有关于其配置的信息。

在上面的例子中:

代码语言:javascript
复制
ATTRS{ID_FS_UUID}!="161E-5755", GOTO="media_Storage_usb_drive_exit"
ACTION=="add", \
  RUN{program}+="/usr/bin/udev-mount.sh -o nodev,noexec,nosuid,uid=1100,gid=5000,umask=007 $root/$name /media/Storage"
ACTION=="remove", \
  RUN{program}+="/usr/bin/udev-umount.sh /media/Storage"
LABEL="media_Storage_usb_drive_exit"

在其他的在线示例中,您可能会看到使用了KERNEL,但是由于与外部设备关联的特定名称不是静态的,所以这是脆弱的。这里我们使用ID_FS_UUID。通过执行udevadm info /dev/sdb1 (例如),可以找到与设备相关的这个属性和其他属性。使用不会被覆盖或可能被另一个硬盘使用的东西是很重要的。此命令中的其他重要信息包括DEVPATHDEVNAME

udev中配置RancherOS。

上面的配置通常放在/etc/udev/rules.d/中,但我们需要将其放在正确的/etc/udev/rules.d/中。

在RancherOS中,udev守护进程(udevd)作为容器运行,通过执行以下命令可以看到:

代码语言:javascript
复制
sudo ros service ps

代码语言:javascript
复制
sudo system-docker ps

RancherOS系统容器可以使用cloud-config进行配置。我们可以使用write_files指令将文件写入系统容器,如上面所示。

使console和其他派生的码头容器可以使用挂载。

默认情况下,udev容器不共享媒体卷,因此我们运行提供的脚本,这些脚本在console系统容器中执行挂载。它具有我们所需要的特性:

  • mountumount可用(与docker容器不同)
  • media-volumes安装

备注

  1. 注意RUN命令中的路径,因为相对于/usr/lib/udev/,非绝对路径将被解析。
  2. 您可以通过执行udevadm info <device path> (例如udevadm info /dev/sdb1 )来查看设备的属性。
  3. 您可以在udev容器(当ssh进入RancherOS时生成的默认容器)中测试您的console配置,您可以将文件放在/etc/udev/rules.d/中,然后使用例如udevadm test --action=add <DEVPATH>进行测试。
  4. udevd的日志可以通过dmesg (per rancher/os#2253)访问。udevadm --log-priority=debug动态地设置日志级别
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48726784

复制
相关文章

相似问题

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