启动缓慢:systemd-udev-settle.service

And*_* co 7 xubuntu boot systemd 16.04

最近,在谷歌中听说 xubuntu 后,我刚刚再次从 Windows 切换到 Linux,我喜欢它!
它快速且可靠。

但是,我想知道为什么我需要大约 1 分钟的时间来启动?

我在这个论坛和其他地方读过,大多数人都说,启动时间通常只有 20 - 30 秒

所以我做了一些研究并提出了

  $ systemd-analyze blame
  8.234s systemd-udev-settle.service
  8.198s dev-mapper-xubuntu\x2d\x2dvg\x2droot.device
  6.717s NetworkManager-wait-online.service
  5.170s ufw.service
  4.196s systemd-rfkill.service
  4.162s NetworkManager.service
  2.971s systemd-udevd.service
  2.830s ModemManager.service
  2.555s accounts-daemon.service
  2.019s thermald.service
  2.004s snapd.refresh.service
  1.801s networking.service
  1.790s systemd-tmpfiles-setup-dev.service
  1.726s grub-common.service
  1.572s systemd-journald.service
  1.536s systemd-modules-load.service
  1.448s irqbalance.service
  1.434s lightdm.service
  1.425s apport.service
  1.392s keyboard-setup.service
  1.377s upower.service
  1.287s plymouth-start.service
  1.126s lvm2-activation-early.service
  1.075s ondemand.service
   968ms apparmor.service
   917ms gpu-manager.service
   917ms polkitd.service
   911ms rsyslog.service
   857ms systemd-udev-trigger.service
   795ms systemd-logind.service
   755ms speech-dispatcher.service
   743ms colord.service
   705ms lm-sensors.service
   673ms dev-hugepages.mount
   666ms plymouth-read-write.service
   600ms avahi-daemon.service
   586ms systemd-backlight@backlight:acpi_video0.service
   557ms resolvconf.service
   518ms dev-mqueue.mount
   515ms sys-kernel-debug.mount
   485ms kmod-static-nodes.service
   479ms systemd-sysctl.service
   471ms console-setup.service
   433ms udisks2.service
   355ms lvm2-monitor.service
   352ms lvm2-activation.service
   350ms wpa_supplicant.service
   328ms lvm2-activation-net.service
   309ms binfmt-support.service
  8.234s systemd-udev-settle.service
  8.198s dev-mapper-xubuntu\x2d\x2dvg\x2droot.device
  6.717s NetworkManager-wait-online.service
  5.170s ufw.service
  4.196s systemd-rfkill.service
  4.162s NetworkManager.service
  2.971s systemd-udevd.service
  2.830s ModemManager.service
  2.555s accounts-daemon.service
  2.019s thermald.service
  2.004s snapd.refresh.service
  1.801s networking.service
  1.790s systemd-tmpfiles-setup-dev.service
  1.726s grub-common.service
  1.572s systemd-journald.service
  1.536s systemd-modules-load.service
  1.448s irqbalance.service
  1.434s lightdm.service
  1.425s apport.service
  1.392s keyboard-setup.service
  1.377s upower.service
  1.287s plymouth-start.service
  1.126s lvm2-activation-early.service
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,列表中的前三个是我认为启动缓慢的原因,我已经查找了有关的问题systemd-udev-settle,但我找不到任何答案。

那么,systemd-udev-settle 是什么?我需要它吗?
我怎样才能加快启动速度?

我的硬件:

  • 旧电脑,配备 Intel Atom N570、320HDD
  • 2 GB RAM (DDR3) 运行 xubuntu 16.04(全新安装)

ps:我很抱歉我的英语不好,如果这个问题是重复的,请随时标记它,我真的需要帮助。

感谢任何形式的帮助,谢谢!

zpa*_*win 11

由于我迟到了几年,我将尝试为来自搜索引擎、出于相同原因对相同服务感兴趣的人们更多地回答这个问题(阅读:可能是未来的我?)。

\n

注意:这没有ubuntu 系统上进行测试,但应该与发行版无关(如果重要的话,我目前正在使用 Fedora)。最后我检查了一下,只有问题仅限于 ubuntu(例如,答案可以是通用的/与发行版无关的),无论如何,在过去 4 年里没有人试图回答这个问题。对于大多数使用 systemd 的 Linux 发行版来说,这个答案应该是相同的(包括 Ubuntu,我确实测试了它的衍生发行版)

\n
$ systemctl status systemd-udev-settle.service\n\xe2\x97\x8f systemd-udev-settle.service - Wait for udev To Complete Device Initialization\n....\n
Run Code Online (Sandbox Code Playgroud)\n

该服务本身提供的描述相当模糊,没有提供太多内容。

\n

据我所知,网上关于这项服务的信息也很少。

\n

2015 年 5 月的一份 debian bug 邮件列表中的一条评论将其描述为:

\n
\n

我对 systemd-udev-settle masked 的搜索告诉我它是关于“假\n块设备存储技术”(在我的例子中是 mdadm - raid)

\n
\n

同样,freedesktop.org systemd 优化页面(2013 年 5 月更新)指出:

\n
\n
    \n
  1. 确保不要使用任何虚假的块设备存储技术,例如 LVM(各种发行版默认安装的,包括 Fedora),它们会导致 systemd-udev-settle.service 单元被拉入。 结算设备枚举速度缓慢、不稳定并且大多已过时。由于 LVM(仍然)尚未更新以正确处理 Linux 基于事件的设计,因此仍然需要解决设备枚举,但它会大大减慢启动速度。在 Fedora 上,使用“systemctl mask fedora-wait-storage.service fedora-storage-init-late.service fedora-storage-init.service”来摆脱所有这些存储技术。当然,如果您实际上使用 LVM 安装了系统,请不要尝试此操作。(目前唯一能够正确处理这一切并且不需要解决设备枚举的假块设备存储技术是 LUKS 磁盘加密。)
  2. \n
\n
\n

由此,我得到的印象是,就像默认启用的其他几个服务一样,我尝试过的许多发行版都lvm2-monitor.service默认启用了 AFAIK 仅当使用 LVM 时才有用(对于那些不熟悉的人...这可能是有点过于简单化,但有点像软件 RAID 或逻辑层,可以使多个硬盘驱动器假装它们是一个硬盘驱动器 - 换句话说,它不太可能被新手或新手使用甚至不知道 LVM 是什么的人)。Fedora 33 和 Linux Mint 19 中肯定存在这种情况,我怀疑许多其他发行版也是如此,包括 ubuntu(它在 OP 的systemd-analyze blame输出中列出)。

\n

与 类似lvm2-monitor.service,这systemd-udev-settle.service似乎与 LVM 等“假块设备存储技术”有关。debian 邮件列表提到它已在某人的系统上被禁用,因此禁用它似乎不太可能导致重大问题,除非专门设置了 LVM 或类似的东西。如果您想禁用它,我建议您也禁用它(lvm2-monitor.service如果您还没有这样做)。

\n

我目前没有在我的设置中使用任何 LVM 内容,并计划在第二天左右有时间时测试禁用它。我将尝试报告是否遇到任何严重问题/任何功能停止工作

\n
\n

更新:绝对不是任何系统关键(不影响启动/登录/图形内容),我仍然可以正常上网/访问所有已安装的 fstab 磁盘。~~我确实注意到我的用户空间时间在systemd-analyze有点高(2-4 秒),但我不确定该值是平均值还是只是前一次启动的时间。我怀疑是后者,在这种情况下,由于硬件计时(例如 fstab 安装上线、连接到以太网等),可能会出现轻微但正常的波动。~~

\n
\n

更新 2:这最终稳定下来,比我在扰乱服务之前的初始时间少了大约 1-2 秒;可能是由于我之前提到的较小的硬件时间波动。在测试此服务的同时,我还禁用了其他几个服务。我在 Fedora 33 上禁用的服务的完整列表(我也在 LM20 上测试/禁用过):

\n
# don\'t run the following if you are booting your os from a\n# a networked drive rather than a SSD/HDD\n# (very very rare for home users):\nsudo systemctl disable NetworkManager-wait-online.service\n \n# don\'t run the following if you use dial-up internet:\nsudo systemctl disable pppd-dns.service\n \n# don\'t run the following if you use wifi:\nsudo systemctl disable wpa_supplicant.service\n \n# don\'t run the following 2 if you use LVM:\nsudo systemctl mask lvm2-monitor.service\nsudo systemctl mask systemd-udev-settle.service\n
Run Code Online (Sandbox Code Playgroud)\n

最初,我还禁用(并屏蔽)了该网站accounts-daemon.service,因为该网站已将其列为“潜在的安全风险”。然而,经过多次调试,我最终发现它直接导致了 Fedora-33(肉桂)下的肉桂屏保和肉桂锁屏的损坏。奇怪的是,这两种方法在 LM-20 下都工作得很好。在我的测试期间,两个发行版都运行 Cinnamon 4.8.6。

\n

我对上述内容的唯一线索是一条日志条目~/.xsession-errors

\n
(cinnamon-screensaver:2381): accountsservice-WARNING **: 02:43:13.941: ActUserManager: user (null) has no username (uid: -1)\n
Run Code Online (Sandbox Code Playgroud)\n

经过大量搜索后,我在这个redhat bug 报告中看到了类似的错误文本,它碰巧提到了帐户服务并让灯泡熄灭了。运行sudo systemctl unmask accounts-daemon.service; sudo systemctl enable accounts-daemon.service; reboot屏幕保护程序和锁屏后再次正常工作。

\n
\n

更新 3:我将作为相关主题提到的另一件事/我在之前的更新中暗示过的是,启动计时可能会受到硬件的影响。将主操作系统安装到 SSD 几乎总是比安装到 HDD 更快,而且这两种操作系统几乎总是比从网络共享启动更快。但即使没有 SSD,HDD RPM(每分钟转数)也可能是一个因素。

\n

但除此之外,我们假设您已将操作系统安装到可用的最快介质上。如果您有其他响应缓慢的硬件,您仍然可能会遇到一些启动延迟。我的 DVD 驱动器曾经出现过一次故障,导致启动时间增加了大约 1 分钟。拔掉它有很大帮助(我不记得是驱动器还是电缆,但值得检查这两种情况)。在其他设置中,我发现连接许多已定义挂载点的 HDD/etc/fstab也会导致速度变慢。如果您有其他 HDD,我建议您在 fstab 中定义它们的超时时间(2-10 秒之间)。

\n

在 fstab 中,我使用以下选项进行安装,以将其限制为每个 HDD 最多 3 秒(我建议至少将其保持在 2 秒以上):

\n
# example, this will\n# 1. mount the indicated ext4 HDD to /gaming\n# 2. if the drive fails/is removed, don\'t abort the boot process\n# 3. if the drive fails/is removed, don\'t spend more than 3s looking for it\n# the default is that systemd will spend up to 90s PER DEVICE\n# see https://wiki.archlinux.org/index.php/Fstab\n# and https://www.freedesktop.org/software/systemd/man/systemd.mount.html\nUUID=<my hdd\'s uuid>     /gaming     ext4    defaults,nofail,x-systemd.device-timeout=3s,nodev,user,exec 0 0\n \n# something similar but for nfts (e.g. for a windows dual-boot)\nUUID=<my other hdd uuid>   /media/d    ntfs-3g  defaults,nofail,x-systemd.device-timeout=3s,windows_names,locale=en_US.utf8,uid=1000  0 0\n
Run Code Online (Sandbox Code Playgroud)\n

如果您怀疑这可能是一个因素/想排除它。首先,记下当前的启动时间。然后备份/etc/fstab并注释掉除/和的安装之外的所有内容/home(如果您的主目录位于不同的分区上)。关闭并拔掉所有 DVD/HDD/USB/等的电源,除了主驱动器(如果有的话还有家庭驱动器)和最低硬件 - 键盘 + 鼠标。然后启动并记下新的启动时间。如果明显不同,请一次插入一个,直到找到罪魁祸首(这是我发现有故障的 DVD 驱动器/电缆时必须做的事情)。

\n

资料来源:

\n
    \n
  1. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=786942
  2. \n
  3. https://freedesktop.org/wiki/Software/systemd/Optimizations/
  4. \n
\n