Grub

使用 SSD 緩慢載入 Grub

  • December 6, 2018

從昨天開始,我在我的 PC 中添加了一個全新的 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 在等待期間不閃爍。

到底是怎麼回事?

嘗試將 SSD 插入第一個 SATA 埠並在 BIOS 中選擇它作為第一個引導設備。否則,通常是擺弄驅動器並確保GRUB配置與實際驅動器編號匹配,即在 BIOS 等中hd0指定。HD0

我很確定我知道根本原因和解決這個問題的方法,因為我的一台筆記型電腦上也有同樣的問題,但是我還沒有找到一個像樣的長期修復方法。

請檢查 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 磁碟已持久送出所有數據。

引用自:https://unix.stackexchange.com/questions/67403