一、寫在前面
個人使用的是win7+ubuntu多系統的環境。因為目前正在學習linux環境下的C語言編程,安裝了兩個版本的ubuntu(12.04和14.04今天還按了一個kylin也不知道好用不)。這篇博文就和大家嘮一下如何用grub2安裝ubuntu14.04的iso鏡像盤。有兩點跟大家聲明下:一、我是菜鳥,謬誤難免,本文只是簡單介紹下安裝過程,理論的東西大家可以參考我后面給出的參考文獻;二、本文不是介紹win7下安裝ubuntu的,也不是介紹如何直接在硬盤(需要解壓縮iso文件)下安裝ubuntu的。本文的方法是利用grub2引導iso鏡像盤(有點類似光盤上那個livecd)啟動,啟動之后想要安裝ubuntu或者只是體驗下那就可以由你自己決定了。
二、個人對於grub2的一點兒認識
只是想盡快把iso裝起的話,可以跳過本部分,直接閱讀第三部分”安裝過程“。如果你的系統上已經安裝了grub2的話,就可以跟我一起來試驗引導iso鏡像盤啟動了。直奔主題,grub工作的流程如下:
編輯grub.d文件夾下腳本和"/etc/default/grub"文件===》運行grub-mkconfig命令,生成grub.cfg配置文件===》update-grub完成設置工作===》重新啟動計算機進入啟動界面。
首先把今天涉及到的三個重要的文件及文件夾列出來,最重要的當屬設置系統啟動方式的配置文件“/boot/grub/grub.cfg”,grub正是讀取它來控制系統啟動方式的。grub2以后可能出於安全性的考慮,不建議直接編輯這個配置文件了(直接編輯的話,一旦運行 sudo update-grub ,對grub.cfg所做的修改將完全丟失),而是通過腳本和另外一個配置文件"/etc/default/grub"間接的生成"grub.cfg"。腳本就位於"/etc/grub.d"這個文件夾,這些腳本最終決定了grub引導哪個系統,到什么地方找到系統內核、鏡像文件等(前提是你的系統內核文件、鏡像存在),和如何加載操作系統;"/etc/default/grub"這個文件主要控制啟動界面的默認啟動時間,默認啟動哪個系統,和啟動界面的顯示方式等。總結一下,需要用到的grub配置文件如下:
- /boot/grub/grub.cfg
- /etc/default/grub
- /etc/grub.d
- /etc/grub.d/10_linux
- /etc/grub.d/20_linux_xen
- /etc/grub.d/30_os-prober
- /etc/grub.d/40_custom
- ...
三、安裝過程:
- 下載ubuntu的iso鏡像,並將其放置到E盤下的download文件夾中(可以放到其他文件夾下,grub2可以允許自由放置,但最好不要放到/boot中。此外linux系統如果"/home"單獨分區的話,設置也有區別)。windows下文件的位置就是"E:\download\ubuntukylin-14.04-desktop-amd64.iso"
- 備份腳本"40_custom"
備份腳本40_custom1 mv /etc/grub.d/40_custom /etc/grub.d/40_custom_bak 2 chmod u-x /etc/grub.d/40_custom_bak
注釋:grub會按腳本名字的起首數字,從小到大依次執行"/etc/grub.d/"文件夾下的全部可執行腳本,最終將決定系統在啟動界面的排列順序。因此定制個人腳本可以將腳本命名為06xxx(06-09都可以,只要不合系統腳本名沖突),這樣在啟動界面定制的系統就會排在第一位。chmod u-x 是為了避免40_custom_bak腳本被執行。
- 編輯腳本40_custom
1 sudo gedit /etc/grub.d/40_custom
我的"/etc/grub.d/40_custom"文件1 #!/bin/sh 2 exec tail -n +3 $0 3 # This file provides an easy way to add custom menu entries. Simp ly type the 4 # menu entries you want to add after this comment. Be careful not to change 5 # the 'exec tail' line above. 6 menuentry "Ubuntukylin 14.04 ISO" { 7 insmod ntfs 8 insmod iso9660 9 set isofile="/download/ubuntukylin-14.04-desktop-amd64.iso" 10 loopback loop (hd0,msdos6)$isofile 11 linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/file name=$isofile noprompt noeject 12 initrd (loop)/casper/initrd.lz 13 }注釋:前兩行必須要有,第一行告訴系統這是shell腳本,至於第二行,目前我只知道是兩條系統命令。從第三行開始,帶“#”號的表示該行是注釋內容,可以刪除。重點說一下第6-12行。第六行是啟動界面顯示的內容。第7和第8行,加載ntfs格式分區的驅動和支持iso文件的驅動,這兩行是為了以防萬一。我的iso鏡像文件存放在用ntfs格式化的E盤下,如果你的iso文件在linux分區下請刪除第7行。對於iso文件存放在linux系統分區下的情況,請注意,如果home是單獨分區的話,而iso又存放在了比如"/home/username/download/ubuntu-14.04.iso",請用下面這行替換第9行
set isofile="/username/download/ubuntu-14.04.iso"
注意:去掉"/home"的文件夾名,包含位置。
grub2好像已經能支持ntfs格式了,所以第7行可以不加。但有時候系統還是會出現莫名其妙的問題(主要是個人道行淺啊),因此還是加上為好。第9行,給變量"isofile"賦值,把"/download/ubuntukylin-14.04-desktop-amd64.iso"換成你的iso鏡像文件的位置,注意這里是linux下分割文件夾的方式,"/"而不是windows的"\"。這個變量將用於第10行,查找iso文件的位置。第10行,加載iso鏡像文件。這里要詳細的說下(hd0,msdos6),hd0表示第一塊硬盤(我只有一塊硬盤),如果你的鏡像文件在第二塊硬盤,請用hd1,依次類推。msdos6表示分區,我的電腦是聯想B470,有一個隱藏的200m分區,然后還有主分區,邏輯分區。這樣隱藏分區就是msdos1(grub2之前是從0開始計數的,現在從1開始),C就是msdos2,D就是msdos3。可能你要說了,“那么E就是msdos4了”,先別着急,這個還真不是,可能由於多出來的那個隱藏oem分區的原因再加上我的E盤是邏輯分區我的E盤對應的是msdos6。目前詳細的原因我還不知道,有知道的給我解釋下啊,在此謝過了。但是你不用害怕這部影響我們安裝系統,輸入那個我們已經熟悉的命令 sudo fdisk -l 查找出存放你的iso文件的分區就可以了,下面是該命令在我的系統下的運行結果
1 Disk /dev/sda: 500.1 GB, 500107862016 bytes 2 255 heads, 63 sectors/track, 60801 cylinders, total 976773168 sectors 3 Units = 扇區 of 1 * 512 = 512 bytes 4 Sector size (logical/physical): 512 bytes / 4096 bytes 5 I/O size (minimum/optimal): 4096 bytes / 4096 bytes 6 Disk identifier: 0xccdfadbb 7 8 設備 啟動 起點 終點 塊數 Id 系統 9 /dev/sda1 * 2048 411647 204800 7 HPFS/NTFS/exFAT 10 /dev/sda2 411648 102811647 51200000 7 HPFS/NTFS/exFAT 11 /dev/sda3 102813694 976771071 436978689 f W95 擴展 (LBA) 12 Partition 3 does not start on physical sector boundary. 13 /dev/sda5 102813696 518807551 207996928 7 HPFS/NTFS/exFAT 14 /dev/sda6 518809600 744089599 112640000 7 HPFS/NTFS/exFAT 15 /dev/sda7 800993280 808804351 3905536 82 Linux 交換 / Solaris 16 /dev/sda8 808806400 867397631 29295616 83 Linux 17 /dev/sda9 867399680 976771071 54685696 83 Linux 18 /dev/sda10 744091648 800985087 28446720 83 Linux 19 20 Partition table entries are not in disk ordersda6就對應着msdos6,兩塊硬盤的話可能是sdb。第11,12行,加載linux內核。(loop)表示鏡像位置"(hd0,msdos6)/download/ubuntukylin-14.04-desktop-amd64.iso",至於"/casper/vmlinuz.efi"和"/casper/initrd.lz",需要查看iso文件驗證(linux下的歸檔管理器和windows下的winrar都可以查看iso文件),對於ubuntu來說vmlinuz和initrd一般放在"/casper"文件夾下。總之,用你的vmlinuz和initrd的位置取代"/casper/vmlinuz.efi"和"/casper/initrd.lz",注意如果是ubuntu14.04而不是kylin32位系統的話,應該是“/casper/vmlinuz”(注意沒有efi的后綴)。說到這里有沒有人知道到底聯想B470能不能裝64位系統啊?(已經失敗了n次了)
- 定制啟動界面,調整系統啟動方式。(如果不需要調整系統啟動順序的話可以跳過這步直接進行第5步)啟動界面如何設置系統的排列方式,怎么設置誰先啟動,如何調整默認啟動時間,這些都需要修改"/etc/default/grub"文件
1 sudo gedit /etc/default/grub
我的"/etc/default/grub"
1 GRUB_DEFAULT=3 2 GRUB_HIDDEN_TIMEOUT_QUIET=true 3 GRUB_TIMEOUT=6 4 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` 5 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" 6 GRUB_CMDLINE_LINUX=""
注釋:第三行表示啟動界面默認的等待(延遲)時間為6秒,第一行設置了系統默認啟動windows系統而不是ubuntu。關於第一行還需要詳細的解釋下,大家還記得"/etc/grub.d/"下,有一個"30_os-prober"文件嗎?這個文件是加載並搜索win7系統的腳本,如果你的win7安裝ubuntu之后不能引導啟動了,可以查看修改這個文件試試。由於起首數字是"30",排在"10"和"20"之后位於第3項,因此設置GRUB——DEFAULT等於3,就能默認啟動windows了。還有其他的方法來設置系統的啟動順序,比如將“30”的腳本名稱改為“07”等,我會在參考文獻中給出。其余的參數大家感興趣的話可以查閱參考文獻。
- 生成grub.cfg文件。將腳本"/etc/grub.d/40_custom"和"/etc/default/grub"修改完畢后,就可以生成grub.cfg文件了。現在可以說萬事具備,只歉東風了。東風來了!
1 sudo grub-mkconfig -o /boot/grub/grub.cfg 2 sudo update-grub
注釋:第2條命令,如果只是安裝iso鏡像文件的話應該可以省略。
- 重新啟動系統進入啟動界面,選擇"Ubuntukylin 14.04 ISO"(就是我們前面在40_custom中設置的那個),安裝成功的話就可以進入在iso鏡像上運行的ubuntu了。現在進入這個系統了,需要在硬盤安裝ubuntu的話,安裝之前還要運行命令
1 sudo umount -l /isodevice
接下來就可以安裝ubuntu到你的硬盤了。
四、參考文獻:
- https://wiki.archlinux.org/index.php/GRUB_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
archlinux 網站上介紹grub2安裝配置的文章,引言介紹了grub的工作原理。
- http://blog.csdn.net/wang02011/article/details/6293204
簡單介紹了如何設置默認啟動項。個人不推薦第二種做法。其實網上有人還提供了另外一種方法,但是,我試驗后並不成功。 sudo grub-set-default 3 sudo grub-mkconfig -o /boot/grub/grub.cfg
下面是幾個英文網站,雖然是英文,但是講解詳盡,理論充實喔
- https://help.ubuntu.com/community/Grub2/ISOBoot
詳細介紹iso安裝方法的網站,我正是參考這篇文章安裝成功的。
- https://help.ubuntu.com/community/Grub2/ISOBoot/Examples
給出了iso安裝的例子和解釋
- http://www.dedoimedo.com/computers/grub-2.html
詳細介紹了grub的工作機理和應用。想要深入研究grub定制自己的啟動界面的同學不要錯過啊
