Linux 技巧之 Grub 超有用技巧

1. 簡介

什麼是 GRUB?GRUB 全名Grand Unified Boot Loader,它是一個引導裝入器 -- 它負責裝入內核並引導 Linux 系統。GRUB 還可以引導其它操作系統,如 FreeBSD、NetBSD、OpenBSD、GNU HURD 、DOS以及 Windows。儘管引導操作系統看上去是件平凡且瑣碎的任務,但它實際上很重要。如果引導裝入器不能很好地完成工作或者不具有彈性,
那麼就可能鎖住系統,而無法引導計算機。另外,好的引導裝入器可以給您靈活性,讓您可以在計算機上安裝多個
操作系統,而不必處理不必要的麻煩。

廢話不多說,看着也沒多大意思,趕緊進入正文,想看介紹的可以去《GRUB入門教程》學習。


2. grub 技巧之基礎應用

如今,較新電腦上裝的都是grub2,而grub2 使用的配置文件是  /boot/grub/grub.cfg。打開後我們可以找到這樣一句:

set default="0"   這一選項是用來選擇默認系統的,0 即第一個,如果你有5個選項,他們分別對應 /boot/grub/grub.cfg 文件中的:

menuentry 'Debian GNU/Linux, with Linux 3.2.51-trace' --class debian --class gnu-linux --class gnu --class os {                     --- 0
...
}
menuentry 'Debian GNU/Linux, with Linux 3.2.51-trace (recovery mode)' --class debian --class gnu-linux --class gnu --class os {     --- 1
...
}
menuentry 'Debian GNU/Linux, with Linux 3.2.0-4-amd64' --class debian --class gnu-linux --class gnu --class os {                    --- 2
...
}
menuentry 'Debian GNU/Linux, with Linux 3.2.0-4-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os {    --- 3
... 
}
menuentry "Windows 7 (loader) (on /dev/sda1)" --class windows --class os {  --- 4
...
}

所以,你只需要根據自己選擇第幾個內核就可以! 比如我想要我的win 7 作爲默認系統,我可以將menuentry "Windows 7  ... 這一段 移到menuentry 'Debian GNU/Linux, with Linux 3.2.5 ... 之前,也可以直接將set default="0" 中的0 改爲4! 


set timeout=5  這一選項用來設置grub 選項等待時間,如果是5 就是5秒內不選擇,就加載光標所在選項!


3. grub 技巧之摺疊選項

一臺電腦裝的系統多了或者變異的內核多了,可能你的GRUB 選項會變成這樣:


選擇一個你想進入的內核都得上下翻頁翻半天,那麼怎麼處理這個問題?有效的管理這些個選項呢?關於這個,Ubuntu上的grub 或者可以給我們一個很好的提示,對,如果你使用過 Ubuntu ,在你編譯內核以後,一個系統上的內核會被摺疊,比如說我的另一臺筆記本上的grub 會是這樣:

*   Ubuntu, with Linux 3.2.0-61-generic-pae
*   Ubuntu, with Linux 3.2.0-61-generic-pae
*   Previous Linux versions
*   Windows 8 (loader)

光標移動到“Previous Linux versions” 選項上,進入後,grub纔會展示出其他一些內核選項:

*   Ubuntu, with Linux 3.12.13-rt4
*   Ubuntu, with Linux 3.12.13-rt4 (recovery mode)
*   Ubuntu, with Linux 3.12.13-ftrace
*   Ubuntu, with Linux 3.12.13-ftrace (recovery mode)
*   Ubuntu, with Linux 3.4.24-test
*   Ubuntu, with Linux 3.4.24-test (recovery mode)
*   Ubuntu, with Linux 3.2.0-51-generic-pae
*   Ubuntu, with Linux 3.2.0-51-generic-pae (recovery mode)

那麼我們怎麼自己完成這個動作,打開ubuntu 的/boot/grub/grub.cfg 後我明白了,原來這只是grub的一個二級菜單功能 “ submenu "Previous Linux versions" { ... } ”,所以我的筆記本可以這麼玩:

$ sudo vim /boot/grub/grub.cfg

menuentry 'Debian GNU/Linux, with Linux 3.12.9-gcov-rt13' --class debian --class gnu-linux --class gnu --class os 
submenu "Previous Debian versions" {
menuentry 'Debian GNU/Linux, with Linux 3.12.9-gcov-rt13 (recovery mode)' --class debian --class gnu-linux --class gnu --class os 
menuentry 'Debian GNU/Linux, with Linux 3.12.9-testing-rt13' --class debian --class gnu-linux --class gnu --class os 
menuentry 'Debian GNU/Linux, with Linux 3.12.9-testing-rt13 (recovery mode)' --class debian --class gnu-linux --class gnu --class os 
menuentry 'Debian GNU/Linux, with Linux 3.10.17-trace-rt12' --class debian --class gnu-linux --class gnu --class os 
menuentry 'Debian GNU/Linux, with Linux 3.10.17-trace-rt12 (recovery mode)' --class debian --class gnu-linux --class gnu --class os 
menuentry 'Debian GNU/Linux, with Linux 3.9.11-trace' --class debian --class gnu-linux --class gnu --class os
... 
}
menuentry "Windows 7 (loader) (on /dev/sda1)" --class windows --class os 
menuentry "elementary OS, with Linux 3.2.0-51-generic (on /dev/sda10)" --class gnu-linux --class gnu --class os 
submenu "Previous elementary OS versions" {
menuentry "elementary OS, with Linux 3.2.0-51-generic (recovery mode) (on /dev/sda10)" --class gnu-linux --class gnu --class os 
}
menuentry "Ubuntu (on /dev/sda8)" --class gnu-linux --class gnu --class os 
submenu "Previous Ubuntu versions" {
menuentry "Ubuntu,Linux 3.11.0-18-generic (on /dev/sda8)" --class gnu-linux --class gnu --class os 
menuentry "Ubuntu,Linux 3.11.0-18-generic (恢復模式) (on /dev/sda8)" --class gnu-linux --class gnu --class os 
menuentry "Ubuntu,Linux 3.11.0-13-generic (on /dev/sda8)" --class gnu-linux --class gnu --class os 
menuentry "Ubuntu,Linux 3.11.0-13-generic (恢復模式) (on /dev/sda8)" --class gnu-linux --class gnu --class os 
...

於是忽,我的機器現在啓動是這樣的:


是不是清新許多?


4. grub 技巧之修改密碼

你覺得你使用 Linux 系統安全麼? 你有了密碼就安全了麼?來試試GRUB 的強大吧!!!

(1). 系統啓動,進入grub 選擇界面!如上面的圖片所示

(2). 在一個選項之上按 e 鍵進入grub 編輯界面!(沒事,大膽嘗試,不會永久保存的,就算保存了不正確的東西,不是還有recovery mode 嘛!!!

(3). 比如我當前的編輯界面顯示的內容是這樣的:

recordfail
    gfxmode $linux_gfx_mode
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='(hd0,msdos8)'
    search --no-floppy --fs-uuid --set=root c81eebc3-ed49-4661-be49-eadeb0de4696
    linux   /boot/vmlinuz-3.2.0-61-generic-pae root=UUID=c81eebc3-ed49-4661-be49-eadeb0de4696 ro   quiet splash $vt_handoff
    initrd  /boot/initrd.img-3.2.0-61-generic-pae

我們需要修改的是上面我使用顏色標記的行,我們將 ro 改爲rw ,後面的內容全刪除!添加上 init=/bin/bash

也就是說,改完之後是這樣的:

 linux   /boot/vmlinuz-3.2.0-61-generic-pae root=UUID=c81eebc3-ed49-4661-be49-eadeb0de4696 rw init=/bin/bash

這時候,我們按Ctrx+X 或者F10 保存並進入,我們會發現經過一段時間加載後,我們沒有任何密碼確獲得了root 權限!!!那麼這時候系統還安全麼???我們可以加載任何分區,然後獲取任何你想保密的內容!啦啦啦~~~


但是,我在這介紹這方法不是讓你去整人的!!!它可以用在很有用的方面: 丟失密碼可以用此方法修改密碼!系統崩潰可以使用此方法將重要文件拷貝走!等等~~


5. grub 技巧之找回系統

有時候,我們會安裝多個系統,比如上面照片中,我的一個筆記本上安裝了4個系統,其中會將一個系統下的grub 作爲電腦的加載程序!比如說我的電腦上Debian 的GRUB 被我用做電腦的默認加載程序了!但是某天我在 Ubuntu 上編譯了一個內核,並使用 update-grub2 更新了grub, 但是系統啓動,你會發現你的 update 並沒有生效,你還需要到 Debian 下再使用 update-grub2 後,這個在 Ubuntu 下編譯的內核纔會在系統啓動菜單中出現!

還有種情況,比如我的電腦上只有Debian 和 win8 兩個系統,但是某一天我的 win 8 崩潰了於是我重裝了系統,啓動後發現,我只能進入windows 了,再也引導不了Debian 了,因爲Windows 的引導程序還不能引導 Linux!


遇到這兩種情況怎麼辦? 使用 grub-install !方法可以參見《那些年解決的 Ubuntu 系統故障



發佈了90 篇原創文章 · 獲贊 434 · 訪問量 106萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章