由于缺少 /tmp,14.04 安装后启动失败

由于缺少 /tmp,14.04 安装后启动失败

我们有一个机构范围内的 Ubuntu 安装(以前是 12.04),它是从网络安装的,并使用自定义安装程序配置来选择必要的软件包并设置 LDAP 身份验证。除此之外,它是一个普通的 Ubuntu。

我们现在正尝试为 14.04 设置此安装程序。我们可以通过网络成功安装我们的配置,但第一次启动失败,并显示/tmp不可用的消息。机器当时对任何按键都没有反应(所以我无法跳过或执行手动恢复)。启动过程也非常慢(需要一分钟以上才能显示有关 /tmp 的消息)。

我找到了一个有用的解决方法。安装后,我需要启动一次恢复模式。在恢复菜单中,我需要选择network(安装分区和配置网络),然后选择resume。现在系统启动正常,任何后续启动(即使没有恢复模式)也正常。因此无需手动修复,只需进行一次“特殊”启动即可。

如果我跳过network恢复菜单中的步骤并直接进入resume,则不起作用。如果我在该network步骤之后立即重新启动(而不进入resume),它也不起作用。

我手动执行了一次并从恢复菜单进入了 root shell,当时一切看起来都很好(运行步骤之前和之后network)。

我比较了运行该步骤之前和之后的/etc差异,没有太大差异(只是 DHCP 租约和登录符合预期)。/varnetwork/var

现在我的问题是,这次启动过程中与正常启动有什么不同?我猜,在第一次启动时还有一些安装任务,而这些任务在正常启动时无法完成,但它们可能是什么?也许network从恢复菜单手动执行该步骤会改变某些操作的顺序,从而解决问题?

我可以在安装结束时、首次启动之前修复这些问题吗(无论如何我们都在那个阶段运行一个脚本)以便一切正常运行?

我该如何调试这些问题并提供更多信息来帮助您?哪些文件在启动过程中可能会发生变化并且可能很有趣?我可以重现问题和解决方法,因此我可以提供所需的尽可能多的信息。

我们对整个站点的调整仅影响 LDAP 身份验证和 NFS 主目录,而不会影响启动过程或分区。在安装过程中,会创建一个根分区 (ext4) 和一个交换分区,不会再创建其他分区。这是传统启动(无 UEFI)。

编辑:我进一步调试了一下。安装后,我需要执行以下步骤一次:

  1. 启动恢复模式并启动 root shell
  2. 跑步mountall
  3. 跑步ifup -a

之后,一切都很顺利。所有三个步骤都比预期花费的时间多得多(每个步骤大约一分钟)。完成后,启动只需几秒钟(机器有 SSD)。

答案1

仔细检查了正常运行的系统和出现故障的系统上的目录之间的差异后/etc,我找到了解决方案。

问题nss_initgroups_ignoreusers在于 中缺少一行/etc/ldap.conf。此行列出了所有本地用户,并阻止系统在查找这些用户时访问 LDAP 目录。此行在每次启动时都会自动创建/usr/sbin/nssldap-update-ignoreusers,但使用我的安装方法,它在第一次启动时丢失了。因此,在第一次启动期间,系统在建立网络连接之前尝试从 LDAP 查找用户信息。当然,这失败了。

我现在添加了/usr/sbin/nssldap-update-ignoreusers在安装和首次启动之间运行的脚本的调用,现在一切正常。

相关内容