SSD 下 Grub 加载缓慢

SSD 下 Grub 加载缓慢

从昨天开始,我在我的电脑中添加了一个全新的 SSD,并且从 grub 菜单启动速度非常快。问题是在到达这个菜单之前,我必须等待很长时间(大多数情况下约为 30 秒)。我在SSD上安装了grub。 BIOS之后,我有时会立即看到“Grub loading”,有时只是一个闪烁的光标,但到达菜单的时间似乎是相同的。我尝试添加 debug=disk (甚至将 debug=all 添加到我的 grub.cfg 中),但只有在无法解释的等待时间结束后才会出现日志。

我有 3 个磁盘: - sda,标记为可启动,上面有 Windows 启动加载程序 - sdb,即 SSD - sdc,包含交换分区和数据分区。直到昨天我才安装了 Fedora 18

分手描述:

Model: ATA ST3250410AS (scsi)
Disk /dev/sda: 250GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End    Size   Type     File system  Flags
 1      32.3kB  250GB  250GB  primary  ntfs         boot


Model: ATA M4-CT128M4SSD2 (scsi)
Disk /dev/sdb: 128GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system  Flags
 1      1049kB  1075MB  1074MB  primary  ext4         boot
 2      1075MB  11.8GB  10.7GB  primary  ext4
 3      11.8GB  33.7GB  21.9GB  primary  ext4


Model: ATA ST3160827AS (scsi)
Disk /dev/sdc: 160GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type     File system     Flags
 1      1049kB  2149MB  2147MB  primary  linux-swap(v1)
 2      52.4GB  160GB   107GB   primary  fat32           lba

当在 Windows 下(在 sda1 上)时,我在关闭时也会出现无法解释的挂起时间,但这种情况是在一年前首次发生的。

编辑 拔掉 250GB 驱动器可以消除延迟。等待期间 HDD LED 不会闪烁。

到底是怎么回事?

答案1

尝试将SSD插入第一个SATA端口,并在BIOS中将其选择为第一启动设备。否则,通常需要摆弄驱动器并确保GRUB配置与实际驱动器编号(即BIOS 中的hd0指定等)相匹配。HD0

答案2

我很确定我知道这个问题的根本原因和解决方法,因为我的一台笔记本电脑上也有同样的问题,但是我还没有找到像样的长期解决方案。

请检查 grub.cfg 所在的 /boot/grub2 文件夹。如果我是对的,grub.cfg 的文件大小非常大。仅供参考,正常的 grub.cfg 约为 10k(在真正的重型多重启动上,这可能高达 50k),但兆字节或以上的文件大小绝对是损坏的迹象。

根本原因是:安装或重大升级后,最后一步是运行 grub2-mkconfig,它会重新生成 grub.cfg 文件。这是一个扫描所有磁盘等的严肃过程,因此需要一些时间。写入此文件后,系统几乎总是直接重新启动,以便激活所有更改。 SSD 磁盘会发生的情况是,磁盘由于重新启动而被硬重置,而写入 grub.cfg 的数据尚未安全地提交到其 NAND 单元。在大多数情况下,数据在那里,但文件关闭(设置文件长度等)尚未发生,这会导致正常的 grub.cfg 文件后面出现巨大的空白空间(或旧磁盘数据)。

此操作的效果如下:grub2 读取 grub.cfg 文件,但在正常数据(可用引导系统的列表)之后,需要一些时间(最多 30 秒)来解析虚拟数据(通常是 0x00 字节或类似的),有时会发出错误。但最后,它找到文件的末尾,并为您提供找到的操作系统的正确列表。

修复:确保所有磁盘都可用,并运行手动 grub2-mkconfig 并将输出输出到 grub.cfg 文件。或者,使用十六进制编辑器找到数据的真正末尾,然后使用复制工具将正确的字节数复制到新文件中,然后用好的 grub.cfg 替换有问题的 grub.cfg。

但应该有一个更持久的修复,因为每次系统升级都可能会出现同样的问题。这意味着系统关闭时应确保所有 SSD 磁盘已持久提交所有数据。

相关内容