很多人都有安裝linux的經歷,無非就是插張光碟或者usb到主機上,然後按照提示一步一步進行配置,完了重啟一遍,ok。但是這個過程中,系統到底做了些什麼事情呢?下面就簡單地來說一說。
普通的光碟是基於iso-9660的標準發展起來的,在光碟上資料被組織為幀和扇區,乙個扇區包含98幀,共2352位元組,乙個700m的cd大概包含了360000個扇區。在大約1994~2023年的時候,鳳凰科技(phoenix technologies)和ibm的兩個牛人(curtis stevens和stan merkin)在乙個墨西哥餐廳邊吃午飯邊商量可啟動盤(bootable disk)的規範,商量完後,兩人根據餐館的名字將可啟動盤的規範命名為」el torito「。這個規範實際上對iso-9660進行了擴充套件,規範中定義了可啟動光碟的資料結構與映像資料的配置及光碟製作的一些詳細說明,同時也隱含地制定了能夠讀取可啟動光碟的bios規範。2023年compaq、phoenix與intel聯合發布的bios啟動規範(bios boot specification)1.01,該規範為bios廠家提供了製造支援可啟動光碟的bios的標準。
2. 可啟動盤的原理
可啟動盤跟普通的資料盤到底有什麼區別呢?為什麼將它插到電腦上就能夠引導系統呢?
根據標準,bios會在開機時將檢查光碟的第17個扇區(sector 17),查詢其中的**,若找到啟動記錄卷描述表(boot record volume descripter),它就根據表中的位址繼續查詢啟動目錄(booting catalog),找到啟動目錄後 ,再根據其中描述的啟動入口(boot entry)找到相應的啟動盤映像(bootable disk image)或啟動引導檔案,找到啟動盤映像後,讀取其中的資料,並執行相應的開機動作。
啟動盤映像多很多種,如syslinux、isolinux、pxelinux、extlinux等,其中pxelinux用於網路安裝,extlinux用於從ext2/ext3/ext4/btrfs檔案系統啟動。而啟動光碟會使用到剩下的兩種映像:syslinux和isolinux。
在上面我們提到了自啟動光碟的規範」
el torito「,它支援兩種啟動模式:模擬模式和非模擬模式。
模擬模式將啟動資訊儲存在乙個1.44m的fat格式的映像檔案中,就如同將一張1.44m的軟盤」鑲嵌「到一張光碟中,系統從光碟中載入這個映像檔案,然後跟使用軟盤一樣啟動系統。因為受空間限制,這種模式不能用於啟動完整的linux作業系統,通常只用來做rescue盤、live usb或者其他輕量級的啟動系統。模擬模式使用的映像就是syslinux,但這種方式一般只用於2023年以前的電腦。
非模擬模式直接將啟動資訊儲存在光碟上,而不是乙個模擬的映像檔案上,這時用的就是isolinux。從3.72版本開始,isolinux支援」
hybrid mode
「模式,能夠在iso映像中放乙個啟動程式,支援使用同乙個映像檔案從光碟或者usb啟動。現在大部分情況我們用的都是這種方式。
isolinux目錄中一般包含下列檔案 名稱
說明isolinux.bin
非模擬模式的啟動引導程式。當使用mkisofs命令時,-b引數要指向這個檔案
vmlinuz
壓縮的核心,引導系統安裝。」vm「表示」virtual memory「
initrd.img
記憶體映像檔案(initial ramdisk)。解壓後可以看出乙個簡潔的linux根檔案系統
isolinux.cfg
isolinux的配置檔案
boot.cat
啟動目錄(booting catalog)檔案,儲存了所有可用的啟動映像
*.msg
一些命令用到的文字檔案,比如啟動介面的提示資訊
*.lss
isolinux的影象化啟動介面
[plain]view plain
copy
default local
prompt 1
timeout 600
display boot.msg
label linux
kernel vmlinuz
label rescue
kernel vmlinuz
label local
localboot 0xff
label reinstall
kernel vmlinuz
檔案頭部可以認為是一些全域性設定,default表示超時後系統的預設啟動項,prompt為1時表示始終顯示啟動提示資訊,否則需要按某些鍵才會顯示,timeout以0.1秒為單位,等待使用者輸入的超時時間。
檔案後面以label開頭的段落就是具體的啟動項及引數配置。比如使用者輸入linux,那表示將用vmlinz為核心,帶著引數initrd=initrd.img來啟動系統;localboot 0x80表示如果使用者輸入local,則系統將從第一塊硬碟的第乙個分割槽啟動,可選引數包括:
再說一下initrd.img。initrd.img是乙個使用gzip壓縮的ext2格式的檔案系統映像,它包含了linux的根目錄,解壓後能夠看到下面的目錄結構:bin dev etc firmware init lib lib64 modules proc sbin selinux sys tmp usr var
它一般被用來臨時地引導硬體到實際核心能夠接管並繼續引導的狀態,主要是用於載入ext3等檔案系統及 scsi 裝置的驅動。比如,使用scsi硬碟,而核心中並沒有相關驅動,那麼在裝入scsi模組之前,核心不能載入根檔案系統,這時就可以從initrd的/lib/modules下載入驅動程式來讀取硬碟資料。
將上面1~4節的內容彙總一下,可以大概得到linux從光碟或usb安裝過程第一階段的內幕:
step1. 電源上電後,bios根據設定的啟動順序從第乙個裝置開始啟動,假設第乙個裝置已經被設定為光碟或者usb,啟動程式執行/isolinux路徑下的isolinux.bin,這個程式讀取isolinux.cfg,在啟動螢幕上顯示所有的啟動項。
step2. 使用者選擇某個啟動項(假設為reinstall)後,引導程式根據引數繼續引導過程,載入核心映像vmlinuz和初始ram磁碟initrd.img,在記憶體中構建了乙個linux啟動所需的虛擬的根檔案系統(rootfs)。
step3. 核心執行initrd.img中的/init程式(這實際上是乙個指向/sbin/init的軟鏈結)。init會呼叫/sbin/loader程式,執行anaconda主程式。
至此,安裝引導的第乙個階段結束,這個階段的主要任務就是找到第二個階段的引導程式並執行它。
安裝的第二個階段實際上就是anaconda的執行過程,非互動式安裝建議直接參考ks.cfg的手冊來理解,本文不再贅述,只簡單介紹一下安裝盤上相關檔案和目錄。
安裝盤頂層目錄除了前面提到的isolinux,還有幾個主要的目錄,如images、packages、repodata,另外還有幾個檔案,如ks.cfg、.discinfo和.treeinfo。
檔案或目錄名
說明.discinfo
安裝盤識別資訊,執行/usr/lib/anaconda-runtime/buildinstall時生成
.treeinfo
記錄不同安裝方式安裝程式所在的目錄結構
ks.cfg
kickstart檔案,非互動式安裝的配置檔案,包括系統賬戶、分割槽以及安裝哪些rpm包等都在裡面定義
images
包含啟動和驅動盤映像檔案,最重要的是第二階段的引導映像
packagesinstall.img(rhel6)或stage2.img(rhel5)
包含所有的二進位制rpm包
repodata
包含rpm包的描述檔案,如依賴關係,包含檔案,校驗碼資訊。有四個必要檔案:filelists.xml.[gz],other.xml.[gz],primary.xml.[gz]和repomd.xml
centos6 2使用yum安裝lamp
要使用yum安裝,先把軟體更新源換成本地掛載的光碟,我用的是virtualbox下安裝的centos6.2,由於安裝時是最小化桌面安裝,所以此時在 etc yum.repos.d 目錄下的centos media.repo檔案中修改baseurl,修改完成後用 yum list 命令可發現下面的可安...
CentOS 6 2安裝Nvidia顯示卡驅動
nvidia顯示卡驅動不支援帶xen的核心。1.安裝kernel 檢視自己的核心版本 uname r yum install kernel kernel devel 重啟電腦。我電腦相應的顯示卡驅動 nvidia linux x86 195.36.15 pkg1.run 3.進入文字介面安裝顯示卡驅...
centos6 2顯示卡驅動安裝筆記
第一步 把nouveau驅動加入黑名單 修改 etc modprobe.d blacklist.conf檔案,在裡面加入blacklist nouveau 第二步 重新建立initramfs image檔案 mv boot initramfs uname r img boot initramfs u...