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