首页 文章

udev:设备在启动时连接

提问于
浏览
6

我正在使用udev来检测我的Ubuntu 10.04 LTS x64服务器上的USB驱动器连接和断开连接 . 当机器运行时连接USB设备时,一切正常,但如果在启动时已经存在,我的脚本无法完成,显然是因为 mkdir /tmp/blah 不起作用 .

如果我随后在终端输入 sudo udevadm trigger ,一切都还可以 .

我假设在udev首先根据其规则评估连接的设备时,根文件系统尚未安装 .

因此,我的问题是:

  • 我是否正确识别了问题?

  • 有没有一种标准的方法来解决它 - 即 /tmp/ 是否可以在 / 之前和之后使用 /tmp/

3 回答

  • 2

    根文件系统已挂载,但当时是只读的 . /dev/shm (内存中的文件系统)应该可用;较新的Linux发行版也可能有一个 /run ramdisk . 您也可以在某处选择一个永久性目录,在脚本中安装一个tmpfs,然后在那里完成工作 .

  • 5

    此问题的一个解决方案是编写一个由您的udev规则调用的脚本,该脚本会立即分离,并等待某些事件发生,以确保系统“足够启动”以创建挂载点等来安装您的设备 . 回答以下帖子的人(http://superuser.com/questions/53978/ubuntu-automatically-mount-external-drives-to-media-label-on-boot-without-au)写了一个脚本来检查是否在继续之前,“httpd”正在运行 . 我敢肯定,也有其他“更好”的方法可以做到这一点 .

  • 1

    1-我不知道,即使在initramfs中,在挂载根文件系统之前,还有一个可写的/ tmp目录 .

    是的,当挂载真正的根时,这个/ tmp将被丢弃,最终的/ tmp将为空 . 你确定 mkdir /tmp/blah 命令失败了吗?或者你是否认为,因为当你寻找它时它不存在?

    2-在Ubuntu中(我不知道其他发行版)你在 /dev/.initramfs 中有一个隐藏目录来满足这些需求 . 由于 /dev 是保存在最终根文件系统中的tmpfs(或devtmpfs)挂载点,因此您仍然可以使用它 .

相关问题