Linux 启动期间自动装入单独分区时systemd/udev依赖项失败

Linux 启动期间自动装入单独分区时systemd/udev依赖项失败,linux,udev,buildroot,systemd,Linux,Udev,Buildroot,Systemd,EDIT:当我试图对任何装入点使用单独的分区时,而不仅仅是/var 我正在使用Buildroot构建一个嵌入式linux系统。我试图为/var使用一个单独的分区,但对于任何装载点都会出现这种情况。我的init系统是systemd,udev用于设备管理。我已将我的fstab编辑为: # <file system> <mount pt> <type> <options> <dump> <pas

EDIT:当我试图对任何装入点使用单独的分区时,而不仅仅是
/var

我正在使用Buildroot构建一个嵌入式linux系统。我试图为/var使用一个单独的分区,但对于任何装载点都会出现这种情况。我的init系统是systemd,udev用于设备管理。我已将我的fstab编辑为:

# <file system> <mount pt>     <type>   <options>                <dump> <pass>
/dev/root       /              ext2     rw,noauto                0      1
/dev/mmcblk0p4  /var           ext2     defaults                 0      2
proc            /proc          proc     defaults                 0      0
devpts          /dev/pts       devpts   defaults,gid=5,mode=620  0      0
tmpfs           /dev/shm       tmpfs    mode=0777                0      0
tmpfs           /tmp           tmpfs    defaults                 0      0
sysfs           /sys           sysfs    defaults                 0      0
tmpfs           /run           tmpfs    defaults                 0      0
#
/dev/root/ext2rw,noauto01
/dev/mmcblk0p4/var ext2默认值0 2
proc/proc proc默认值0
devpts/dev/pts devpts默认值,gid=5,mode=6200
tmpfs/dev/shm tmpfs模式=0777 0
tmpfs/tmp tmpfs默认值为0
sysfs/syssysfs默认值0
tmpfs/运行tmpfs默认值0
系统启动后,我收到一条消息“期待设备dev-mmcblk0p4.device…”,最后是:

等待设备dev-mmcblk0p4.device时超时。

对/var的依赖项失败。

本地文件系统的依赖项失败。


如果我使用
/var2
或其他任何东西作为挂载点而不是
/var
,也会发生同样的情况。一旦启动失败,它将进入紧急模式,然后装载将成功进行。然后我可以退出系统维护,一切正常。是什么导致这次延迟装载??我漏了一步吗

输出屏幕截图:


能够解决这个问题,尽管这是一种黑客行为。我仍然很想知道为什么会发生这种情况,但是看起来好像在systemd init完成之前udev没有安装mmcblk分区,如果
/etc/fstab
调用mmcblk分区,这会导致依赖项错误。udev检查
fstab
,等待安装mmcblk设备并超时,然后尝试安装该设备

我的解决方案:

1) 创建systemd服务以处理安装分区:

#/etc/systemd/system/mount-data-partition.service
[Unit]
Description=Mount Data Partition
DefaultDependencies=no

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/mount /dev/mmcblk0p4

2) 在
systemd udev触发器中向此服务添加
所需的
依赖项。服务

#/usr/lib/systemd/system/systemd-udev-trigger.service
[Unit]
Description=udev Coldplug all Devices
Documentation=man:udev(7) man:systemd-udevd.service(8)
DefaultDependencies=no
Wants=systemd-udevd.service mount-data-partition.service
After=systemd-udevd-kernel.socket systemd-udevd-control.socket
Before=sysinit.target
ConditionCapability=CAP_MKNOD

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/udevadm trigger --type=subsystems --action=add ; /usr/bin/udevadm trigger

这会导致在
systemd udev trigger.service
之前调用并执行
mount data partition.service
。然后,
mount
命令将在
/etc/fstab
中查找
/dev/mmcblk0p4
,并按指定方式装载(在我的情况下,
/var
)。由于现在安装了
/dev/mmcblk0p4
,因此udev可以识别设备存在,并且在等待设备时不再超时。系统继续正常引导


我不想回答自己的问题,但希望这些信息能帮助别人。如果有人能告诉我为什么会发生这种情况,请告诉我。

我在Exherbo(类似于Gentoo)下使用内核为3.13.1和3.14.4的systemd-208时遇到了类似的问题:我的单独分区(/var、/home、/boot甚至/swap)安装在所需的根位置下。一切都很顺利。然后,升级到systemd 213时,启动过程在该点停止,此时分区应已装入,并显示消息:“dev sdxx.device的启动作业正在运行”,直到超时1分钟30秒。之后我进入了紧急状态。 摘录

$ journalctl -xb

Jun 09 13:50:29 exathlon systemd[1]: Job dev-disk-by\x2dlabel-BAK_A4.device/start timed out.
Jun 09 13:50:29 exathlon systemd[1]: Timed out waiting for device dev-disk-by\x2dlabel-BAK_A4.device.
Jun 09 13:50:29 exathlon systemd[1]: Dependency failed for /mnt/BAK_A4.
Jun 09 13:50:29 exathlon systemd[1]: Dependency failed for Local File Systems.
Jun 09 13:50:29 exathlon systemd[1]: Triggering OnFailure= dependencies of local-fs.target.
Jun 09 13:50:29 exathlon systemd[1]: Dependency failed for /export/LinuxMint13_KDE_64.
Jun 09 13:50:29 exathlon systemd[1]: Dependency failed for /export/SystemRescueCD-x86.
Jun 09 13:50:29 exathlon systemd[1]: Dependency failed for File System Check on /dev/disk/by-label/BAK_A4.
Jun 09 13:50:29 exathlon systemd[1]: Job dev-sdb11.device/start timed out.
Jun 09 13:50:29 exathlon systemd[1]: Timed out waiting for device dev-sdb11.device.
Jun 09 13:50:29 exathlon systemd[1]: Dependency failed for /var.
Jun 09 13:50:29 exathlon systemd[1]: Dependency failed for Update UTMP about System Boot/Shutdown.
Jun 09 13:50:29 exathlon systemd[1]: Dependency failed for Load/Save Random Seed.
Jun 09 13:50:29 exathlon systemd[1]: Dependency failed for File System Check on /dev/sdb11.
Jun 09 13:50:29 exathlon systemd[1]: Job dev-sdb8.device/start timed out.
Jun 09 13:50:29 exathlon systemd-journal[1044]: Forwarding to syslog missed 15 messages.
Jun 09 13:50:29 exathlon systemd[1]: Timed out waiting for device dev-sdb8.device.
Jun 09 13:50:29 exathlon systemd[1]: Dependency failed for /home.
Jun 09 13:50:29 exathlon systemd[1]: Dependency failed for File System Check on /dev/sdb8.
Jun 09 13:50:29 exathlon systemd[1]: Job dev-sda6.device/start timed out.
Jun 09 13:50:29 exathlon systemd[1]: Timed out waiting for device dev-sda6.device.
Jun 09 13:50:29 exathlon systemd[1]: Dependency failed for /boot.
Jun 09 13:50:29 exathlon systemd[1]: Dependency failed for File System Check on /dev/sda6.
Jun 09 13:50:29 exathlon systemd[1]: Job dev-sdb5.device/start timed out.
Jun 09 13:50:29 exathlon systemd[1]: Timed out waiting for device dev-sdb5.device.
Jun 09 13:50:29 exathlon systemd[1]: Dependency failed for /dev/sdb5.
显示systemd装载失败的尝试

在查找了internet之后,我找到了一个补救办法,用

CONFIG_FHANDLE=y (before: n)
请参阅下面的“systemd系统和服务管理器”

REQUIREMENTS:
 CONFIG_FHANDLE (libudev, mount and bind mount handling)
资料来源:

问题解决后,所有分区都重新装入


我不知道为什么systemd 208没有出现这种情况/或者不需要出现这种情况。

有一点,但应该提到的是,在ALTLinux(209210)中捆绑了systemd之后,我还没有意识到在相当复杂的配置上出现这种错误(/usr、/var、/home在单独的pertion上,并且都在不同类型的raid卷上)。因此,我猜问题可能是由“非详细”配置和/或initrd引起的。我想你是从SD卡启动的,对吧?我想你应该在相应的udev
add
event?@user3159253上引入一个人工依赖项是的,从SD卡引导。不幸的是,我不得不使用一个较旧的非主线内核版本,所以我担心正如您所建议的,有一个bug可能会导致这种情况。这似乎是一个简单的改变,虽然。。。我会继续寻找更多的信息。你能检查一下systemd的版本吗?如果低于208,你可以简单地更新一下吗?当前的版本是202。今天下午我将尝试更新并发布结果。将systemd更新为208,同一期。@marsh给出了正确的答案,但您的解决方案对我帮助很大,因为我无法在我的上下文中轻松更新内核。我添加了一个sysinit.service作为符号链接,因为我不使用udev,但它可以正常工作。非常感谢你!从Opensuse 13.1更新到13.2,这里也有同样的问题!需要很长时间才能找到这个解决方案!谢谢!!!!!在Archlinux上对我不起作用:
zgrep CONFIG\u FHANDLE/proc/CONFIG.gz
显示选项已启用(
y
),但问题仍然存在。@Hi Angel您是否使用LUKS?@webKnjaZ nope。