慢启动 - "正在运行一个启动作业,用于 dev-disk-by..."

我不记得问题是什么时候开始出现的,但很可能是当我将我的VMWare Ubuntu镜像移动到外部SSD上,这样我就可以在任何一台电脑上使用这个操作系统了。关于这个问题,在谷歌上并没有太多的链接,但是那些出现的链接都提到了fstab。例如,Slow boot - What is "A start job is running for dev-disk-by..." ? - OpenSUSE Forum

Screenshot

提到了必须删除交换分区并重新创建。

我可以尝试使用Gparted来做这个,但我最担心的是失去我在Ubuntu上的当前设置,因为我不太确定如果按照帖子中建议的方式修改交换分区会发生什么。有人能帮忙吗?


你可能想克隆你的SSD,然后你就可以尽情使用它了 :) (为此,可以尝试使用CloneZilla - Grammargeek
哈哈,是的,我想我可以做到。我会等到假期结束回家后,把它移到一个更宽敞的地方。 - cpd1
1我最终解决了这个问题。根据Gparted的显示,我觉得从来没有进行过交换分区的操作。于是我自己创建了一个交换分区,并在fstab中修改了相应的条目。这样做之后,启动时间不再是90秒了。 - cpd1
1如果你解决了自己的问题,就自己给出答案并点击“确认”来标记为已解决 :) - Grammargeek
1有道理...我已经添加了 - cpd1
16个回答

如果您在每次启动时遇到“正在运行 dev-disk-by...”的起始作业,并伴随着90秒的延迟,请按照以下步骤进行:

  1. 使用软件中心安装 GParted

  2. 打开 GParted,查看 Ubuntu 当前正在使用的分区

  3. 使用下面的命令编辑 fstab 文件:

    sudo -H gedit /etc/fstab

  4. 如果您有一台当前未使用的设备,请在该行的开头插入“#”和一个空格来注释掉该行。

  5. 如果您配置了外部设备以自动挂载(通常带有“nofail”选项),请将以下内容添加到设备的选项中:x-systemd.device-timeout=1ms。这会将设备在启动时挂载的等待时间设置为默认的90秒的1毫秒。示例:

/dev/sdg1        /media/backup    jfs    nofail,x-systemd.device-timeout=1ms    0 0

6. 保存fstab文件(最好先备份)。通过运行“mount -a”命令来测试您的fstab文件。如果出现任何语法错误,该命令会显示出来。
7. 重新启动,应该不会再出现启动作业了。

3逐步说明对每个人都有帮助!谢谢! - John Hall
我将你的标记为答案,因为你给出了步骤。 - cpd1
要查看启动过程中发生的情况,请在显示Ubuntu启动画面/加载画面时按下F12。在我的情况下,交换分区已被删除,因此我也从fstab中将其删除,现在系统可以在2秒内启动! - PeterM
23+1... 对于那些在/etc/fstab中找不到的人,你也可以在/etc/crypttab中查看 - 这就是我的情况。 - Greg
14如果是块ID发生了变化,我更倾向于修复设备ID而不是将其注释掉- 使用lsblk -f命令查看哪个设备与哪个ID相关联,并替换该ID。 - user1708042
6对我来说有效的方法是将步骤4更改为:“复制在gparted中找到的导致启动延迟的设备的UUID”,并将步骤5更改为:“将其替换为fstab文件中找到的设备”。有时当您更改或移动分区时,UUID会发生变化,这就是问题的原因。您只需要修复修改后分区的新UUID即可。 - m4l490n
1这个方法适用于设备已被移除并且不再可用的情况。然而,如果设备或分区已经被替换,它无法恢复功能。要实现功能恢复,您需要将UUID更改为替换设备所使用的UUID。 - David C.
1这对我来说是一个问题,当我升级到Ubuntu 18.04时。现在使用交换文件而不是交换分区,所以升级会删除交换分区,但fstab条目仍然存在。删除它可以减少约90秒的启动时间... 使用"fdisk -l"命令查看是否有交换分区,并寻找"swap"。 - Bim
为了得到更全面的答案,你应该检查一下fstab文件中交换分区和分区的UUID是否与"sudo blkid"命令输出的UUID相匹配,就像Matthew Cordaro在下面所说的那样。 - salouri
@william-macdonald 你能帮我解决一个类似的问题吗? - JJD
在我的情况下,这是一个交换分区,UUID 是正确的,但每次都会运行检查,而且需要大约一分半钟的时间。我应该怎么做才能解决这个问题呢? - carlspring
谢谢...这对我有用。 - thiagoBarbosa48
非常感谢,它起作用了!启动时间减少了90秒! - Arty
这真是个糟糕的主意,毁了我的操作系统,我不得不在恢复模式下回滚。 - A1Gard
我的文件看起来是这样的,请告诉我应该注释哪一行? UUID=e6dd62cf-c1d4-4bbd-ad71-e44f8a94444a / ext4 errors=remount-ro 0 1

/boot/efi was on /dev/sdb1 during installation

UUID=1FDA-A6B6 /boot/efi vfat umask=0077 0 1 /swapfile none swap sw 0 0@A1Gard
- Shahid Karimi
对我来说,问题出在我的EFI分区,因为我的UEFI早些时候也需要重新配置。通过比较/etc/fstab | grep UUID和blkid的文件内容,找到了解决办法。编辑了fstab后,启动时间从nvme上的近2分钟缩短到不到10秒。 - Tmanok
对我来说,和这个案例一样,即在调整分区大小后更改分区UUID。 - Nam G VU
这些指示将会为人们节省无数的时间,很可能减少我们的碳足迹!我会从执行 mount -a 命令开始,看看哪个驱动器无法挂载。然后将其注释掉。除此之外,非常感谢! - undefined

我在调整虚拟机上的主分区大小后遇到了同样的问题,因为gparted live强制我删除并重新初始化交换分区。这导致设置了一个新的UUID,与fstab文件不匹配。
为了避免这个问题,在/etc/fstab中,你可以选择以下任一方法:
  • 在主分区调整大小之后,用新的UUID替换交换分区的UUID(运行sudo blkid以查找新的UUID)。

  • 或者,在主分区调整大小之前(或之后),将交换分区注释掉。

我建议使用前者,因为这是操作系统预期的设置方式。

1在移动我的交换分区后,也帮助了我。 - po.pe
哇!你真是个救命稻草。从/etc/fstab中删除旧的交换分区条目后问题解决了。谢谢。 - ayandebnath

看起来问题是由于即使fstab中有一个交换分区的条目,实际上并没有交换分区。我使用GParted调整了分区大小并创建了一个新的交换分区。然后我将UUID复制到了fstab文件中...
1. 现在我有了交换分区 2. 启动时间缩短到几秒钟而不是90多秒

6我调整了我的主分区(删除/重新创建交换空间),然后遇到了这个问题。我使用了“sudo blkid”命令按UUID列出设备,然后在/etc/fstab中使用了新的UUID。 - Brad Goss

在我的情况下,我之前一直在使用加密的交换空间,并且启动任务中提到了/dev/mapper/cryptswap1。为了解决这个问题,我还需要删除文件/etc/crypttab,除了按照William MacDonald的回答中描述的步骤进行操作。

进一步查找的地方是resume=...内核参数,运行cat /proc/cmdline以查看是否存在该参数。可以将参数替换为noresume作为一种基本修复方法。请参阅https://discussion.fedoraproject.org/t/looking-for-non-existing-swap-partition-during-startup-a-startjob-is-running/6120和https://unix.stackexchange.com/questions/40514/what-is-resume-used-for-in-my-grub-boot-settings。 - MikeBeaton

主要情况:
你需要在这些文件中检查UUID(详细答案已在其他回答中提供...)
/etc/crypttab 
/etc/fstab
/etc/grub.d/40_custom 
/boot/grub2/grub.cfg

备选情况 I - Udev:

如果您在/etc/udev/rules.d/下有一个规则脚本,该脚本不是用于启动时运行的,那么这可能是由udev引起的。如果脚本失败,它将导致fstab步骤无限进行下去,只需编辑您的脚本以满足您的需求或删除它。

备选情况 II - 加密设备:

加密分区可能会令人困惑,因为主分区具有UUID,而映射的解密分区具有与主分区不同的其他UUID。对于单个分区,它们必须在不同的位置定义,即/etc/crypttab/etc/fstab

# lsblk -o name,uuid,mountpoint
├─sda2                         727fa348-8804-4773-ae3d-f3e176d12dac
│ └─sda2_crypt (dm-0)          P1kvJI-5iqv-s9gJ-8V2H-2EEO-q4aK-sx4aDi

需要在etc/crypttab中指定真实的UUID。
# cat /etc/crypttab
sda2_crypt  UUID=727fa348-8804-4773-ae3d-f3e176d12dac  none  luks

虚拟UUID需要放在/etc/fstab中。
# cat /etc/fstab
UUID=P1kvJI-5iqv-s9gJ-8V2H-2EEO-q4aK-sx4aDi / ext4 defaults,errors=remount-ro 0 1

替代情况 III - 鬼设备:

一种在启动时设置为挂载的设备,但在系统中不存在或已分离,例如 USB 驱动器。

使用 lsblk -o name,uuid,mountpoint 命令检查真正连接的设备,并编辑 /etc/fstab 文件,只保留已连接的设备 或者将未连接的设备保留在那里,但在启动时设置为忽略,使用选项 noauto 并将行设置如下:

UUID=BLA-BLA-BLA /mount ext4 option,noauto,option 0 0

检查系统日志

journalctl -ab 

systemd-analyze blame

systemd-analyze critical-chain

systemctl status dev-mapper-crypt_sda2.device

systemctl status systemd-udev-settle.service

来源:Linuxhacks.org 声明:我是Linuxhacks.org的所有者。

2谢谢,那是一个非常好的答案,应该被接受。这里大部分其他的回答都是极其错误的,即使它们绕过了问题,也会引入其他可能不太明显的问题,比如移除交换设备的加密。 - q9f

当使用gparted调整或删除分区时,通常需要创建一个新的交换分区。
然后需要通过gparted激活交换分区(有一个"激活交换"命令)。
此外,还需要将新的UUID复制到/etc/fstab中以挂载它,否则在启动时操作系统将尝试找到它,但是因为fstab文件包含引用旧交换分区的UUID,所以会失败。Gparted提供了UUID的信息,但你也可以在终端中轻松运行该命令:
sudo blkid

找到它。

我在启动时遇到了同样的问题。
在我的/etc/fstab文件中,我的分区被定义为/dev/sda1、/dev/sda2等等,但是在启动时,多次出现了消息"A start job is running for dev-sdx"("x"表示受影响的单元或分区)。
为了解决这个问题,我将/dev/sdx的值更改为分区的UUID。 要查看UUID,请从终端运行lsblk -f命令。 然后,复制受影响分区的UUID,并将其写入/etc/fstab文件,将/dev/sdax替换为如下所示:/dev/sda1变为UUID=xxxxxxxxxxxxxxxxxx。
对我来说有效,希望这些信息对你有用。

是的。这正是UUID解决的问题。系统会根据该ID挂载任何分区,无论它在哪个设备上或者分区位于何处。不过缺点是,每当你销毁/创建分区或安装新驱动器时,都需要更改UUID。而且复制分区(使用gparted的复制/粘贴功能)会创建具有相同UUID的副本,如果原始分区和副本同时在线,可能会引发问题。对于大多数人来说,这没问题,但在克隆/替换驱动器时需要牢记这一点。 - David C.

除了检查其他答案中提到的/etc/fstab/etc/crypttab,还要检查/etc/default/grub中来自内核参数的UUID。有一段时间,我对一个系统感到非常困惑,因为它有一个完全正确的/etc/fstab,但在GRUB配置中发现了一个resume=…的内核参数。

1这帮助我解决了问题。我的/etc/fstab没问题。然后,除了/etc/default/grub之外,我还需要在/boot/efi/EFI/fedora/grub.cfg中进行更改。在我手动修改交换分区后,Linux的"resume=UUID=..."参数变得过时了。 - Stphane

我的启动速度变慢了,因为我更换了硬盘,UUID 不匹配。这导致 Ubuntu 在启动时进行了一次扫描。
我经常更换硬盘。如果你的挂载点总是在同一个位置(就像我的一样),你可以删除 UUID,并直接指定路径,以防止发生扫描错误...
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/sda1 /               ext4    errors=remount-ro 0       1
/dev/sda2 none            swap    sw              0       0

这个建议会如何加快启动速度?有任何参考资料吗? - Mostafa Ahangarha
我正在回答他的错误问题,导致了启动缓慢。我让我的答案更清晰。 - Dan
1是的,通过设备名称挂载可以避免问题,但也会引发UUID(和卷标)旨在解决的问题 - 即将驱动器连接到不同位置(例如从一个SATA接口到另一个)将更改设备名称,破坏您的挂载。您需要决定哪个问题更容易应对,但请确保记住您的决定,因为忘记而导致问题发生时可能会非常令人沮丧。 - David C.

你可以通过使用'Ctrl+c'直接跳过等待,进入登录界面,然后开始解决问题。如果不这样做,有时候会一直等下去。

那是字面上的Ctrl键、加号键和c键吗? - muru
是的,就是这样 :) - Ramon Suarez