我正在使用udev来检测我的Ubuntu 10.04 LTS x64服务器上的USB驱动器连接和断开连接。在机器运行时连接USB设备时一切正常,但如果在启动时已经存在,我的脚本无法完成,显然是因为mkdir /tmp/blah
不起作用。
如果我随后在终端输入sudo udevadm trigger
,一切都还可以。
我假设udev首先根据规则评估连接的设备,但尚未安装根文件系统。
我的问题是:
/tmp/
是否可以替代我使用它们
安装/
之前和之后?答案 0 :(得分:5)
已挂载根文件系统,但当时是只读的。应该有/dev/shm
(内存中的文件系统);较新的Linux发行版也可能有/run
ramdisk。你也可以在某个地方选择一个永久性目录,在你的脚本中安装一个tmpfs,并在那里做你的工作。
答案 1 :(得分:2)
此问题的一个解决方案是编写一个由您的udev规则调用的脚本,该脚本会立即分离,并等待某些事件发生,以确保系统“足够启动”以创建挂载点等,以安装您的设备。回答以下帖子的人(http://superuser.com/questions/53978/ubuntu-automatically-mount-external-drives-to-media-label-on-boot-without-au)写了一个脚本来检查是否在继续之前,“httpd”正在运行。我确信也可能有其他“更好”的方法来做到这一点。
答案 2 :(得分:1)
1-我不知道,即使在initramfs中,在挂载根文件系统之前,还有一个可写的/ tmp目录。
是的,当挂载真正的根时,这个/ tmp将被丢弃,最终的/ tmp将为空。您确定mkdir /tmp/blah
命令失败了吗?或者你是否认为,因为当你寻找它时它不存在?
2-在Ubuntu中(我不知道其他发行版)你在/dev/.initramfs
中有一个隐藏目录来满足这些需求。由于/dev
是保存在最终根文件系统中的tmpfs(或devtmpfs)挂载点,因此您仍然可以使用它。