標籤:
1、安裝Windows系統
安裝過程除了分區時要預留出部分空間來安裝CentOS之外,其它操作與正常安裝一樣.
2、安裝CentOS系統
使用光碟片引導安裝,因安裝為伺服器版,建議選擇無介面,迷你安裝,須要什麼服務再自行添加安裝。
安裝分區到預留空間中。其它預設安裝完成。
3、修改引導檔案
使用root使用者登陸開啟引導檔案
vi /boot/grub2/grub.cfg
找到### BEGIN /etc/grub.d/30_os-prober ###在後面添加
menuentry ‘Windows 7‘ {insmod ntfsset root=(hd0,2)chainloader +1}
儲存重啟
註:(hd0,2)為第一硬碟第二分區,使用者應根據自已實際情況配置
4,修改引導順序
開啟 /boot/geub2/grubenv的檔案,注釋掉#saved_entry=CentOS。。。。。這一行在下一行插入
saved_entry=Windows 7
儲存重啟即可
============================以下資訊為附加閱讀================================
在早期的Ubuntu中,使用Grub作為系統的啟動引導程式,想修改系統啟動項非常簡單,只要用gedit開啟系統功能表設定檔案( sudo gedit /boot/grub/menu.lst ),修改該檔案中到內容即可,但是到了Grub 2中,不能採用這種方式修改系統啟動項了。
Grub 2特性
Grub 2(GRand Unified Bootloader, version 2)是Grub的第二版。Grub 2對Grub的介面進行了完整到重寫,基於PUPA(詳細介紹)項目到研究,Grub 2更模組化並且更方便擴充,Grub 2的一些提升如下:
具有圖形化介面,支援主題
模組化載入
誇平台的相容性
支援指令碼
自訂的啟動項目定義
修改分區命名
Grub 2結構
Grub 2包含下面幾個部分:
/boot/grub/grub.cfg 檔案
/etc/grub.d/ 檔案夾
/etc/default/grub 檔案
下面開始一個個介紹。
grub.cfg類似Grub中的 /boot/grub/menu.lst。裡面的格式於menu.lst差不多,但是現在不允許你通過直接修改該檔案到方式來修改啟動項,因為該檔案是在執行"update-grub"或者update-grub2"之後,根據上面說到2、3兩項動態產生到,也就是說,如果你修改了這個檔案當下次這兩個命令被執行了(比如說更新核心後),你修改到內容就會背覆蓋。官方檔案只 www.2cto.com 說/boot/grub/grub.cfg不要手工修改,這個檔案是運行 update-grub自動產生的。要修改設定檔的只要開啟/boot/grub/grub.cfg檔案,找到想修改的地方,然後根據注釋找到相應的 /etc/default/grub或/etc/grub.d/ (folder)進行修改。
grub.cfg檔案中主要包含兩個部分,一部分是各個啟動項的定義,第二部分是啟動介面的設定。你可以直接用gedit開啟該檔案看其中的內容。既然grub.cfg不能修改,那也沒什麼好詳細說的了,稍微研究下就能看懂裡面是怎麼寫的。下面就介紹一下Grub 2的另外兩個部分。
Grub 2的另外兩部分內容其實就分別對應於grub.cfg中的兩部分內容。
首先 /etc/grub.d/ 檔案夾中定義各個啟動項,其中的檔案代表了一個或多個啟動項,命名規範都是"兩個數字_名稱",前面的兩位元字確定這個或這多個啟動項在啟動介面的位置,預設的 "00_"是預留給"00_header"的,"10_是預留給當前系統核心的,20_是預留給第三方程式的,除了這些你都可以使用,增加自己的,比如 05_ , 15_,數字越小越前面。這裡的檔案好像是代碼,我還沒研究透,不會自己寫,只會改。當執行前面說的"update-grub"或者update- grub2"命令之後,這個檔案夾中的檔案就是用於產生 grub.cfg 中啟動項的定義的。
Grub 2的最後一部分是 /etc/default/grub 檔案,該檔案主要是啟動介面的配置,比如預設的啟動項,等待使用者選擇啟動項的時間等。檔案內容很簡單,就是一些索引值對,詳細的可配置屬性可以參考Grub 2的Wiki中"grub (/etc/default/grub)"這一節。當執行前面說的"update-grub"或者update-grub2"命令之後,這個檔案的內容就用於產生 grub.cfg 中啟動介面的設定。
/etc/default/grub檔案詳細修改方法
sudo gedit /etc/default/grub
系統安裝完成後,使用者就會發現/boot/grub/grub.cfg檔案只有root許可權可讀,如果要直接修改grub.cfg檔案,要先修改其許可權。好不容易把grub.cfg修改好了,系統核心或grub升級時,會自動執行update-grub,grub.cfg檔案就會被打回原形,如何保證修改後的設定檔能一直保留下來呢? www.2cto.com
其實不用修改 grub.cfg,只要把個人化配置寫入/etc/default/目錄下的grub和/etc/gurb.d目錄下的指令檔,以後不管升級核心或者是升級grub所執行的update-grub,都會按要求建立個人化的grub.cfg。
1、首先看下 /etc/default/grub,先從應用程式-附件裡開啟終端,輸入
sudo gedit /etc/default/grub
看看開啟的檔案可作什麼修改:
# If you change this file, run ‘update-grub‘ afterwards to update
# /boot/grub/grub.cfg.
GRUB_DEFAULT=0 -------->設定預設啟動項,按menuentry順序。比如要預設從第四個功能表項目啟動,數字改為3,若改為 saved,則預設為上次啟動項。
GRUB_HIDDEN_TIMEOUT=0 預設為0,單系統時啟動菜單自動隱藏,要取消自動隱藏菜單,改為大於0再sudo update-grub。(注意:單系統下/etc/grub.d/30_os- prober可能沒引用這裡的變數,如果修改這裡不能顯示菜單,還要修改 /etc/grub.d/30_os-prober,具體看下面修改部份)
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT="3"----------->設定進入預設啟動項的等候時間,預設值10秒,按自己需要修改
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" ----------->添加核心啟動參數,這個為預設
GRUB_CMDLINE_LINUX="noresume"--------->手動添加核心啟動參數,比如 acpi=off noapic等可在這裡添加,加 text 參數啟動進入字元模式。
# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console ---------->設定是否使用圖形介面。去除前面#,僅使用控制台終端,不使用圖形介面 www.2cto.com
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo‘
#GRUB_GFXMODE=640x480 設定圖形介面解析度,如不使用預設,把前面#去掉,把解析度改為800x600或1024x768
# Uncomment if you don‘t want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true ---------->設定grub命令是否使用UUID,去掉#,使用root=/dev/sdax而不用root=UUDI=xxx
# Uncomment to disable generation of recovery mode menu entrys
#GRUB_DISABLE_LINUX_RECOVERY="true"----------->設定是否建立修複模式功能表項目
/etc/grub.d檔案夾詳細修改方法
再看下 /etc/grub.d檔案夾下的什麼東東:
00_header 05_debian_theme 10_linux 20_memtest86+ 30_os-prober 40_custom README
前面這五個指令碼對應grub.cfg上的各個部分,怎樣修改這些指令檔才能保證不會破壞update-grub的運行,又能讓grub.cfg符合你的意願呢?其實很簡單,只要找到
cat << EOF
********
********
********
EOF
這類語句,EOF中間的文本會直接寫入grub.cfg中相應位置,所以個人化的語句添加在這地方就可以了。
00_header 可供修改的有兩地方
cat << EOF www.2cto.com
load_env
set default=${GRUB_DEFAULT} <----- 這雷根據 /etc/default/grub中default變數設定,不用修改
if [ /${prev_saved_entry} ]; then
saved_entry=/${prev_saved_entry}
save_env saved_entry
prev_saved_entry=
save_env prev_saved_entry
fi
insmod jpeg <---------這地方加入要載入的模組,片支援,或系統格式支援 insmod ntfs 和 insmod fat 等
insmod png <---------
EOF
另一個在最後
cat << EOF
set timeout=${GRUB_TIMEOUT} <------- timeout 根據上面 /etc/default/grub中的timeout 變數設定,這裡不用改
background_image (hd0,7)/boot/images/012.jpg <----------這裡背景圖片的絕對路徑(似乎沒有作用,相見"執行個體")
EOF
05_debian_theme 修改背景顏色
cat << EOF www.2cto.com
set menu_color_normal=white/black <--------
set menu_color_highlight=yellow/black <------- 前面字型顏色可自定,後面背景一定要設為black,不然背景色會擋住背景圖片。備忘:修改前為set menu_color_highlight=black/light-gray
EOF
10_linux 這部分是自動搜尋當前系統,建立當前系統的啟動菜單,包括系統頭,核心等資訊,不要隨便修改,要使用個性菜單名,比如中文菜單,可修改這裡,其餘地方不要做修改:
cat << EOF
menuentry "啟動 $1" { <---------在 雙引號 " " 和 變數 $1 這間加入個性文字,或直接把 變數$1 改為固定字元比如 Ubuntu Karmic
EOF
if [ "x$3" = "xquiet" ]; then
cat << EOF
set quiet=1
EOF
20_memtest86+ 添加記憶體測試啟動項,可做修改的地方:
cat << EOF
menuentry "Memory test (memtest86+)" {<------可以修改為中文菜單如 menuentry "記憶體測試"{ ,雙引號必須是英文字元
linux16 $MEMTESTPATH
}
# 下面第二個功能表項目可刪除
menuentry "Memory test (memtest86+)"
linux16 $MEMTESTPATH *********
} www.2cto.com
EOF
30_os-prober 尋找其他分區中存在的系統並建立功能表項目,依次為 windows >> linux >> macos,這裡不必修改。
或根據自己的系統修改
menuentry "${LONGNAME} (on ${DEVICE})" <-------把引號中的變數改為固定,如 windows xp ,vista 或 linux , Fedora 之類的功能表項目。
40_custom 自訂啟動項,按菜單標準格式添加即可,update-grub後會自動添加到grub.cfg上,如:
menuentry "啟動 Veket"{
set root=(hd0,8)
linux /veket/vmlinuz root=/dev/ram0 PMEDIA=hd
initrd /veket/initrd.gz
}
menuentry "啟動 CDLinux"{
set root=(hd0,8)
linux /CDlinux/bzImage root=/dev/ram0 vga=791 CDL_LANG=zh_CN.UTF-8
initrd /CDlinux/initrd
}
menuentry "啟動 Grub4Dos"{
set root=(hd0,8)
linux /grub.exe
}
把各項修改後儲存,然後
sudo update-grub
cat /boot/grub/grub.cfg
看看設定檔是不是和你想的一樣了。
不一樣??? 再改,再 sudo update-grub
www.2cto.com
執行個體:
要修改預設啟動項,可以使用下面的方法:
1.修改 /etc/grub.d/ 中啟動項的順序,將你想要預設啟動的項順序設定為較小的值。優點是修改不會被update-grub命令覆蓋掉,好像沒啥缺電,只有另外的程式修改為比你的值更小了才會成為預設啟動。
2. 修改 /etc/default/grub 中預設的啟動項,設定該檔案中 GRUB_DEFAULT 為你想要的值,這個值是產生的 grub.cfg 中各個啟動項的從0開始的下標。該方法優點是修改不會被update-grub命令覆蓋,缺點是當啟動項的順序變化之後,下標也就變了。。。
調整啟動畫面解析度
第一步:開啟終端,修改/etc/default/grub檔案
$ sudo gedit /etc/default/grub
取消#GRUB_GFXMODE=640×480這一行前面的注釋符號,並將後面的數字修改為一個合適的值,不需要太高,比如1024x768。這個值同時會影響grub啟動菜單和控制台裡文字的解析度。
注意:啟動菜單和啟動介面解析度相同,如果此處解析度設定過高的話,啟動菜單會很難看,似乎修改解析度不會影響啟動速度,
第二步:修改/etc/grub.d/00_header檔案
$ sudo gedit /etc/grub.d/00_header
按下ctrl+F,尋找關鍵字"set gfxmode=${GRUB_GFXMODE}"(去掉雙引號),然後在這行下面添加新行,內容是:"set gfxpayload=keep" (去掉雙引號)
第三步:更新grub
$ sudo update-grub
好了,重啟試試,不出意外的話你會看到plymouth的啟動畫面確實更漂亮了
給grub2菜單添加圖片
1.在etc/grub.d檔案夾中找到00_header 檔案,開啟後在
save_env prev_saved_entry
fi下添加一句 www.2cto.com
insmod png
2.在etc/grub.d/05_debian_theme中改為
set menu_color_normal=white/black
set menu_color_highlight=yellow/black (前面字型顏色可自定,後面背景一定要設為black,不然背景色會擋住背景圖片。前面還有語句的詳細)
3.根據圖片位置可判斷系統grub預設圖片檔案夾位置,在相同位置放上一張同名圖片檔案即可。
圖中檔案名稱為moreblue-orbit-grub.png
備忘:
一.修改/boot/grub/grub.cfg 檔案的方法(可以當作修改/etc/grub.d/ 檔案夾和/etc/default/grub 檔案的參考)
grub.cfg 預設為唯讀,要修改前先設為可寫
sudo chmod +w /boot/grub/grub.cfg
set default=0
#預設為0
insmod jpg
#添加jpg支援,如要使用png或tga檔案做背景,加上 insmod png或insmod tga (添加圖片好像不管用)
insmod ext2
#除了用作啟動的分區外,其他分區格式可在menu底下再添加
set root=(hd0,7)
#設定root分區
search -no-floppy -fs-uuid -set f255285a-5ad4-4eb8-93f5-4f767190d3b3
#設定uuid=****的分區為root,和上句重複,可刪除
# 以下為終端配置
if loadfont /usr/share/grub/unicode.pf2 ; then
#設定終端字型,unicode.pf2支援中文顯示
set gfxmode=640×480 www.2cto.com
#設定解析度,預設為 640×480,可用800×600,1024×768,建議跟你想設定的圖片大小一致
insmod gfxterm
#插入模組 gfxterm,支援中文顯 示,它還支援 24 位元影像像
insmod vbe
#插入 vbe 模組,GRUB 2 引入很多模組的東西,要使用它,需要在這裡加入
if terminal_output gfxterm ; then true ; else
# For backward compatibility with versions of terminal.mod that don‘t
# understand terminal_output
terminal gfxterm
#設定 GRUB 2 終端為 gfxterm
fi
fi
set timeout=10
background_image (hd0,7)/boot/images/1.jpg (添加圖片好像不管用)
#設定背景圖片
### END /etc/grub.d/00_header ###
### BEGIN /etc/grub.d/05_debian_theme ###
set menu_color_normal=white/black
set menu_color_highlight=cyan/black
#這兩行為 Debian 下的菜單顏色設定,如果預設的話,你會發現背景完全被藍色擋住了,你需要修改 blue 為 black,這樣背景就會出現
### END /etc/grub.d/05_debian_theme ###
# 10_linux 為自動添加的當前root分區linux引導項
### BEGIN /etc/grub.d/10_linux ###
#功能表項目,要包括 menuentry 雙引號" " 和大括弧 { }才完整,否則不顯示菜單
menuentry "Ubuntu, Linux 2.6.31-9-386″ {
insmod ext2 www.2cto.com
set root=(hd0,7)
search -no-floppy -fs-uuid -set f255285a-5ad4-4eb8-93f5-4f767190d3b3
#這句與set root=(hd0,7)重複,可刪除
linux /boot/vmlinuz-2.6.31-9-386 root=UUID=f255285a-5ad4-4eb8-93f5-4f767190d3b3 ro quite splash
#不喜歡看到一長串的, roo=UUID=***可用root=/dev/sda7代替
initrd /boot/initrd.img-2.6.31-9-386
}
### END /etc/grub.d/10_linux ###
### BEGIN /etc/grub.d/20_memtest86+ ###
menuentry "Memory test (memtest86+)" {
linux16 /boot/memtest86+.bin
}
### END /etc/grub.d/20_memtest86+ ###
# 自動添加存在於其他分區的系統引導項
### BEGIN /etc/grub.d/30_os-prober ###
#windows 啟動菜單
menuentry "Windows Vista (loader) (on /dev/sda1)" {
insmod ntfs
#windows格式為ntfs,或為fat32改為 insmod fat
set root=(hd0,1)
search -no-floppy -fs-uuid -set ece067d2e067a196
#可刪除
#grub2比較先進的地方就是如果發現windows啟動是通過ntldr 引導的,定為2000/xp/2003,會在這加上 drivemap -s (hd0) ${root} ,作用相當於grub的map,可正常啟動非第一硬碟的xp/2003系統。
chainloader +1
}
# 尋找到其他分區上的linux系統並自動添加
menuentry "Ubuntu karmic (development branch) (9.10) (on /dev/sda3)" {
insmod ext2
set root=(hd0,3)
search -no-floppy -fs-uuid -set 4d893970-0685-44ed-86b3-1de45b2db84a
linux /boot/vmlinuz-2.6.31-9-generic root=/dev/sda3
initrd /boot/initrd.img-2.6.31-9-generic
} www.2cto.com
#若存在macos會自動在這裡添加。
### END /etc/grub.d/30_os-prober ###
# 以下為手動添加的功能表項目
### BEGIN /etc/grub.d/40_custom ###
menuentry "CDLinux"{
set root=(hd0,8)
linux /CDlinux/bzImage root=/dev/ram0 vga=791 CDL_LANG=zh_CN.UTF-8
initrd /CDlinux/initrd
}
### END /etc/grub.d/40_custom ###
# 手動添加時,硬碟編號從0開始(hd0),主要磁碟分割編號從1開始(hd0,1),邏輯分區從5開始(hd0,5)
二、grub2終端部分命令介紹
在出現選擇菜單時,按C進入終端命令列模式,按E進入當前功能表項目編輯模式(和grub一樣),編輯中按Ctrl + C退出,按Ctrl + X 以編輯內容啟動。
1. help
查看命令用法,顯示所有可用命令
help search
search 命令用法
2. ls
列出當前的所有裝置。如 (hd0) (hd0,1) (hd0,5) (hd1) (hd1,1) (hd1,2) .......
ls -l
詳細列出當前的所有裝置。對於分區,會顯示其label及uuid。
ls /
列出當前設為root的分區下的檔案
ls (hd1,1)/
列出(hd1,1)分區下檔案
3. search
search -f /ntldr
列出根目錄裡包含ntldr檔案的分區,返回為分區號
search -l LINUX www.2cto.com
搜尋label是LINUX的分區。
search -set -f /ntldr
搜尋根目錄包含ntldr檔案的分區並設為root,注意如果多外分區含有ntldr檔案,set 失去作用。
4. loopback
loopback命令可用於建立回放裝置,如
loopback lo0 (hd1,1)/abc.iso
可以使用lo0裝置來訪問abc.iso裡的內容,比如說,可以從abc.iso裡的磁碟片映像中啟動
loopback lo0 (hd1,1)/aa.iso
linux (lo0)/memdisk
initrd (lo0)/abc.img
要刪除某一回放裝置,可以使用-d參數:
loopback -d lo0
5. set
使用set可以設定變數的值
set root=
set timeout=
需要調用變數的值時,使用${AA},如set root=(hd1,1)
則${root}=(hd1,1)
6. pager
分頁顯示。
set pager=1
滿頁時暫停,按space繼續
set pager=0
取消分頁
7. linux
linux取代grub中的kernel
三、 www.2cto.com
單linux系統或
硬碟安裝時iso放在C盤,umount /isodevice引起的誤認為單系統
不能出現功能表項目的幾種處理方法。
1. 開機自我測試 (POST)後時按幾下shift鍵,可調出功能表項目
2. sudo update-grub
重建grub.cfg,會發現新的系統而改寫grub.cfg,一般能出現功能表項目。
3.如第二種方法不能解決,直接修改grub.cfg
把在### BEGIN /etc/grub.d/30_os-prober 中的這一段
if keystatus; then
if keystatus -shift; then
set timeout=-1
else
set timeout=0
fi
else
if sleep$verbose -interruptible 3 ; then
set timeout=0
fi
fi
刪除或修改三處set timeout=<大於0>
四、雙硬碟雙系統 Grub Loading時間過長的解決方案
grub2的boot.img設定root的uuid從第一分區開始搜尋分區的/boot/grub下的模組並載入,如果linux分區處於第二硬碟甚至第三硬碟,會導致搜尋時間過長而,出現菜單時間會長達10多秒。
對雙(多)硬碟的情況建議把grub安裝在ubuntu所在硬碟的mbr上,/boot分區或 / 分區盡量靠前,並設該硬碟為啟動盤,會大大縮短啟動時間。
五、grub2幾種修複方法 www.2cto.com
1. 雙系統重裝windows造成grub2被改寫的修複
方法一 grub4dos0.4.4
在Windows啟動項上加上grub4dos啟動(不多說了,看置頂貼),重啟選擇進入grub,在命令列下輸入(/boot單獨分區的去掉 /boot)
代碼:
grub>find -set-root /boot/grub/core.img
grub>kernel /boot/grub/core.img
grub>boot
進入grub2菜單,進入系統後再執行
代碼:
sudo grub-install /dev/sd?
方法二 進入Livecd 後修複(感謝billbear)
引用:
sudo -i
mount 你的根分區 /mnt
mount 你的/boot 分區 /mnt/boot #如果有的話
#掛載你其他的分區,如果有的話
# 重建grub到sda的mbr
grub-install -root-directory=/mnt /dev/sda
2. 由於root分區uuid改變造成的不能正常啟動,只能進入grub rescue模式的修複
代碼: www.2cto.com
grub rescue>set
grub rescue>prefix=(hd?,?)/grub
grub rescue>root=hd?,?
grub rescue>set root=hd?,?
grub rescue>set prefix=(hd?,?)/boot/grub
grub rescue>set
grub rescue>root=hd?,?
grub rescue>prefix=(hd?,?)/boot/grub
grub rescue>insmod /boot/grub/normal.mod
grub rescue>normal
這時就可以調出 /boot/grub/grub.cfg,修改相應uuid,
改到命令列下
grub>insmod /boot/grub/linux.mod
grub>set root=hd?,?
grub>linux /boot/vmlinuz-*** root=/dev/sd??
grub>initrd /boot/initrg.img-****
進入系統
hd?,? 是grub檔案所在分區 sda? 是/分區。
3. grub模組和設定檔grub.cfg受損無法啟動時修複
Livcd啟動進入試用
引用:
sudo -i
mount 你的根分區 /mnt
mount 你的/boot 分區 /mnt/boot #如果有的話
# 掛載你其他的分區,如果有的話
# 重建grub到sda的mbr
grub-install -root-directory=/mnt /dev/sda
# 重建grub.cfg www.2cto.com
mount -bind /proc /mnt/proc
mount -bind /dev /mnt/dev
mount -bind /sys /mnt/sys
chroot /mnt update-grub
umount /mnt/sys
umount /mnt/dev
umount /mnt/proc
六、 另一些補充說明
1. chainloader
grub2將支援 chainloader /file 的用法。
目前支援的檔案只有 grub2 的 boot.img 和 grub4dos 的grldr 和 grub.exe。希望正式版能支援 ntldr bootmgr peldr 等檔案。
2. drivemap
drivemap 相容 grub 的 map,主要用於只能從 (hd0) 引導啟動的系統如 win2000 xp 2003,可以象 map 用法一樣如:
menuentry "Windows XP" {
insmod ntfs
drivemap (hd0) (hd1)
drivemap (hd1) (hd0)
set root=(hd1,1)
chainloader +1
}
實際上 drivemap 有了更方便的用法:
menuentry "Windows XP" {
insmod ntfs www.2cto.com
set root=(hd1,1)
drivemap -s (hd0) ${root}
chainloader +1
}
3. grub2 引導磁碟片img鏡像啟動
比如要載入(hd1,1)根目錄下的 a.img 鏡像,先把 memdisk 從 memdisk.gz 中解壓出來,用法是:
linux (hd1,1)/memdisk #鏡像檔案超過2.88M要加上 c=* h=* s=*
initrd (hd1,1)/a.img
boot
安裝Windows與CentOS雙系統