启动缓慢 - “正在为 dev-disk-by 运行启动作业...”

cpd*_*pd1 150 boot swap

我不记得问题是什么时候开始出现的,但很可能是在我将 VMWare Ubuntu 映像移动到外部 SSD 以便我可以在我的任何 PC 上使用操作系统时。谷歌上关于这个问题的链接并不多,但出现的链接是关于fstab. 例如,慢启动 - 什么是“A start job is running for dev-disk-by...”?- OpenSUSE 论坛

截屏

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

我可以尝试使用 Gparted 来做到这一点,但我主要担心的是会丢失我在 Ubuntu 中的当前设置,因为我不完全确定如果我按照线程中的建议弄乱了交换会发生什么。任何人都可以提供帮助?

Pyr*_*yph 155

如果你得到

正在为 dev-disk-by 运行启动作业...

在每次引导期间有 90 秒的延迟,请完成以下步骤:

  1. 使用软件中心安装 GParted

  2. 打开 GParted 并查看 Ubuntu 当前使用的分区

  3. 使用以下行编辑 fstab 文件。

    须藤 -H gedit /etc/fstab

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

  5. 如果您将外部设备配置为自动挂载(通常带有一个nofail选项),请将其添加到设备的选项中:x-systemd.device-timeout=1ms。这会将启动时要挂载的设备的等待时间设置为默认 90 秒的 1ms。例子:

/dev/sdg1        /media/backup    jfs    nofail,x-systemd.device-timeout=1ms    0 0
Run Code Online (Sandbox Code Playgroud)
  1. 保存 fstab 文件(最好事先保存备份)。通过运行测试您的 fstab 文件mount -a。如果出现任何语法错误,该命令会显示出来。

  2. 重新启动,启动作业不应再次出现。

  • +1...对于那些在`/etc/fstab` 中找不到它的人,你也可以在`/etc/crypttab` 中查看它——这就是我的情况。 (13认同)
  • 如果是块 id 发生了变化,与其将其注释掉,我更喜欢修复设备 id - 使用 lsblk -f 来查看哪个设备与哪个 id 相关联并替换 id。 (13认同)
  • 对我有用的是将第 4 步更改为:“复制在 gparted 中找到的导致启动延迟的设备的 UUID”,并将第 5 步更改为:“将其替换为在 fstab 文件中找到设备的位置”。有时,当您更改移动分区时,UUID 会发生变化,这就是导致问题的原因。您只需要为修改后的分区修复新的 UUID。 (5认同)
  • 分步说明对每个人都有帮助!谢谢! (3认同)

Mat*_*aro 48

由于gparted live迫使我删除并重新初始化我的交换,因此在我的 VM 上调整我的主分区大小后,我遇到了同样的问题。这导致设置了与 fstab 文件不匹配的新 UUID。

为了避免这个问题,/etc/fstab你可以

  • sudo blkid调整主分区大小后,将交换 UUID 替换为新的 UUID(运行以找到它)。

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

我会推荐前者,因为这是操作系统的设置方式。


cpd*_*pd1 41

看起来这个问题是由于这样一个事实,即使 fstab 有一个交换条目,实际上没有一个。我使用 GParted 调整分区大小并创建了一个新的 Swap。然后我将 UUID 复制到 fstab 文件中...

  1. 我现在有交换
  2. 启动时间缩短到几秒钟之内,而 90 秒以上

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

Kal*_*mér 19

就我而言,我之前一直在使用加密交换,并且启动作业提到了/dev/mapper/cryptswap1. 为了解决这个问题/etc/crypttab,除了威廉麦克唐纳的回答中描述的步骤之外,我还必须删除文件。


int*_*ika 13

主要情况:

您需要检查这些文件下的 UUID(在其他答案中详细回答...)

/etc/crypttab 
/etc/fstab
/etc/grub.d/40_custom 
/boot/grub2/grub.cfg
Run Code Online (Sandbox Code Playgroud)

替代情况 I - Udev:

这可能是由udev引起的,如果您有一个不打算在启动时运行的规则脚本/etc/udev/rules.d/,如果脚本失败,它将使 fstab 步骤永远继续,只需编辑您的脚本以满足您的需要或将其删除。

替代情况 II - Crypted Dev:

加密分区可能会令人困惑,因为主分区有一个 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
Run Code Online (Sandbox Code Playgroud)

需要在中指定真实的 UUID etc/crypttab

# cat /etc/crypttab
sda2_crypt  UUID=727fa348-8804-4773-ae3d-f3e176d12dac  none  luks
Run Code Online (Sandbox Code Playgroud)

虚拟 UUID 需要在 /etc/fstab

# cat /etc/fstab
UUID=P1kvJI-5iqv-s9gJ-8V2H-2EEO-q4aK-sx4aDi / ext4 defaults,errors=remount-ro 0 1
Run Code Online (Sandbox Code Playgroud)

替代情况 III - Ghost Dev:

设置为在启动时挂载但不存在于系统中或像 USB 驱动器一样分离的设备。

检查真实连接的设备lsblk -o name,uuid,mountpoint并编辑/etc/fstab以仅保留连接的设备 将未连接的设备留在那里,但使用选项将它们设置为在启动时被忽略,noauto并像这样设置行

UUID=BLA-BLA-BLA /mount ext4 option,noauto,option 0 0
Run Code Online (Sandbox Code Playgroud)

检查系统日志

journalctl -ab 

systemd-analyze blame

systemd-analyze critical-chain

systemctl status dev-mapper-crypt_sda2.device

systemctl status systemd-udev-settle.service
Run Code Online (Sandbox Code Playgroud)

资料来源:Linuxhacks.org
披露:我是 Linuxhacks.org 的所有者

  • 谢谢,这是一个很好的答案,应该被接受。这里的大多数其他答案都是危险的错误,即使它们_规避_问题,它们也会引入其他可能不太明显的问题,例如删除交换设备的加密。 (2认同)

Ale*_*cal 8

使用 gparted 调整大小或删除分区时,您通常必须创建一个新的交换分区。

然后有必要在创建后通过 gparted 激活交换(有命令“激活交换”)。

此外,您必须将新的 UUID 复制到 /etc/fstab 中以挂载它,否则在启动时操作系统将尝试找到它但徒劳无功,因为 fstab 文件包含引用旧交换的 UUID。Gparted 提供 UUID 的信息,但您可以轻松地在终端中运行:

sudo blkid
Run Code Online (Sandbox Code Playgroud)

找到它。


小智 6

我在启动时遇到了同样的问题。

在我的/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.

它对我有用,我希望这些信息有用。