起因
- 20年年末做了一個(gè)小項(xiàng)目,涉及到了linux系統(tǒng)的全盤(pán)加密,
- 在這個(gè)過(guò)程中回頭從鳥(niǎo)哥開(kāi)始悠轩,了解到了系統(tǒng)啟動(dòng)的冰山一角
- 引起了興趣后決定深入挖掘一下:把從BIOS到linux啟動(dòng)的整個(gè)流程串起來(lái)
- 也就是本文的主要內(nèi)容:從UEFI到Systemd
UEFI和BIOS
如知乎大佬所述档泽,BIOS與UEFI本質(zhì)是一類(lèi)東西
UEFI替代BIOS的過(guò)程,類(lèi)似電動(dòng)車(chē)替代燃油車(chē)的過(guò)程惨奕,是同類(lèi)東西的更新?lián)Q代
而這更新?lián)Q代背后的一系列推動(dòng)邏輯還是很有意思的雪位,比如為什么是intel芯片廠商主導(dǎo)推動(dòng),在文章中都有講
-
一致性:引用文中BIOS與UEFI的一致的統(tǒng)一流程如下:
- Rom Stage:在這個(gè)階段沒(méi)有內(nèi)存梨撞,需要在ROM上運(yùn)行代碼雹洗。這時(shí)因?yàn)闆](méi)有內(nèi)存香罐,沒(méi)有C語(yǔ)言運(yùn)行需要的棧空間时肿,開(kāi)始往往是匯編語(yǔ)言庇茫,直接在ROM空間上運(yùn)行。在找到個(gè)臨時(shí)空間(Cache空間用作RAM螃成,Cache As Ram, CAR)后旦签,C語(yǔ)言終于可以登場(chǎng)了,后期用C語(yǔ)言初始化內(nèi)存和為這個(gè)目的需要做的一切服務(wù)寸宏。
- Ram Stage: 在經(jīng)過(guò) ROM階段的困難情況后宁炫,我們終于有了可以大展拳腳的內(nèi)存,很多額外需要大內(nèi)存的東西可以開(kāi)始運(yùn)行了氮凝。在這時(shí)我們開(kāi)始進(jìn)行初始化芯片組羔巢、CPU、主板模塊等等核心過(guò)程罩阵。
- Find something to boot Stage: 終于要進(jìn)入正題了竿秆,需要啟動(dòng),我們找到啟動(dòng)設(shè)備永脓。就要枚舉設(shè)備袍辞,發(fā)現(xiàn)啟動(dòng)設(shè)備,并把啟動(dòng)設(shè)備之前需要依賴(lài)的節(jié)點(diǎn)統(tǒng)統(tǒng)打通常摧。然后開(kāi)始移交工作搅吁,Windows或者Linux的時(shí)代開(kāi)始。
-
區(qū)別處:UEFI即統(tǒng)一可擴(kuò)展固件接口落午,與BIOS即基本輸入輸出系統(tǒng)谎懦,的主要區(qū)別體現(xiàn)在上面所說(shuō)的:
- Ram Stage階段:UEFI的的擴(kuò)展性要比BIOS好得多,體現(xiàn)在如網(wǎng)卡廠商需要編寫(xiě)固件適配主板時(shí)溃斋,會(huì)舒服很多很多
- Find something to boot Stage:BIOS與UEFI在尋找bootloader時(shí)約定有所不同界拦,注意僅僅是一個(gè)約定,是需要我們?nèi)プ袷氐墓=伲@并不是UEFI和BIOS的核心區(qū)別享甸。盡管如此,我們?cè)谔剿骱蛯?duì)比使用時(shí)梳侨,接觸到的大多數(shù)僅僅是本階段的區(qū)別蛉威,所以接下來(lái)會(huì)著重介紹。
引導(dǎo)在哪里
- 引導(dǎo)即bootloader走哺,會(huì)按照使用者的意愿將目標(biāo)操作系統(tǒng)拉起
- 最初單系統(tǒng)的主機(jī)并不需要考慮復(fù)雜的bootloader行為蚯嫌,如提供菜單選擇引導(dǎo)多個(gè)系統(tǒng)
- 承上小節(jié),接下來(lái)介紹BIOS和UEFI在從不同介質(zhì)啟動(dòng)時(shí),會(huì)去哪尋找引導(dǎo)
引導(dǎo)在哪里
-
SATA 硬盤(pán)
- BIOS:MBR分區(qū)表的0-446字節(jié)
- UEFI:EFI分區(qū)中的特定路徑:EFI/BOOT/BOOTX64.EFI
-
USB 硬盤(pán)
- 同SATA硬盤(pán)
-
CDROM 光盤(pán)
- BIOS:根據(jù)El Torito格式(ISO 9660文件系統(tǒng)擴(kuò)展)尋找
- UEFI:將ISO本身當(dāng)作ESP分區(qū)择示,從 EFI/BOOT/BOOTX64.EFI啟動(dòng)
-
PXE 網(wǎng)絡(luò)
- BIOS:根據(jù)dhcp返回包中的參數(shù)束凑,請(qǐng)求指定的bootloader
- UEFI:根據(jù)dhcp返回包中的參數(shù),請(qǐng)求指定的bootloader
引導(dǎo)的配置文件一般保存有多個(gè)系統(tǒng)啟動(dòng)方式栅盲,甚至多個(gè)系統(tǒng)的啟動(dòng)選項(xiàng)
如centos的正常模式以及救援模式汪诉,如windows和linux雙系統(tǒng)
引導(dǎo)配置文件在哪里
- 引導(dǎo)的配置文件中一般存儲(chǔ)著經(jīng)常變化的信息,不適合硬編碼在引導(dǎo)二進(jìn)制代碼中
- 如引導(dǎo)提供的菜單的內(nèi)容均由引導(dǎo)配置文件中的信息提供
- 引導(dǎo)通過(guò)什么介質(zhì)獲取谈秫,一般引導(dǎo)配置文件也通過(guò)相同方式獲取
- 如pxe啟動(dòng)時(shí)摩瞎,grub會(huì)在tftp目錄中探測(cè)尋找grub.cfg
- 如硬盤(pán)啟動(dòng)時(shí),grub會(huì)掛載本地啟動(dòng)硬盤(pán)的boot分區(qū)孝常,grub.cfg就在其中
- 某個(gè)引導(dǎo)文件具體會(huì)選擇去哪里尋找配置文件旗们,是在引導(dǎo)文件編譯時(shí)固定指定的
內(nèi)核與臨時(shí)文件系統(tǒng)在哪里
- 展示并加載指定內(nèi)核與臨時(shí)文件系統(tǒng)是bootloader的責(zé)任,這些信息記錄在配置文件中构灸,因此以下均以grub2引導(dǎo)linux為例繼續(xù)介紹
- 內(nèi)核上渴,即linux的kernel,與kernel相配合的喜颁,還有rootfs稠氮,根目錄,類(lèi)似windows的c盤(pán)
- 臨時(shí)文件系統(tǒng)半开,顧名思義是臨時(shí)的隔披,其核心任務(wù)為找到rootfs并掛載
- 根文件系統(tǒng)有任何騷操作時(shí),基本都要在臨時(shí)文件系統(tǒng)中進(jìn)行相應(yīng)的配置和支持
- 如全盤(pán)加密(根文件系統(tǒng)加密寂拆,需在臨時(shí)文件系統(tǒng)中對(duì)其進(jìn)行解密后掛載至根)
- 如掛載遠(yuǎn)程的nfs為根目錄系統(tǒng)
- 臨時(shí)文件系統(tǒng)的存在奢米,保持了內(nèi)核的精簡(jiǎn),將內(nèi)核非必要的一些特殊文件系統(tǒng)識(shí)別掛載等模塊集成在其中
- 內(nèi)核文件的名字一般為vmlinuz纠永,大小一般10m以內(nèi)
- 臨時(shí)文件系統(tǒng)一般命名為initramfs(rh系)鬓长、initrd(de系),大小根據(jù)集成模塊多少在在50m左右浮動(dòng)
- 根據(jù)grub2的文檔尝江,中13.1條涉波,為grub2指明設(shè)備時(shí),可以使用tftp和http協(xié)議炭序,也就為全流程從網(wǎng)絡(luò)啟動(dòng)提供了可能性
- 最后從grub2的配置文件可以看出啤覆,grub并不關(guān)心真正的根文件系統(tǒng)在哪,他只負(fù)責(zé)找到并加載內(nèi)核與臨時(shí)文件系統(tǒng)
- 如我的工作站的grub.cfg惭聂,根文件系統(tǒng)通過(guò)內(nèi)核啟動(dòng)參數(shù)的方式傳遞
- 由內(nèi)核和臨時(shí)文件系統(tǒng)組成的小型操作系統(tǒng)根據(jù)參數(shù)去完成尋找與掛載
根文件系統(tǒng)在哪里
配置內(nèi)核有參數(shù)三種方式窗声,分別是編譯時(shí)指定、啟動(dòng)時(shí)的命令行參數(shù)指定彼妻、啟動(dòng)后/sys目錄配置
-
根文件系統(tǒng)在哪里是由第二種的命令行參數(shù)指定的嫌佑,其中小一部分參數(shù)會(huì)被內(nèi)核讀取,而其他的復(fù)雜的配置由位于臨時(shí)文件系統(tǒng)中的dracut程序讀取并執(zhí)行
- dracut是一個(gè)工具集侨歉,既可以按要求生成臨時(shí)文件系統(tǒng)文件屋摇,也會(huì)在臨時(shí)文件系統(tǒng)中負(fù)責(zé)根據(jù)參數(shù)尋找并掛載根目錄
- 這些內(nèi)核啟動(dòng)的命令行參數(shù)都是在grub.cfg中指定的
-
在硬盤(pán)
- 內(nèi)核+臨時(shí)文件系統(tǒng)組成的臨時(shí)操作系統(tǒng),直接掛載硬盤(pán)然后chroot就好
-
在網(wǎng)絡(luò)
- 根據(jù)dracut的文檔幽邓,可以掛載nfs炮温、cifs、iSCSI等網(wǎng)絡(luò)上位于其他主機(jī)的文件系統(tǒng)至本機(jī)的根目錄
-
在內(nèi)存
- 根據(jù)dracut的文檔牵舵,可以加載SquashFS文件至內(nèi)存柒啤,并以此內(nèi)存文件系統(tǒng)為根文件系統(tǒng)
Systemd
- 在近年發(fā)布的linux發(fā)行版基本都以systemd取代init,成為linux的守護(hù)進(jìn)程管理工具畸颅,也就是pid為1號(hào)的辣個(gè)人
- systemd會(huì)負(fù)責(zé)為用戶使用操作系統(tǒng)做好一切準(zhǔn)備担巩,如硬件準(zhǔn)備、網(wǎng)絡(luò)準(zhǔn)備没炒、登錄準(zhǔn)備等等
- 在正常根目錄系統(tǒng)中:
- systemd會(huì)拉起/usr/lib/systemd/system/default.target所依賴(lài)的一系列服務(wù)
- 此時(shí)default.target軟連接到multi-user.target為命令行界面做準(zhǔn)備
- 在臨時(shí)文件系統(tǒng)中:
- systemd同樣拉起default.target涛癌,只不過(guò)此時(shí)default指向了initrd.target
- 參考此文拆包initrd,從而查看其內(nèi)容
- 在安裝鏡像的臨時(shí)文件系統(tǒng)中:
- systemd同樣拉起的是initrd.target
- 但是此時(shí)initrd會(huì)依賴(lài)于一系列系統(tǒng)安裝相關(guān)的服務(wù)進(jìn)程送火,如
- redhat系的anaconda
- debian系的debian-installer
- 我們安裝系統(tǒng)的時(shí)候所見(jiàn)到的安裝GUI拳话,就是anaconda這類(lèi)服務(wù)在提供
- 最后由于anaconda還是一個(gè)非常出名的科學(xué)計(jì)算套件,這里給出此場(chǎng)景下所指的anaconda的文檔和wiki
- 文檔中所列出的boot options种吸,即kernel命令行參數(shù)弃衍,是pxe等場(chǎng)景下需要經(jīng)常查閱的
應(yīng)用實(shí)例
Hybrid ISO
現(xiàn)在下載較新的linux鏡像時(shí),各種文檔都會(huì)提醒坚俗,只需要dd if=xx.iso of=/dev/usb就可以刻錄系統(tǒng)盤(pán)
那么問(wèn)題來(lái)了镜盯,為什么?為什么用于刻錄在光盤(pán)的文件可以直接刻錄在u盤(pán)中并生效
經(jīng)過(guò)一番搜索發(fā)現(xiàn)了isohybrid關(guān)鍵字猖败,但是卻沒(méi)有找到詳細(xì)介紹相關(guān)技術(shù)的文章
-
最后還是在iso9600的wiki中順藤摸瓜形耗,還原出了技術(shù)細(xì)節(jié):
- 相關(guān)wiki,有MBR辙浑、iso9660激涤、EL-Torito、El-Torito詳細(xì)字段
-
一個(gè)hybrid iso鏡像具體構(gòu)成如下:
- MBR分區(qū)表判呕,位于iso9660未使用的前32kb空白區(qū)域(注意MBR只占用第一個(gè)扇區(qū)倦踢,即頭512byte),分區(qū)表如下
- 第一個(gè)分區(qū)打上了boot標(biāo)志侠草,但分區(qū)類(lèi)型為0辱挥,即空,開(kāi)始與結(jié)束指針指向了iso鏡像的頭與尾边涕,即整個(gè)iso9660文件系統(tǒng)作為第一個(gè)分區(qū)
- 第二個(gè)分區(qū)分區(qū)類(lèi)型為ef晤碘,即EFI分區(qū)褂微,開(kāi)始與結(jié)束指針指向了下文提到的efiboot.img文件,其文件內(nèi)容為一個(gè)vfat格式的文件系統(tǒng)园爷,其中包含了EFI模式下的grub引導(dǎo)相關(guān)文件
- 在學(xué)習(xí)hybrid iso時(shí)宠蚂,最困惑的問(wèn)題就是為什么iso9660文件系統(tǒng)中能夠兼容一個(gè)vfat系統(tǒng)用作EFI引導(dǎo),在這里得到了解答
- Volume Descriptors童社,iso9660文件系統(tǒng)信息結(jié)構(gòu)求厕,其中包含了:
- 指向文件系統(tǒng)根目錄結(jié)構(gòu)的指針(Primary Volume Descriptor)
- 指向引導(dǎo)相關(guān)的目錄結(jié)構(gòu)的指針(Boot Record),相關(guān)規(guī)范在El-Torito中定義
- 光盤(pán)文件系統(tǒng)(iso9660文件系統(tǒng)格式)扰楼,也就是我們通過(guò)mount -o loop掛載后看到的內(nèi)容呀癣,其中包含
- linux系統(tǒng)的內(nèi)核及臨時(shí)文件系統(tǒng),即centos鏡像中的images/pxeboot文件夾
- 提供efi分區(qū)內(nèi)容的文件弦赖,即centos鏡像中的images/efiboot.img文件
- 提供傳統(tǒng)BIOS模式下的引導(dǎo)项栏,即centos鏡像中的isolinux/文件夾,注意傳統(tǒng)BIOS在光盤(pán)介質(zhì)使用的是isolinux引導(dǎo)蹬竖,而不是grub
- MBR分區(qū)表判呕,位于iso9660未使用的前32kb空白區(qū)域(注意MBR只占用第一個(gè)扇區(qū)倦踢,即頭512byte),分區(qū)表如下
-
同一個(gè)二進(jìn)制文件忘嫉,BIOS與UEFI模式 * 寫(xiě)入光盤(pán)與U盤(pán)時(shí),分別的啟動(dòng)流程:
- BIOS + 光盤(pán):讀取光盤(pán)Boot Record信息案腺,從而尋找到isolinux文件夾中的引導(dǎo)庆冕,引導(dǎo)尋找光盤(pán)中的內(nèi)核與臨時(shí)文件系統(tǒng)
- BIOS + U盤(pán):讀取MBR頭部的引導(dǎo)代碼,從而尋找到isolinux中的引導(dǎo)劈榨,最后引導(dǎo)掛載boot分區(qū)(iso9660格式)找到內(nèi)核與臨時(shí)文件系統(tǒng)
- UEFI + 光盤(pán):讀取光盤(pán)Boot Record信息访递,從而尋找到光盤(pán)中的EFI文件夾中的grub2引導(dǎo),最后引導(dǎo)尋找光盤(pán)中的內(nèi)核與臨時(shí)文件系統(tǒng)
- UEFI + U盤(pán):讀取MBR分區(qū)表同辣,發(fā)現(xiàn)類(lèi)型為ef的EFI分區(qū)拷姿,掛載后找到efiboot.img文件中的引導(dǎo),最后引導(dǎo)尋找boot分區(qū)中的內(nèi)核與臨時(shí)文件系統(tǒng)
-
最后總結(jié)一下:
- 光盤(pán)Boot Record中的信息旱函,指導(dǎo)光盤(pán)介質(zhì)下响巢,BIOS找到isolinux/ 與 UEFI找到EFI/
- MBR分區(qū)表中的信息,指導(dǎo)U盤(pán)介質(zhì)下棒妨,BIOS找到isolinux/ 與 UEFI找到images/efiboot.img
最后的最后踪古,在調(diào)用isoparser庫(kù)解析iso鏡像查詢信息的時(shí)候,發(fā)現(xiàn)一個(gè)有意思的事情券腔,即不同的文件路徑有可能指向了同一個(gè)文件伏穆,如images/pxeboot/initrd.img與isolinux/initrd.img其實(shí)是同一個(gè)文件內(nèi)容,這樣節(jié)省了一些空間纷纫,代碼如下
#! /usr/bin/python3
import isoparser
a = isoparser.parse('CentOS-7-x86_64-Minimal-2009.iso')
def foo(base, r):
for i in r.children:
if i.is_directory:
foo(base + [i.name], i)
else:
print(i.location,'\t', b'/'.join(base + [i.name]))
res.append((i.location, b'/'.join(base + [i.name])))
res = []
foo([], a.root)
sorted(res, key=lambda x:x[0])
極簡(jiǎn)pxe
上面已經(jīng)說(shuō)過(guò)無(wú)論BIOS還是UEFI都是根據(jù)dhcp響應(yīng)包中的字段去尋找引導(dǎo)
-
pxe引導(dǎo)安裝系統(tǒng)的過(guò)程可以簡(jiǎn)單總結(jié)如下
- BIOS/UEFI指定網(wǎng)卡并從pxe啟動(dòng)
- 主板廣播dhcp請(qǐng)求
- 我們搭建的dhcp服務(wù)器響應(yīng)dhcp請(qǐng)求枕扫,在響應(yīng)包中通過(guò)dhcp option返回相關(guān)信息,如
- option 3 - gateway
- option 6 - dns
- option 66 - tftp server ip
- dhcp obot - 引導(dǎo)在tftp服務(wù)中的路徑
- 主板從我們搭建的tftp服務(wù)器中下載引導(dǎo)
- 執(zhí)行引導(dǎo)辱魁,引導(dǎo)從tftp服務(wù)器中通過(guò)遍歷尋找配置文件烟瞧,即grub.cfg
- 尋找到配置文件后诗鸭,在屏幕顯示引導(dǎo)菜單供用戶選擇
- 用戶選擇安裝系統(tǒng)后,使用指定協(xié)議向執(zhí)行服務(wù)器下載內(nèi)核及臨時(shí)文件系統(tǒng)
- 常規(guī)情況會(huì)繼續(xù)向我們搭建的tftp服務(wù)器下載
- 但是grub也會(huì)支持從http服務(wù)器下載参滴,因此如果能通公網(wǎng)的話强岸,可以編寫(xiě)grub.cfg直接指定公網(wǎng)華為軟件源中的對(duì)應(yīng)內(nèi)核與臨時(shí)文件系統(tǒng)
- grub支持什么協(xié)議,這里就可以用什么協(xié)議卵洗,這時(shí)候已經(jīng)和主板的支持沒(méi)有關(guān)系了
- 由內(nèi)核與臨時(shí)文件系統(tǒng)組成的操作系統(tǒng),會(huì)根據(jù)傳入的內(nèi)核命令行參數(shù)弥咪,執(zhí)行相應(yīng)的操作过蹂,如安裝操作系統(tǒng)至本地硬盤(pán)
- 安裝過(guò)程涉及幾個(gè)文件下載的過(guò)程:
- 一:自動(dòng)化安裝時(shí)需要指定自動(dòng)化安裝腳本(kickstart之于centos、preseed之于debian)
- 相應(yīng)的安裝程序(anaconda之于centos聚至、debian-install之于debian)讀取通過(guò)內(nèi)核參數(shù)傳入的腳本地址酷勺,并下載
- 這里不同的安裝程序也支持不同的腳本來(lái)源,如debian-installer支持tftp扳躬,而anaconda就不支持脆诉,具體支持協(xié)議列表需查閱文檔
- 二:下載腳本后,開(kāi)始了安裝過(guò)程贷币,其中涉及第二點(diǎn)下載的過(guò)程時(shí)軟件包的安裝
- 一個(gè)操作系統(tǒng)可以理解為內(nèi)核 + 臨時(shí)文件系統(tǒng) + 根目錄(由很多很多軟件包組成)
- 而內(nèi)核是直接由安裝時(shí)期的內(nèi)核拷貝過(guò)去击胜,臨時(shí)文件系統(tǒng)根據(jù)根目錄的位置使用工具重新生成
- 根目錄中的軟件包卻是需要從網(wǎng)絡(luò)或硬盤(pán)源中下載安裝的,這也是我們?cè)谙螺d安裝鏡像的時(shí)候everything與netinstall版本的區(qū)別
- 即everything或者minial中內(nèi)置了軟件源役纹,而netinstall需要從網(wǎng)絡(luò)下載偶摔,我們需要在鏡像大小與網(wǎng)絡(luò)速度之間權(quán)衡下載
-
了解了pxe的啟動(dòng)過(guò)程,我們可以通過(guò)搭建cobbler促脉、debian-fai等搭建pxe所需的dhcp辰斋、tftp服務(wù),但往往比較復(fù)雜瘸味,適用于大規(guī)模pxe管理宫仗,因此也可以嘗試everything under control的極簡(jiǎn)pxe
- 通過(guò)閱讀dnsmasq的文檔發(fā)現(xiàn)dnsmasq不止支持作為dns、dhcp服務(wù)旁仿,還支持tftp服務(wù)
- 而根據(jù)上述的pxe過(guò)程藕夫,只有dhcp與tftp服務(wù)是本地內(nèi)網(wǎng)不可或缺的,內(nèi)核與臨時(shí)文件系統(tǒng)可以從網(wǎng)絡(luò)下載枯冈,安裝腳本也可以從網(wǎng)絡(luò)下載汁胆,軟件包更是可以從網(wǎng)絡(luò)下載
- 其中內(nèi)核與臨時(shí)文件系統(tǒng)和軟件包都可以從公網(wǎng)的centos鏡像源中下載,與我們下載的iso鏡像中完全相同
- 而安裝腳本的位置霜幼,如果安裝程序如debian-installer支持從tftp下載安裝腳本嫩码,那么把腳本放在tftp服務(wù)即可
- 如果不支持從tftp下載腳本,那么在公網(wǎng)的自己的服務(wù)器的web或者內(nèi)網(wǎng)搭建一個(gè)web服務(wù)提供腳本下載均可
- 綜上罪既,其實(shí)一個(gè)dnsmasq就能夠支撐pxe引導(dǎo)铸题,我當(dāng)前的配置如下
##### dhcp
listen-address=198.18.0.1,127.0.0.1
dhcp-range=198.18.10.0,198.18.126.254,48h
dhcp-option=3,198.18.0.1
dhcp-option=6,114.114.114.114
dhcp-option=66,198.18.0.1
dhcp-boot=grubx64.efi
dhcp-lease-max=1000
dhcp-authoritative
##### tftp
enable-tftp
tftp-root=/mnt/
- tftp提供服務(wù)的目錄也非常簡(jiǎn)單铡恕,只有兩個(gè)文件:grubx64.efi 和 grub.cfg
- grubx64.efi是從centos鏡像中拆出來(lái)的grub引導(dǎo),grub.cfg內(nèi)容如下
set default="1"
function load_video {
insmod efi_gop
insmod efi_uga
insmod video_bochs
insmod video_cirrus
insmod all_video
}
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2
insmod net
set timeout=60
### END /etc/grub.d/00_header ###
search --no-floppy --set=root -l 'CentOS 7 x86_64'
### BEGIN /etc/grub.d/10_linux ###
menuentry 'Install CentOS 7.6.1810' --class fedora --class gnu-linux --class gnu --class os {
linuxefi (http,mirrors.huaweicloud.com)/centos-vault/7.6.1810/os/x86_64/images/pxeboot/vmlinuz ks=http://xxx/kickstart/centos.ks
initrdefi (http,mirrors.huaweicloud.com)/centos-vault/7.6.1810/os/x86_64/images/pxeboot/initrd.img
}
menuentry 'Install Debian 10 buster' {
linuxefi (http,mirrors.huaweicloud.com)/debian/dists/buster/main/installer-amd64/current/images/netboot/debian-installer/amd64/linux vga=788 debian-installer/allow_unauthenticated=true --- quiet auto=true priority=critical interface=auto preseed/url=http://xxx/kickstart/debian.seed
initrdefi (http,mirrors.huaweicloud.com)/debian/dists/buster/main/installer-amd64/current/images/netboot/debian-installer/amd64/initrd.gz
}
- 內(nèi)核丢间、臨時(shí)文件系統(tǒng)探熔、軟件包都從華為源下載,真滴很快樂(lè)
- 唯一的缺點(diǎn)可能是不同發(fā)行版的軟件源目錄布局不同烘挫,需要好好找一找到底在哪
- 比如centos7的軟件源已經(jīng)過(guò)時(shí)了遷移到了centos-vault
- 比如debian提供了netboot/debian-installer文件夾專(zhuān)供pxe引導(dǎo)的文件
ventoy
- 一個(gè)神奇的啟動(dòng)盤(pán)制作工具诀艰,顯著的優(yōu)點(diǎn)是只需要把iso鏡像copy到u盤(pán)里就可以引導(dǎo)了,還不會(huì)廢了一個(gè)u盤(pán)饮六,地址
- ventoy在安裝到u盤(pán)的過(guò)程中其垄,會(huì)初始化MBR分區(qū)表(為了兼容傳統(tǒng)BIOS)
- 第一個(gè)大分區(qū)格式化成exfat用于存放文件
- 第二個(gè)小分區(qū)格成vfat用于EFI引導(dǎo)以及ventoy相關(guān)的文件和配置
- 除了各類(lèi)插件能定制grub2讓引導(dǎo)菜單更好看之外,ventoy提供了安裝腳本的掛載卤橄,這個(gè)功能真的非常棒绿满,小規(guī)模的幾臺(tái)機(jī)器想自動(dòng)化裝系統(tǒng)但又懶得搭pxe時(shí),這是個(gè)非常好的替代方案窟扑,省去了很多鼠標(biāo)操作
- 特地為了ventoy買(mǎi)了一個(gè)64G的u盤(pán)豆喇颁,從此系統(tǒng)走到哪裝到哪
Liveos
- dracut的文檔中如何指定live模式,以及指定root目錄的SquashFS文件有明確說(shuō)明
- 至于引導(dǎo)以及內(nèi)核和臨時(shí)文件系統(tǒng)在哪嚎货,都可以的
- 但一般live模式啟動(dòng)啟動(dòng)用于把必要的工具裝里面從而現(xiàn)場(chǎng)維護(hù)設(shè)備
- 所以大概率引導(dǎo)橘霎、內(nèi)核、臨時(shí)文件系統(tǒng)殖属、SquashFS都在U盤(pán)里
瘦客戶端
- 引導(dǎo)通過(guò)pxe茎毁、內(nèi)核臨時(shí)文件系統(tǒng)通過(guò)http或tftp、根目錄可以通過(guò)nfs掛載
- 最終完全依靠網(wǎng)絡(luò)引導(dǎo)一個(gè)操作系統(tǒng)忱辅,主機(jī)不需要硬盤(pán)或硬盤(pán)當(dāng)作數(shù)據(jù)盤(pán)七蜘,有cpu和內(nèi)存就夠了