就像标题状态一样,我已经安装了baremetal主机上的Rancheros,想要动态处理外部USB硬盘驱动器的添加/删除。它应该可以作为其他容器的绑定安装访问。
您可以做这样的事情:
# 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 "$@"
然后执行
sudo ros config merge -i udev_config.yml && sudo ros service restart udev
您可以拔下插头并插入设备,或者如果您知道DEVNAME
(请参见下文(,例如/dev/sdb1
,执行
sudo system-docker exec udev udevadm trigger --action=add /dev/sdb1
有几个部分:
动态采取对硬件添加/删除的行动
udev
是该作业的常见工具。udev(7)
具有有关其配置的信息。
在上面的示例中:
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
(例如(找到与设备关联的其他属性。重要的是使用不会覆盖或可能被其他硬盘驱动器使用的东西使用。此命令的其他重要信息包括DEVPATH
和DEVNAME
。
在Rancheros中配置udev
。
通常将上述配置放入/etc/udev/rules.d/
,但我们需要将其放入正确的/etc/udev/rules.d/
。
在Rancheros中,udev
守护程序(udevd
(以容器的方式运行,可通过执行:
sudo ros service ps
或
sudo system-docker ps
Rancheros系统容器可以使用cloud-config
配置。我们可以使用上述write_files
指令将文件写入系统容器中。
使console
和其他产卵的码头容器可用。
默认情况下,udev
容器不共享媒体卷,因此我们运行提供的脚本,该脚本在console
系统容器内执行安装。它具有我们需要的属性:
-
mount
和umount
可用(与docker
容器不同( -
media-volumes
已安装
注释
- 请小心
RUN
命令中的路径,因为非吸收路径将相对于/usr/lib/udev/
。
。 - 您可以通过执行
udevadm info <device path>
来查看设备的属性。udevadm info /dev/sdb1
。 - 您可以在
console
容器中测试udev
配置(当您进入Rancheros时产生的默认容器(可以将文件放入/etc/udev/rules.d/
中并使用E.G.进行测试。udevadm test --action=add <DEVPATH>
-
udevd
的日志可通过dmesg
(每个rancher/os#2253
(访问。udevadm --log-priority=debug
动态设置日志级