6

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

如果我随后sudo udevadm trigger在终端输入,一切都很好。

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

因此,我的问题是:

  1. 我是否正确识别了问题?
  2. 是否有解决它的标准方法 - 即是否有替代方法/tmp/可以在安装之前和之后使用/
4

3 回答 3

5

根文件系统已挂载,但当时是只读的。/dev/shm(内存中的文件系统)应该可用;较新的 linux 发行版也可能有一个/runramdisk。你也可以在某个地方选择一个永久目录,在你的脚本中挂载一个 tmpfs,然后在那里做你的工作。

于 2011-08-23T16:53:32.683 回答
2

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

于 2013-01-16T19:59:15.880 回答
1

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

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

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

于 2011-08-23T16:58:28.613 回答