从昨天开始,我在我的电脑中添加了一个全新的 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 磁盘已持久提交所有数据。