为什么克隆硬盘后,在启动周期的早期会出现 20-30 秒的暂停?

为什么克隆硬盘后,在启动周期的早期会出现 20-30 秒的暂停?

我看过一些其他关于这个主题的帖子。只有一两个与我的情况非常接近,但没有明确的解决方案。我想具体描述一下我的情况,因为我有一些其他帖子没有的细节。

我正在运行 Ubuntu 22.04.3 LTS。我有一个普通的 SATA HDD 作为我的“系统”驱动器,它有 3 个分区:

  • /boot- 这是我指定的启动分区
  • /- 这是我的系统驱动器,其中包含其他所有内容
  • swap

我刚刚将我的 SATA 硬盘克隆到 SATA 固态硬盘,所有分区都相同。但现在 UUID 不同了(我更改了它们,因为我希望在某个时候可以同时安装两个驱动器)。我/etc/fstab用新的 UUID 进行了更新,并通过一些研究将文件更改/etc/initramfs-tools/conf.d/resume为不引用旧的交换 UUID。

更换新的 SSD 后,启动正常,但在启动过程初期会出现 20-30 秒的死寂停顿(无磁盘活动)。以下是发生这种情况的摘录:

[    2.498174] scsi 6:0:0:0: Direct-Access     TEAC     USB   HS-CF Card 4.08 PQ: 0 ANSI: 0
[    2.501897] scsi 6:0:0:1: Direct-Access     TEAC     USB   HS-xD/SM   4.08 PQ: 0 ANSI: 0
[    2.505707] scsi 6:0:0:2: Direct-Access     TEAC     USB   HS-MS Card 4.08 PQ: 0 ANSI: 0
[    2.509122] scsi 6:0:0:3: Direct-Access     TEAC     USB   HS-SD Card 4.08 PQ: 0 ANSI: 0
[    2.509357] sd 6:0:0:0: Attached scsi generic sg3 type 0
[    2.509936] sd 6:0:0:1: Attached scsi generic sg4 type 0
[    2.511152] sd 6:0:0:2: Attached scsi generic sg5 type 0
[    2.512435] sd 6:0:0:3: Attached scsi generic sg6 type 0
[    2.514823] sd 6:0:0:0: [sdc] Media removed, stopped polling
[    2.519575] sd 6:0:0:1: [sdd] Media removed, stopped polling
[    2.528168] sd 6:0:0:0: [sdc] Attached SCSI removable disk
[    2.533063] sd 6:0:0:2: [sde] Media removed, stopped polling
[    2.541980] sd 6:0:0:1: [sdd] Attached SCSI removable disk
[    2.550871] sd 6:0:0:2: [sde] Attached SCSI removable disk
[    2.559421] sd 6:0:0:3: [sdf] Media removed, stopped polling
[    2.572356] sd 6:0:0:3: [sdf] Attached SCSI removable disk
[   33.540466] EXT4-fs (sda5): mounted filesystem with ordered data mode. Opts: (null). Quota mode: none.
[   33.703038] systemd[1]: Inserted module 'autofs4'
[   33.718092] systemd[1]: systemd 249.11-0ubuntu3.11 running in system mode (+PAM +AUDIT +SELINUX +APPARMOR +IMA +SMACK +SECCOMP +GCRYPT +GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN +IPTC +KMOD +LIBCRYPTSETUP +LIBFDISK +PCRE2 -PWQUALITY -P11KIT -QRENCODE +BZIP2 +LZ4 +XZ +ZLIB +ZSTD -XKBCOMMON +UTMP +SYSVINIT default-hierarchy=unified)
[   33.731050] systemd[1]: Detected architecture x86-64.
[   33.736943] systemd[1]: Hostname set to <musicman>.
[   33.951287] systemd[1]: Queued start job for default target Graphical Interface.
[   33.953273] systemd[1]: Created slice Slice /system/modprobe.

请注意,此处显示sdc通过sdf。我的系统上挂有一个带有 4 个插槽的旧 SD 卡读卡器。它已经存在很长时间了,即使在我使用旧 HDD 时也是如此。我没有将它们自动安装在我的 中fstab,如下所示:

# <file system>                           <mount point>   <type>  <options>         <dump>  <pass>
# / was on /dev/sda6 during installation
UUID=52de13f0-4bc6-4b65-95b3-ea3144b51cef /               ext4    errors=remount-ro 0       1
# /boot was on /dev/sda1 during installation
UUID=8c68f915-02a3-417f-8eae-c4f3b135805a /boot           ext2    defaults          0       2
# swap was on /dev/sda5 during installation
UUID=e3355472-3ec2-412c-80fa-42e9af3d900e none            swap    sw                0       0
UUID=d80fae04-3ecd-4e68-87ee-0ea47c89adae /backup         ext4    defaults          1       2

/backup分区位于不同的物理驱动器(/dev/sdb)上并且在整个迁移过程中不会改变。

如果需要,我可以提供更多日志。但你可以看到时间差距很大。我确实尝试过systemd-analyze blame,但似乎没有帮助我找到答案。

不过,我注意到一件非常有趣的事情。如果我将旧硬盘连接到系统,将固态硬盘作为主启动和系统驱动器,这样甚至不包括旧硬盘/etc/fstab或以任何方式安装它,系统就会突然完全没有 20-30 秒的暂停,一切都会像预期的那样在几秒钟内启动。

这 20-30 秒究竟是怎么回事?我在下面进行了一些搜索,/etc试图找到引用 UUID 的文本文件,但除了该文件之外找不到任何其他文件resume

我的下一个实验是将所有 ssd UUID 设置为与旧 hdd 的 UUID 相同。这只是一个实验,以确定系统中是否存在某些保留,认为旧 UUID 仍然适用。但必须了解系统中发生了什么。

感谢您的任何帮助

答案1

我终于明白发生了什么事。

正如我提到的,如果我的旧硬盘已连接(未安装),系统将在 SSD 上非常快速地启动。

我进行了一些额外的测试,发现如果我更改 HDD 上的旧交换分区(更改其类型和 UUID,然后将其改回交换格式),它就不再快速启动,并且会出现与 HDD 未连接时相同的暂停。请注意,此分区不是系统的活动交换文件。

我回头搜索了各种关于如何正确将 Ubuntu 迁移到新驱动器的小文章,专门寻找如何处理分区。除了确保更新之外swap,很少有文章提到如何处理swap,甚至没有提到如果 UUID 发生变化需要做什么。/etc/fstab

在大量此类文章和讨论中,我终于看到了一个消息线程,其中提到在文件系统迁移后需要重新初始化 ramfs 文件:

update-initramfs -u -k all

这将更新目录initrd.img中所有内核版本的文件/boot。如果您未指定-k all(或-k <version>),则它仅更新最新内核。

我第一次迁移时没有想到这一点。所以我进行了此更新,现在一切都按预期运行。

答案2

您似乎已/dev/sdc/dev/sdf/etc/fstab使用 选项auto(这会导致它们在启动时安装),并且那里没有实际设备。系统尝试从每个磁盘读取,没有响应,并且超时。这就是时间流逝的地方。阅读man mount fstab,并删除该auto选项。

相关内容