了解Linux启动过程,子系统初始化和udev规则?

我正在为无人主机服务器上的自动挂载外部驱动器创buildUDEV规则,这与Gnome-VFS在用户会话期间自动挂载的方式大致相同。

我关心这个规则在开机时的行为。 有一个很好的机会之一,这些驱动器将启动时连接,我宁愿任何连接的驱动器安装在正确的地方。 驱动器可能是USB或Firewire,并且它们是从UDEV触发的shell脚本检测到“add”时挂载的。

这是我的问题:

  1. 当UDEV在启动时运行这些设备的mount时,系统是否准备好挂载它? 或者脚本会被触发得太早?

  2. 如果太早,脚本有什么好的方法来告诉系统还没有准备好(睡觉前再睡一会儿)?

  3. UDEV规则匹配ACTION=="add" 。 这个事件甚至会在系统启动时触发吗?

没有运行gui的情况下(而不是使用autofs),刚刚挤满了udev以获得U盘的自动挂载。

  1. 是的veronica,udev运行得非常早。

    代理脚本可以在睡眠之后愉快地分离和运行。

  2. udevadm解决可能会帮助你在这里除了检查运行级别。

  3. action =“Add”在启动时运行,而不仅仅是hotplug。

在关机时是否执行action =“remove”,现在这是一种不同颜色的鱼。

你正在混淆两个概念。 您应该使用UDEV将持久性设备名称分配给永久性驱动器,而不pipe它们连接的顺序如何。 然后,您可以使用autofs在需要的地方按需安装它们。

我不认为udev规则是这个的首选解决scheme。 我觉得一旦系统启动后,你可以用autofs或者ivman更好地服务,udev是一个非常低的层次,在这个层次上,像Gnome-VFS一样,在你的文章中build立了很多工具。使用和pipe理。 最终,你担心访问(即autofs)和具有可预测的高级机制来检测或响应故障。 如果你在udev级别工作,你将不得不再次解决所有这些问题。

  1. 不,在系统准备好挂载之前,UDEV将会closures这个脚本(如果有的话)。 UDEV从/etc/rcS.d/S03udev开始,标准的fstab装载在/etc/rcS.d/S35mountall.sh发生。

  2. 比猜测好; check / bin / runlevel(感谢Brent & rh0dium ):

     # at boot, system runs /etc/rcS.d/S* scripts, # then /etc/rcN.d/S* scripts, N is destination runlevel # runlevel not set at least until we're running /etc/rcN.d scripts RUNLEVEL=`/sbin/runlevel | cut -d " " -f 2` until [ $RUNLEVEL -ge 1 ] && [ $RUNLEVEL -le 6 ]; do sleep 10 RUNLEVEL=`/sbin/runlevel | cut -d " " -f 2` done ## run the action i want here 
  3. 不确定。