[計算機(jī)硬件及網(wǎng)絡(luò)]GRUB2 中文手冊 word 版
《[計算機(jī)硬件及網(wǎng)絡(luò)]GRUB2 中文手冊 word 版》由會員分享,可在線閱讀,更多相關(guān)《[計算機(jī)硬件及網(wǎng)絡(luò)]GRUB2 中文手冊 word 版(75頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 GNU GRUB 中文手冊 修訂次數(shù):1 不保證含義準(zhǔn)確僅供參考。若發(fā)現(xiàn)有謬誤之處可發(fā)送郵件到:grub2_cn_manual@ 郵件主題必須以 grub2: 開始,否則系統(tǒng)不接收。 針對 grub 版本 v1.99 info 手冊翻譯,并且添加插圖和注解。 Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any
2、 later version published by the Free Software Foundation; with no Invariant Sections. 譯者:三寸斷梁 1 grub 前言 搭建 GRUB2 LINUX 實驗環(huán)境。由于 GRUB 是啟動加載器,因此你修改配置文件后需要重啟電腦才 能看到改變,為了避免反復(fù)重啟。在這里推薦使用 VirtualBox 虛擬機(jī)。 本人實驗配置是:Fedora 16-i386-DVD 完全安裝,VirtualBox 4.2.2 for linux 。Grub 1.99 。 syslinu
3、x 4.05 ,你的 linux 主機(jī)應(yīng)該安裝有 grub2 。下文所述,在我的機(jī)器 3 個鏡像成功加載。 1. 準(zhǔn)備虛擬機(jī)。如果你發(fā)現(xiàn)鼠標(biāo)消失了,按下 右 ctrl 。 ? ? 從 https://www.virtualbox.org/wiki/Linux_Downloads 下載 VirtualBox 4.2.2 。我選擇 的是 All distributions 。 80M 左右的體積。 新建一個虛擬機(jī),操作簡單直接下一步下一步。設(shè)置為使用 128M 內(nèi)存,使用虛擬硬盤文 件,512M 硬盤。顯存 23M 。不要啟動虛擬機(jī),完成下面的步驟。
4、 2. 準(zhǔn)備 memdisk ? ? ? 使用 syslinux 是因為實驗中的實例需要 memdisk,它是包括在 syslinux 中的??梢杂脕? 加載一些 Win 下的 img 鏡像,比如: Ghost82.img MaxDOS.img 讀者可到網(wǎng) 下載這 兩個文件。 從 ftp://ftp.kernel.org/pub/linux/utils/boot/syslinux/ 下載 syslinux-4.05.tar.gz 它是 syslinux 源代碼。新版本 syslinux 中的 memdisk 能自動計算鏡像文件的 c h s
5、參數(shù)。解壓 源代碼到某個路徑例如 主目錄~ 編譯 memdisk(我們只需要 memdisk)。編譯需要 nasm 編譯器,執(zhí)行如下命令: cd ~/syslinux-4.05/memdisk make 1 它會生成名為 memdisk 的文件。這個文件可以在 GRUB2 中使用 linux16 加載。 3. 準(zhǔn)備用來創(chuàng)建光盤鏡像的 iso 目錄 ? ? mkdir -p ~/iso/boot/grub{,2} 在 ~/iso/boot/grub 下建立配置文件 grub.cfg 內(nèi)容如下: set root="(
6、cd)" menuentry Ghost82.img { linux16 /boot/memdisk initrd16 /Ghost82.img } menuentry MaxDos.img { linux16 /boot/memdisk initrd16 /MaxDOS.img } menuentry win7pe-cn.iso { linux16 /boot/memdisk iso initrd16 /Win7PE-CN.iso #你需要自己準(zhǔn)備一個 Win iso,使用 memdisk 在虛擬機(jī)中加載 ISO 需要等待較長時間。而且需要
7、大量內(nèi) 存。我們最初設(shè)置的 128M 不夠用。所以正文沒有提及。 } set timeout=-1 ? 復(fù)制 Ghost82.img MaxDOS.img 到~/iso ;復(fù)制 ~/syslinux-4.05/memdisk/memdisk 到 ~/iso/boot/;復(fù)制所有 GRUB2 模塊到~/iso/boot/grub2 。GRUB2 模塊在 i386 /usr/lib/grub2/i386-pc/ 。 4. 創(chuàng)建 grub.iso ,這個文件將用虛擬機(jī)加載。 ? 在主目錄下執(zhí)行命令:grub2-mkrescue -o g
8、rub.iso iso 應(yīng)該在: 因為當(dāng)前處在主目錄下,命令中的 iso 就指向 ~/iso 目錄。創(chuàng)建的 grub.iso 光盤,包含: ~/iso/* 下的所有文件,并且包含有 GUB2 啟動區(qū)塊。這個 iso 可以寫入 CD。如果希望寫入 U 盤需要使用 grub2-install 命令。 5. 在虛擬機(jī)的鏡像列表中添加 grub.iso,然后啟動虛擬機(jī)。 當(dāng)你修改了 iso/boot/grub/grub.cfg 配置文件,重新執(zhí)行第四步,然后重啟虛擬機(jī)就看以看到 改變。 2 如果你沒有出錯且幸運(yùn)的話,虛擬機(jī) 應(yīng)該能夠
9、得到 圖。嘗試前兩個選項,她們應(yīng)該能夠正確運(yùn)行。 1.1 概論 簡而言之:grub 是一個引導(dǎo)加載器,即計算機(jī)系統(tǒng)啟動時第一個運(yùn)行的程序。它是為了加載操作系統(tǒng)和 轉(zhuǎn)移控制權(quán)給操作系統(tǒng)內(nèi)核。內(nèi)核再繼續(xù)啟動完整的操作系統(tǒng)。 GNU GRUB 是一個非常強(qiáng)大的引導(dǎo)加載器,它可以加載種類繁多的操作系統(tǒng)。還支持鏈?zhǔn)郊虞d"chain- loading" 。 GRUB 最大的特性就是可擴(kuò)展性。GRUB 支持文件系統(tǒng)和內(nèi)核可執(zhí)行格式,因此你可以用很多方式加載 你的 OS,而不用記錄下 OS 在磁盤 的物理地址。比如使用分區(qū)名,路徑和文件名指定文件。
10、 當(dāng) GRUB 加載系統(tǒng)時,可以使用命令行交互模式,也可以使用菜單選擇模式。使用命令行模式你需要指 定內(nèi)核的文件名和分區(qū)名。在菜單模式下,你只需要移動箭頭來選擇一個菜單然后按下 enter。菜單使用 一個配置文件來說明。 1.2 GRUB 的歷史 略 1.3 與以前版本的不同點(diǎn) GRUB2 是重寫 GRUB 后的升級版本。二者有很多相同的特性。但是也有很多地方發(fā)生了改變。 1. 新的配置文件名:/boot/grub/grub.cfg 而不是/boot/grub/menu.lst or grub.conf ,配置文件有新 的語法。因此
11、不能直接使用 grub1 的配置文件。 2. grub.cfg 由 grub2-mkconfig 命令產(chǎn)生。它方便升級內(nèi)核版本。 3. 分區(qū)編號從 1 開始,而不是 0. 3 4. 配置文件現(xiàn)在是一個完整的腳本語言,它支持:變量,條件,循環(huán)。 5. save_env 和 load_env 支持對啟動狀態(tài)的本地保存。 6. GRUB2 擁有更加聰明的算法用來找尋它所需要的文件。使用 search 命令你可以通過卷標(biāo)或者 UUID 來選擇磁盤。 7. GRUB2 支持多找其他類型的系統(tǒng):PC EFI,PC core
12、boot,PowerPC,SPARC,MIPS .. 8. 支持多種文件系統(tǒng),不僅僅限于:ext4,HFS+,NTFS 9. GRUB2 可以直接從 LVM 和 RAID 中讀取文件。 10. 支持圖形終端和菜單系統(tǒng)。 11. GRUB2 交互界面可以被翻譯,包括菜單項的名字。 12. 鏡像文件,發(fā)生變化。 13. GRUB2 有動態(tài)加載的模塊可用于支持更多的文件系統(tǒng)和其他功能。 2 加載器的作用 引用自 Gordon Matzigkeit,GRUB 愛好者: 大多數(shù)人在談?wù)撾娔X的時候總是討論操作系統(tǒng)和內(nèi)核。因
13、此她們總是說"GNU/linux" 或者"GNU/Hurd" 。 其他多數(shù)人認(rèn)為內(nèi)核是系統(tǒng)中最重要的部分,因此他們把 GNU OS 稱作 Linux 系統(tǒng)。 我個人認(rèn)為那種看法是非常片面的,因為啟動加載器才是所有軟件最重要的。我過去常常把以上的系統(tǒng)稱 1 作:"LILO" 和 GRUB 系統(tǒng) 可惜的是沒人支持我的見解,因此我現(xiàn)在只用 GNU 指代 GRUB。 因此如果你聽到有人說 GNU 系統(tǒng),那你一定要想到那其實是圍繞這 GRUB 展開的。 作為 GRUB 的維護(hù)者,我們并不支持 Gordon 這種程度的發(fā)燒友。但是他的話可以幫助理解 GRUB 的
14、 作用。 2.1 命名規(guī)范 GRUB 為用的設(shè)備語法相對與以前發(fā)生了重要變化。 (fd0) 首先 GRUB 需要設(shè)備名稱被擴(kuò)在圓括號內(nèi),fd 表示軟盤,數(shù)字 0 表示編號為 0 的設(shè)備(第一個軟盤設(shè) 備),編號從零開始計數(shù)。 (hd0,msdos2) hd 意思是硬盤,數(shù)字 0 代表設(shè)備號,意味著是第一塊硬盤。Msdos 指出了分區(qū)類型,數(shù)字 2 代表分區(qū)編 號。分區(qū)編號從 1 開始計數(shù),而不是 0 。因此 面的代碼指定了第一個硬盤的第二個分區(qū)為 msdos 格式。 當(dāng)你選擇了分區(qū)時 GRUB 會嘗試解析文件系統(tǒng),并從分區(qū)中讀取資料
15、。 1 4 LILO , LInux LOader ,一個很多人使用但是很少有人喜歡的加載器。 (hd0,msdos5) 這指定了第一個硬盤的第一個擴(kuò)展分區(qū)。由于主分區(qū)最多為 4,所以擴(kuò)展分區(qū)從 5 開始編號。 (hd1,msdos1,bsd1) 第 2 塊硬盤 的第一個 BSD slice (BSD 使用 slice 管理磁盤,概念類似于主分區(qū))。 想讓 GRUB 真實的訪問磁盤和分區(qū),你需要在命令行中按照 述語法指定分區(qū)。例如: set root=(fd0) parttool (hd0,msdos3) hidden
16、- 如果你不知道磁盤中的分區(qū)方法,可以使用 grub 的補(bǔ)全功能。只輸入 set root=( 然后按下 tab 鍵,GRUB 會自動顯示設(shè)備列表,分區(qū)名,文件名。 注意 GRUB 不從 SCSI 識別 IDE,它簡單的從 0 開始給設(shè)備編號,而忽略設(shè)備類型。同差 IDE 設(shè)備的編 號小于 SCSI 設(shè)備。如果你在 BIOS 中改變了 IDE 和 SCSI 的引導(dǎo)順序,那編號大小就說不準(zhǔn)了。 現(xiàn)在考慮一個問題,如何指定一個文件 (hd0,msdos1)/vmlinuz 它在指定分區(qū) 指定文件 vmlinuz。依次類推,可以指定任意路徑。
17、 3 安裝 GRUB 在類 unix 系統(tǒng)中安裝 GRUB 請在 root 權(quán)限調(diào)用 grub2-install 程序。 命令參數(shù)比較簡單,只需要指定目標(biāo)磁盤設(shè)備文件名。 # grub2-install /dev/hda 在 GNU/hurd 系統(tǒng)下使用這個命令 # grub2-install /dev/hd0 面的兩個命令會把 GRUB 鏡像放置到/boot 文件夾。如果你希望它把文件放到其他文件夾需要指定 --boot-directory 參數(shù)。這里有個創(chuàng)造軟盤啟動的實例。 # mke2fs /dev/fd0 # mount
18、-t ext2 /dev/fd0 /mnt # mkdir /mnt/boot # grub2-install --boot-directory=/mnt/boot /dev/fd0 # umount /mnt 有些 BIOS 在使用 USB 設(shè)備的第一個分區(qū)作為軟盤時有 bug。此時把 USB 設(shè)備當(dāng)作硬盤來啟動。俗稱: USB-FDD 啟動。這種情況下你需要這樣安裝 GRUB。: # losetup /dev/loop0 /dev/sdb1 # mount /dev/loop0 /mnt/usb # grub2-install --boot-direct
19、ory=/mnt/usb/bugbios --force --allow-floppy /dev/loop0 這個安裝方法不和標(biāo)準(zhǔn)方法沖突。因為她們被安裝到其他文件夾里。 目前 grub2-install 只是一個 shell 腳本。腳本調(diào)用了 grub2-mkimage 和 grub2-setup 。你也可以直接使 用這兩個命令。不建議這樣做,非常熟悉 grub 者除外。安裝引導(dǎo)加載器到正在運(yùn)行的 OS 中可能導(dǎo)致嚴(yán) 重錯誤。 5 3.1 創(chuàng)建 GRUB 引導(dǎo)的 CD-ROM GRUB 支持 El Torito 1非仿真模式。這也意味著你可以直
20、接從 cd-rom 中使用 GRUB 啟動,而不需要創(chuàng) 建啟動軟盤和硬盤鏡像(它們可能導(dǎo)致啟動失?。? CD-ROM 啟動 GRUB 使用一個稱作 cdboot.img 的鏡像。此鏡像被 core.img 包含 。core.img 鏡像也 必須包含 iso9660 和 biosdisk 模塊。CD-ROM 啟動也需要包含 grub.cfg 和 相關(guān) grub 模塊。 創(chuàng)建一個簡單通用的 GRUB 救援光盤,你需要使用 grub2-mkrescue 程序: # grub2-mkrescue -o grub.iso 你還需要在 iso 中包括其他的有用的文件。
21、只需要在 iso 文件夾內(nèi)放置你需要的文件即可。 # mkdir iso # mkdir -p iso/boot/grub 你也許需要在 boot/grub 文件 下包含 grub.cfg 用來提供啟動菜單。把其他所有你需要的文件復(fù)制到 iso 文 件 里面,你可以隨意創(chuàng)建目錄結(jié)構(gòu)。 最后使用命令: # grub2-mkrescue -o grub.iso iso 它會產(chǎn)生名為 grub.iso 的文件。它可以直接刻錄到 CD 或者 DVD 光碟內(nèi)。 根設(shè)備在進(jìn)入 grub.cfg 之前自動設(shè)置,你可以在 grub.cfg 腳本中直接
22、引用文件的路徑,不需要指定設(shè)備 名。自動設(shè)置 root 設(shè)備,可以工作在光驅(qū)和 USB 儲存設(shè)備。 實際 很多盜版系統(tǒng)光碟的啟動菜單就是使用 grub 的。 El Torito 是可引導(dǎo) CD 的技術(shù)標(biāo)準(zhǔn),它用于 BIOS。 3.2 映射 BIOS 設(shè)備和 OS 設(shè)備 grub2-mkdevicemap 程序用來創(chuàng)建設(shè)備映射文件。它通常由某些工具在沒有找到設(shè)備映射文件時自動 調(diào)用,例如 grub2-install。默認(rèn)設(shè)備映射文件在/boot/grub2/device.map 如果設(shè)備映射文件存在,GRUB 工具集讀取它并且映射 BIOS
23、 驅(qū)動器到 OS 設(shè)備。這個文件內(nèi)容如下: # this device map was generated by anaconda #DEVICE FILE (hd0) /dev/sda (hd0,3) /dev/sda3 DEVICE 是 grub 語法表示的磁盤設(shè)備,F(xiàn)ILE 是操作系統(tǒng)的設(shè)備文件。 映射文件的作用是:GRUB 在配置文件中使用的設(shè)備名指代的設(shè)備 (hd0) 是根據(jù) BIOS 的設(shè)備號得到的。 如果 BIOS 設(shè)置變化而發(fā)生變化。如果你在 BIOS 中交換了 IDE 和 SCSI 設(shè)備的啟動順序 GRUB 會得到
24、錯誤的設(shè)備號。 不幸的是此時 OS 設(shè)備名也不恒定。多啟動的情況下:不同的 Linux 內(nèi)核 可能使用不同的順序加載設(shè)備 驅(qū)動以及使用不同的設(shè)備名(/dev/hd* 和 /dev/sd* )。因此你可能需要頻繁的更新設(shè)備映射文件。 1 所有的啟動光盤都遵循 El Torito 這種格式,這是啟動光盤的國際標(biāo)準(zhǔn)。 6 GRUB 為了避免這個問題,在 grub.cfg 文件使用 UUID 或者文件系統(tǒng)卷標(biāo)來指定分區(qū)。我們建議你自 己手寫的 grub.cfg 也使用 UUID 或者卷標(biāo)。如果設(shè)備映射文件不存在,grub 工具集會設(shè)想一個臨時的 映
25、射文件。在單磁盤系統(tǒng)中它工作良好。 自動產(chǎn)生的設(shè)備映射文件也不總是合適的,某些情況下需要設(shè)備映射文件。如果 grub2-mkdevicemap 命令產(chǎn)生錯誤,你可以手動建立 映射文件。在映射文件中#開始的行被作為注釋。 3.3 BIOS 安裝 3.3.1 MBR 在 PC BIOS 平臺 ,使用的分區(qū)表格式通常稱作 MBR 格式(主引導(dǎo)記錄)。這個格式最多允許 4 個主 分區(qū),和若干邏輯分區(qū)。在這種格式下有兩種方法安裝 GRUB: 1. 嵌入到 MBR 和第一個分區(qū)中,這個可嵌入?yún)^(qū)域它有多個名字:MBR ,引導(dǎo)區(qū),嵌入?yún)^(qū)它至少 要
26、有 31KiB 的容量。 2. grub 核心鏡像可以被安裝到文件系統(tǒng)中,GRUB 啟動程序被寫入到第一個磁盤的第一個區(qū)塊中。 這兩個方法都有缺點(diǎn)。沒有辦法在盡量安全時在嵌入?yún)^(qū)域中保留空間。并且已知某些軟件會使用這個區(qū) 域保留版權(quán)信息。磁盤在分區(qū)的時也可能在第一個分區(qū)前面沒有保留足夠的空間。另一方面,安裝到文 件系統(tǒng)里意味著 GRUB 很脆弱。因為某些文件系統(tǒng)存在 tail paking 特性,會導(dǎo)致 GRUB 的區(qū)塊發(fā)生移 動,導(dǎo)致 MBR 內(nèi)的 GRUB 加載器無法找到 GRUB 核心鏡像。使用這種方法,最好是/boot 目錄和 BIOS 引導(dǎo)的設(shè)備是同
27、一個磁盤。GRUB 不用去猜測設(shè)備號。 GRUB 開發(fā)者建議在第一個分區(qū)前嵌入 GRUB。除非你有特殊需求。你必須保證第一個分區(qū)前存在至少 31KiB(63 區(qū)塊)的空間。在現(xiàn)代的磁盤中空間不再吃緊,因此最好分區(qū)時在第一個分區(qū)前保留 1MiB 的空間。 3.3.2 GPT 一些新的系統(tǒng)使用 GUID 分區(qū)表(GPT)格式。這是 EFI 的一個特殊部分,如果你的軟件支持,GPT 也可以在 BIOS 中使用。例如:GRUB 和 GNU/linux 可以用在這種情況。在 GPT 格式下可以為 GRUB 準(zhǔn)備單獨(dú)的分區(qū),被稱作 BIOS 引導(dǎo)分區(qū)。GRUB 可以
28、被嵌入到那個專用分區(qū)中,從而避免被其 他軟件意外覆蓋和文件系統(tǒng)導(dǎo)致的區(qū)塊移動。 在 GPT 創(chuàng)建引導(dǎo)分區(qū)時,你需要確認(rèn)分區(qū)至少有 31KiB。GPT 格式的磁盤通常不應(yīng)該有這么小容量 的分區(qū),所以我們建議你的引導(dǎo)分區(qū)容量大一點(diǎn),比如 1MiB,用來提供 GRUB 可能的擴(kuò)展。你必須確 定 boot 分區(qū)有合適的類型。使用 GNU parted 程序: # parted /dev/DISK set PARTITION-NUMBER bios_grub on 如果你使用 gdisk 程序,請將分區(qū)類型設(shè)置為:0xEF02 。 警告:對將要操作的分區(qū)要
29、多加小心!當(dāng) GRUB 在安裝時使用了 BIOS 引導(dǎo)分區(qū)時,它會自動格式化整 個引導(dǎo)分區(qū),并且把 GRUB 安裝進(jìn)去。請保證分區(qū)內(nèi)不包含其他數(shù)據(jù)。 7 4 引導(dǎo)過程 GRUB 可以用恰當(dāng)?shù)姆绞?加載 多重引導(dǎo) 1兼容內(nèi)核(Multiboot-compliant kernel)。但是對于某些特 殊 OS,你需要使用 特殊的方式。 4.1 OS 如何引導(dǎo) GRUB 有兩種引導(dǎo)方法。第一個是直接加載 OS。另一個使用鏈?zhǔn)郊虞d(chain-load ),它可以加載其 他的引導(dǎo)加載器。通常而言,GRUB 有足夠的能力從任何一塊磁盤的任意分
30、區(qū) 加載 OS。但對于某些 操作系統(tǒng)必須使用 OS 自身的加載器(最常見的是 windows xp)。 4.1.1 如何直接引導(dǎo) OS 多重引導(dǎo)是 GRUB 天生的功能。它支持:Linux FreeBSD NetBSD OpenBSD。如果你希望加載其他 操作系統(tǒng)你需要使用鏈?zhǔn)郊虞d。 對于 DOS 和 Windows 有一些特殊緣故,你需要特殊方法才能成功引導(dǎo),這種情況稱作系統(tǒng)特異性 2。 參見下文。 4.1.2 鏈?zhǔn)郊虞d OS OS 不支持多重啟動,或者 GRUB 不能直接引導(dǎo)它時,你就需要使用 chain-load 鏈?zhǔn)郊虞d。它用
31、來調(diào)用 OS 自帶的加載器。 chainloader 命令用來運(yùn)行鏈?zhǔn)郊虞d。它通常需要某些 GRUB 模塊,并且正確設(shè)置根設(shè)備(root)。你 可以把這些指令放到一個菜單項里面。 menuentry "Windows" { insmod chain insmod ntfs set root=(hd0,1) chainloader +1 } 如果你有多個硬盤,你可能需要使用更多的命令設(shè)置更多東西。 鏈?zhǔn)郊虞d只支持 PC BIOS 系統(tǒng)和 EFI 平臺。 1 2 8 多重引導(dǎo),也稱作多啟動。 系統(tǒng)特異性,不同的操作系統(tǒng)
32、使用不同的引導(dǎo)方法,稱作系統(tǒng)特異性。 4.2 特異性加載可能出現(xiàn)的問題 4.2.1 GNU/Hurd GNU/Hurd 是多重引導(dǎo)兼容的,因此很容易加載它。但是別忘了在引導(dǎo)之前需要正確設(shè)置根設(shè)備為內(nèi)核 所在分區(qū)。 1. 設(shè)置 GRUB 根設(shè)備到 GNU/Hurd 的某個分區(qū)。search --file --set /boot/gnumach.gz 命令很有 用。它會自動搜索 /boot/gnumach.gz 文件,并把存在此文件的分區(qū)設(shè)置為根設(shè)備。 2. 加載內(nèi)核和內(nèi)核模塊: grub> multiboot /boot/gn
33、umach.gz root=device:hd0s1 grub> module /hurd/ext2fs.static ext2fs --readonly \ --multiboot-command-line=${kernel-command-line} \ --host-priv-port=${host-port} \ --device-master-port=${device-port} \ --exec-server-task=${exec-task} -T typed ${root} \ $(task-create) $(task-resume) grub>
34、 module /lib/ld.so.1 exec /hurd/exec $(exec-task=task-create) 3. 執(zhí)行 boot 指令 4.2.2 GNU/Linux 用 GRUB 引導(dǎo) linux 相對比較容易。因為它也是多重引導(dǎo)兼容的 OS。 1. 設(shè)置根設(shè)備到包含 Linux 內(nèi)核的分區(qū)。search --file --set /boot/vmlinuz 對你有用。 2. 使用 linux 命令加載內(nèi)核: grub> linux /vmlinuz root=/dev/sda1 linux 命令用來加載 linu
35、x 內(nèi)核,并且設(shè)置根分區(qū) 1。/vmlinuz 用來在根設(shè)備中指定文件。 如果你希望添加內(nèi)核參數(shù)直接把參數(shù)寫到命令后面: grub> linux /vmlinuz root=/dev/sda1 acpi=off 得到所有可用的內(nèi)核參數(shù),你需要查看內(nèi)核源代碼樹。 3. 如果你使用 initrd 2還需要執(zhí)行 initrd 命令。 grub> initrd /initrd 如果你使用 linux16,你需要使用 initrd16 命令 grub> initrd16 /initrd 4. 最后運(yùn)行 boot 命令。 警告:如果你使用 initrd
36、 指令,并且使用了 mem=內(nèi)核參數(shù)設(shè)置了小于實際的內(nèi)存容量。你需要在 GRUB 中設(shè)置相同的數(shù)值。在載入 linux 內(nèi)核前,使用 uppermem 命令指定內(nèi)存容量。 1 2 根分區(qū)和根設(shè)備不是一個含義,根分區(qū)是指文件系統(tǒng)根目錄所在的分區(qū)。根設(shè)備是指 GRUB 加載 OS 內(nèi)核 時。一個名為 root 的選項值,它指向內(nèi)核所在分區(qū)的設(shè)備名。set root=(hd0,1) Linux 初始 RAM 磁盤(initrd)是在系統(tǒng)引導(dǎo)過程中掛載的一個臨時根文件系統(tǒng),用來支持兩階段 的引導(dǎo)過程。initrd 文件中包含了各種可執(zhí)行程序和驅(qū)動程序,它們可以用來掛載實
37、際的根文件系統(tǒng),然 后再將這個 initrd RAM 磁盤卸載,并釋放內(nèi)存。在很多嵌入式 Linux 系統(tǒng)中,initrd 就是最終的根文 件系統(tǒng)。 9 4.2.3 DOS/Windows GRUB 不能直接引導(dǎo) DOS 和 WINDOWS。你必須使用 chainloader 命令。這是由于 DOS 和 Win- dows 內(nèi)置加載器有嚴(yán)重缺陷。導(dǎo)致這些 OS 不能從非第一塊硬盤里啟動。如果你把 DOS 或者 WIN 安 裝到非第一塊硬盤,你需要使用磁盤交換技術(shù)。drivemap 命令。 drivemap -s (hd0) (hd1)
38、 這個命令對你的第一和第二塊硬盤執(zhí)行了虛擬交換。 警告:虛擬交換只在 OS 使用 BIOS 訪問磁盤時有效。如果它們使用自己的驅(qū)動程序訪問磁盤則虛擬交 換不影響 OS。 如果你安裝了很多 DOS/win 到同一個磁盤里也可能發(fā)生問題。因為如果磁盤里有多個主分區(qū),它們可能 會混淆。你應(yīng)該避免安裝多份 DOS/win 到同一個磁盤里。如果你確實遇到這種情況 GRUB 也提供了解 決辦法。使用分區(qū)隱藏技術(shù)。 GRUB 隱藏一個 DOS/win 分區(qū)時,DOS/win 會忽略哪個分區(qū)。當(dāng) GRUB 取消隱藏 某個 DOS/win 分 區(qū)時,DOS/win OS 會識
39、別哪個分區(qū)。假設(shè)你安裝了 win 在第一個硬盤的第一個分區(qū)和第二個分區(qū)你希 望加載第 1 個分區(qū)內(nèi)的 OS,執(zhí)行如下命令: parttool (hd0,1) hidden- parttool (hd0,2) hidden+ set root=(hd0,1) chainloader +1 parttool ${root} boot+ boot 5 編寫配置文件 5.1 簡單的配置文件 grub2-mkconfig 用來產(chǎn)生 grub.cfg 文件。它可以用來升級你的配置文件,它可以自動檢測可用的內(nèi)核, 并且產(chǎn)生對應(yīng)的菜單項。
40、 grub2-mkconfig 有一些限制。當(dāng)你希望在菜單項列表后面添加新的項目時你應(yīng)該修改/etc/grub.d/ 40_custom 文件,或者創(chuàng)建 /boot/grub2/custom.cfg 文件。修改菜單項的順序,需要修改/etc/grub.d/內(nèi) 的文件的前綴的數(shù)字。與/etc/init.d 下面的腳本類似。數(shù)字決定運(yùn)行的順序,數(shù)字小的出現(xiàn)在前面。 [root@localhost] 0 /etc/grub.d # ll 總用量 48 -rwxr-xr-x. 1 root root 6709 5 月 7 21:50 00_header -rwxr-
41、xr-x. 1 root root 5959 5 月 7 21:50 10_linux -rwxr-xr-x. 1 root root 5875 5 月 7 21:50 20_linux_xen -rwxr-xr-x. 1 root root 5963 5 月 7 21:50 30_os-prober -rwxr-xr-x. 1 root root 214 5 月 7 21:50 40_custom -rwxr-xr-x. 1 root root 95 5 月 7 21:50 41_custom -rwxr-xr-x. 1 root root
42、 1259 5 月 7 21:50 90_persistent -rw-r--r--. 1 root root 483 5 月 7 21:50 README /etc/grub.d/下面的文件都是 shell 腳本。使用腳本機(jī)制是為了普通用戶能夠簡單的管理菜單項。如果你能 夠自己寫 grub.cfg 那么你可以不使用 grub2-mkconfig. 10 文件 /etc/default/grub 控制 grub2-mkconfig 的行為。它也是 shell 腳本,所以應(yīng)該使用 POSIX shell 語法。通常,文件內(nèi)只是定義了一系列的 she
43、ll 變量: [root@localhost] 0 /etc/grub.d # cat /etc/default/grub GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="Fedora" GRUB_DEFAULT=saved GRUB_CMDLINE_LINUX="rd.md=0 rd.lvm=0 rd.dm=0 KEYTABLE=us quiet rhgb LANG=zh_CN.UTF-8 rd.luks=0" 可用的變量為: GRUB_DEFAULT 默認(rèn)菜單項的編號或者標(biāo)題。編號從 0 開始。變量值為 saved 有特殊含
44、義。當(dāng)菜單啟動時,光標(biāo)會定位 到變量所指定的菜單項中。當(dāng)輸入等待超時時,自動進(jìn)入所指定的菜單項。 實例: 假設(shè)你有一個菜單項: menuentry Example GNU/Linux distribution --class gnu-linux { ... } 使用這個命令設(shè)置為默認(rèn): GRUB_DEFAULT=Example GNU/Linux distribution GRUB_DEFAULT 值為 saved,那么默認(rèn)菜單項為 GRUB_SAVEDEFAULT 和 grub2-set-default 或者 grub2-reboot。
45、 默認(rèn)值為 0 可用的變量: GRUB_SAVEDEFAULT 如果此選項值為"true" ,且 GRUB_DEFAULT ="saved"時,那么手動進(jìn)入一個菜單項后自動把它設(shè)置為下 一次啟動時的默認(rèn)菜單項。 GRUB_DEFAULT ="saved"命令不一定必須 GRUB_SAVEDEFAULT="true" 。也可以和 grub2-set- default 或者 grub2-reboot 命令連用。 GRUB_TIMEOUT 值為一個數(shù)值,表示時間秒。顯示菜單后,等待鍵盤輸入。如果指定時間內(nèi)沒有鍵盤操作,那么自動加載 GRUB_DEFAU
46、LT 變量所指定的菜單項。默認(rèn)是 5 。 如果值為 0 那么直接加載默認(rèn)菜單項而不顯示菜單。 如果為-1 那么 永遠(yuǎn)等待輸入,不自動加載。 GRUB_HIDDEN_TIMEOUT 值為一個數(shù)值,表示時間秒。在顯示菜單之前等待鍵盤輸入,如果指定時間內(nèi)沒有鍵盤操作,那么自動加載 GRUB_DEFAULT 變量所指定的菜單項。無默認(rèn)值。 GRUB_HIDDEN_TIMEOUT_QUIET 與 GRUB_HIDDEN_TIMEOUT 連用。如果設(shè)置為"true" 那么不顯示倒計時。無默認(rèn)值。 `GRUB_DEFAULT_BUTTON `GRUB_TIMEOUT_
47、BUTTON `GRUB_HIDDEN_TIMEOUT_BUTTON `GRUB_BUTTON_CMOS_ADDRESS 11 與沒有_BUTTON 后綴的變量對應(yīng),用來支持電源鍵。 `GRUB_DISTRIBUTOR 由 GRUB 的發(fā)布者設(shè)置,用來鑒別 GRUB。 `GRUB_TERMINAL_INPUT 選擇終端輸入設(shè)備。變量值可以是用空格隔開的多個設(shè)備名。可用的名稱依賴與你的硬件平臺。可用名包括 console (PC BIOS 和 EFI 控制臺),serial (串行終端),ofconsole (open firmware 控制臺
48、),at_keyboard ( PC AT 鍵盤,對 Coreboot 1 也有用),usb_keyboard (使用 HID 啟動協(xié)議的 USB 鍵盤)。默認(rèn)值是當(dāng)前平 臺 的終端輸入設(shè)備。 `GRUB_TERMINAL_OUTPUT 選擇輸出終端。變量值可以是用空格隔開的多個設(shè)備名??捎妹ǎ篶onsole (PC BIOS 和 EFI 控制臺), serial (串行終端),gfxterm (圖形模式輸出),ofconsole (open firmware 控制臺),ga_text (VGA 文本模式 輸出,對 Coreboot 有用)。默認(rèn)值是當(dāng)前平
49、臺 的終端輸出設(shè)備。 GRUB_TERMINAL 如果設(shè)置了這個選項,會把`GRUB_TERMINAL_INPUT 和`GRUB_TERMINAL_OUTPUT 設(shè)置為相同 值。 `GRUB_SERIAL_COMMAND 這個命令配置串行終端的端口。 `GRUB_CMDLINE_LINUX 對于 linux 內(nèi)核添加的命令行參數(shù)。 `GRUB_CMDLINE_LINUX_DEFAULT 除非 GRUB_DISABLE_RECOVERY 設(shè)置為 true,否則為每個 linux 內(nèi)核產(chǎn)生兩個菜單項,一個是普通模 式,一個是救援模式。在
50、普通模式下 linux 內(nèi)核參數(shù)會跟 `GRUB_CMDLINE_LINUX 的值后再跟 GRUB_CMDLINE_LINUX_DEFAULT 的值。 `GRUB_CMDLINE_NETBSD `GRUB_CMDLINE_NETBSD_DEFAULT 類似與 GRUB_CMDLINE_LINUX GRUB_CMDLINE_LINUX_DEFAULT,只不過用于 NetBSD. `GRUB_CMDLINE_XEN `GRUB_CMDLINE_XEN_DEFAULT 類似與 GRUB_CMDLINE_LINUX GRUB_CMDLINE_LINUX_DEFA
51、ULT,只不過用于 linux 和 xen。 `GRUB_DISABLE_LINUX_UUID 通常 grub2-mkconfig 使用 root=UUID=XXX 內(nèi)核參數(shù),用 UUID 表示根文件系統(tǒng)。如果你希望關(guān)閉它設(shè) 置這個選項值為"true" `GRUB_DISABLE_RECOVERY 如果此選項值為 "true",那么不自動產(chǎn)生救援模式菜單。 `GRUB_VIDEO_BACKEND 如果圖形卡支持,并且正在使用 gfxterm 圖形終端,或者設(shè)置了 GRUB_GFXPAYLOAD_LINUX 變量。 納克 grub2-mkconfig
52、會加載所有可用的 GREB 圖形驅(qū)動,然后使用最合適的那個。如果你希望改變這個行 1Coreboot 是一個以 Linux 為基礎(chǔ)的開源韌體,它的開發(fā)目的在于取代目前市售計算機(jī) 都會看到的 BIOS,而 且它可以只在開機(jī)時運(yùn)行特定的程序,從而節(jié)省系統(tǒng)資源。 12 為,你可以設(shè)置這個變量。在 grub2-install 執(zhí)行后,可用的圖形驅(qū)動名被放置到 /boot/grub2/video.ist `GRUB_GFXMODE 設(shè)置 gfxterm 圖形終端的分辨率。如果你的圖形卡支持 VBE(VESA BIOS Extensions)你可以使用這個
53、模 式。本地 LCD 面板分辨率可能無效。默認(rèn)是 640x480 `GRUB_BACKGROUND 設(shè)置 gfxterm 的背景圖片。它的值必須是在 GRUB 啟動時就能夠讀取到的文件。類型可以是.png .tga .jpg .jpeg.(需要載入對應(yīng)的 png jpg tga 模塊)圖像會被縮放到匹配屏幕分辨率。 `GRUB_THEME 設(shè)置 gfxterm 圖形終端的主題文件。 `GRUB_GFXPAYLOAD_LINUX 1. 設(shè)置為"text",強(qiáng)制 linux 內(nèi)核以文本模式啟動; 2. "keep" 保持圖形模式,使用 GRUB_GF
54、XMODE , WIDTHxHEIGHT[xDEPTH] 的設(shè)置孤行模式相關(guān)參 數(shù); 3. 設(shè)置為逗號或者分號分割的列表,用來選擇圖形模式。 根據(jù)你的內(nèi)核、發(fā)行版、你的顯卡還有概率性問題,使用這個選項可能導(dǎo)致 linux 產(chǎn)生很多顯示問題,特別 是在引導(dǎo)早期。如果你啟動出了問題,請設(shè)置為 text。 `GRUB_DISABLE_OS_PROBER 通常 grub2-mkconfig 會使用外部程序 os-prober 。這個程序會發(fā)現(xiàn)電腦 安裝的其他系統(tǒng)。并且產(chǎn)生合適 的菜單項。設(shè)置此選項值為 "true"可以關(guān)閉這個選項。 `GRUB_INIT_TU
55、NE 在 GRUB 啟動時同步的在揚(yáng)聲器 播放聲音。這對于沒有顯示器的人有用。選項的值被直接傳遞到 play 命 令。 `GRUB_BADRAM 如果開啟了這個選項,GRUB 會使用 badram 命令過濾掉錯誤的內(nèi)存區(qū)域。 `GRUB_PRELOAD_MODULES 選項值為用空格分割的一系列 GRUB 模塊名。這些模塊會在 grub.cfg 加載之前加載。 你可以從 grub2-mkconfig 的輸出中看到更多信息。你可以修改 /etc/grub.d 目錄下的腳本, /etc/grub.d/40_custom 通常用來添加某些菜單項。你可
56、以把改動寫到/etc/grub.d 下的任意的腳本里,通 常使用 40_custom 來添加某些菜單項,請不要修改這個文件內(nèi)的頭兩行。 5.2 完整的配置文件 grub.cfg 的文件內(nèi)容使用 grub 內(nèi)置的腳本語言。它的語法類似與 bash 。 單詞 words word 定義為一個連續(xù)的字符集合。一行字符串被元字符分割成若干 word。元字符是在腳本中有特殊含 義的符號。元字符包括 空格、tab、換行 還有: { } | & $ ; < > 雙引號和單引號擴(kuò)住的字符串可以包含元字符。 保留字 13 保留字是在
57、GRUB 中有特殊含義的 word1。以下 word 被識別為保留字: ! [[ ]] { } case do done elif else esac fi for function if in menuentry select then time until while 并不是所有保留字目前都有作用,它們中的某些為未來的擴(kuò)展而保留。 引號 引號用來移除元字符 和保留字 的特殊含義,把它們變成普通字符。 有 3 種引用機(jī)制:轉(zhuǎn)義序列,單引號 ,雙引號 未被引號擴(kuò)住的反斜線 \ 是轉(zhuǎn)義序列,它讓下一個字符成為普通字符而不是元字符。它后面也可以直
58、接 是換行字符。 單引號字符串,保持在引號內(nèi)的所有字符都是普通字符,而不是元字符。字符串中出現(xiàn)單引號需要被轉(zhuǎn) 義。除了單引號和反斜線自身,單引號字符串內(nèi)不接受其他的轉(zhuǎn)義序列。 雙引號字符串,在字符串內(nèi)可以使用\ 轉(zhuǎn)義序列,可以使用$ 變量擴(kuò)展。如果需要 $ \ "以普通字符出現(xiàn), 需要將她們轉(zhuǎn)義。反斜線緊接著換行,會當(dāng)作續(xù)行符,它在進(jìn)行語法解析前會從輸入流中刪除。例如: line="OK\ _line2" 會產(chǎn)生字符串 "OK_line2" ,續(xù)行符只是讓腳本格式更好。 變量擴(kuò)展 美元符號 $ 用來做變量擴(kuò)展。變量名可以被擴(kuò)在花括號內(nèi),也
59、可以省略。 var="_med_" pre="P" suf="S" echo "$P${var}IL$suf" 輸出 P_med_ILS,如果你不使用花括號${var}IL,而是使用$varIL,那么系統(tǒng)會擴(kuò)展搜索名為 varIL 的變量, 由于這個變量不存在因此會被擴(kuò)展為空。 位置變量代指名為數(shù)字的變量。它們用來代指函數(shù)輸入?yún)?shù)。例如:$1 代表函數(shù)第一個參數(shù),$2 代表第 二個參數(shù),等等。。。 $? 用來代指 一個命令的退出狀態(tài)。 $@ 代指所有的位置變量,擴(kuò)展成這樣:"$1" "$2" "$3" ... ... $* 代
60、指所有的位置變量,擴(kuò)展成這樣:$1 $2 $3 ... ... $# 代指有效的位置變量的總數(shù)。 注釋 以 #開始的 word 到行尾都被當(dāng)作是注釋,直接被忽略。#出現(xiàn)在字符串里或者被轉(zhuǎn)義時除外。 簡單命令 1word 被識別為保留字,前提是這個 word 沒有被引號擴(kuò)住,且出現(xiàn)在腳本語法可以出現(xiàn)保留字的地方 比如命令的第一個 word,for 語句的第 3 個 word。 14 一個簡單命令是指一個 word 序列。其中第一個 word 被當(dāng)作命令名,剩下的 word 被當(dāng)作這個命令的參 數(shù)。分號可以用來在同一行內(nèi)分割多個
61、命令。 命令返回值是命令的退出狀態(tài)。如果保留字 ! 出現(xiàn)在命令前,那么對退出狀態(tài)進(jìn)行邏輯否運(yùn)算。 復(fù)雜命令 復(fù)雜命令是包括選擇 循環(huán)在內(nèi)的流程控制命令,以及函數(shù)和菜單命令。 for NAME in WORD ...; do LIST; done NAME 是任意變量名。WORD 是單詞的列表。循環(huán)會在列表中迭代,每次循環(huán) NAME 的值為列表中的某 一元素。for 語句的退出狀態(tài)為最后一個執(zhí)行的命令的退出狀態(tài)。如果 WORD 列表為空,那么循環(huán)一次也 不執(zhí)行,退出狀態(tài)為 0. if if_LIST; then then_LIST; [elif e
62、lif_LIST; then el_then_LIST;] ... [else LIST;] fi if_LIST 被作為命令來執(zhí)行,如果命令退出狀態(tài)為 0(退出狀態(tài)為 0 表示成功,不為 0 表示失敗) 。那么執(zhí)行 then_LIST 命令,并且跳過其他的 elif 和 else 。否則判斷 elif_LIST 條件是否成立如果成立就執(zhí)行 el_then_LIST,并且跳過其他的 elif 和 else .依次類推如果所有的 elif 條件都不成立那么執(zhí)行 else LIST。 while COND; do LIST; done until COND; do LIS
63、T; done while 命令,當(dāng) COND 命令退出狀態(tài)為 0 時,反復(fù)執(zhí)行 LIST,直到 COND 退出狀態(tài)不為 0。 until 命令,當(dāng) COND 命令退出狀態(tài)不為 0 時,反復(fù)執(zhí)行 LIST,直到 COND 退出狀態(tài)為 0。 function NAME { COMMAND; ... } 定義名為 NAME 的函數(shù)?;ɡㄌ杻?nèi)為一系列命令。函數(shù)定義命令不影響$? 。函數(shù)定義之后,函數(shù)名就是一 個可用的命令名。退出狀態(tài)為最后一條命令的退出狀態(tài)。 menuentry TITLE [`--class=class ...] [`--users=users
64、] [`--hotkey=key] { COMMAND; ... } 用來建立菜單項,參見 menuentry 。 內(nèi)建命令 內(nèi)建命令用來控制腳本流程。 break [n] 從 for while until 循環(huán)中退出。n 代表退出層級。n 必須 >=1 。如果 n 大于循環(huán)嵌套層數(shù)那么退出所有循環(huán)。 break 的退出狀態(tài)為 0,如果 n 小于 1 那么退出狀態(tài)非 0. continue [n] 立刻開始下一輪 for while until 循環(huán),continue n 代表跳轉(zhuǎn)到向外第 n 層循環(huán)。n 必須>=1 。如果 n 大于循
65、 環(huán)嵌套層數(shù)。那么重新開始最外層循環(huán)。continue 退出狀態(tài)為 0,n 小于 1 時退出狀態(tài)非 0. return [n] 用在函數(shù)體內(nèi),導(dǎo)致函數(shù)退出狀態(tài)值為 n。如果 n 省略,那么退出狀態(tài)為函數(shù)體內(nèi)最后一條函數(shù)的退出狀態(tài)。 如果 return 用在非函數(shù)體中,退出狀態(tài)非 0 。 shift [n] n 為一非負(fù)整數(shù)。對于位置變量 $1 $2 ... $n $n+1 ... $n+z 。執(zhí)行 shift n 后,向左移動 n 位。導(dǎo)致$n+1 移 動到$1 ,$n+2 => $2 ... $n+z => $z . n 默認(rèn)值為 1. 如果 n 為 0
66、,那么不產(chǎn)生任何變化。如果 n > $# ($# 是 有效的位置變量總數(shù)),也不會造成任何變化。如果 n > $# 或者 n<0 那么位置退出狀態(tài)非 0 ,否則退出狀 15 態(tài)為 0 。 5.3 嵌入配置文件到 GRUB GRUB 可以把配置文件嵌入到核心鏡像中。這樣做可以在 normal 模式之前加載配置文件。這個功能對 以下情況有用:1 無法直接找到外部配置文件;2 在加載配置文件時 debug。grub2-install 在不使用 BIOS 訪問磁盤或者在 GRUB 被安裝到不包含/boot/grub 的硬盤中時自動使用嵌入配置文件的功能。在 這種情況下你可能需要 search 命令來自動設(shè)置根設(shè)備到正確的磁盤。 grub2-mkimage 使用 -c 選項生成嵌入了配置文件的鏡像。嵌入配置文件后,外部的配置文件就可以移 動或者刪除了。 在執(zhí)行了內(nèi)嵌的配置文件后,GRUB 加載
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新人教版小學(xué)數(shù)學(xué)二年級下冊《總復(fù)習(xí)圖形的運(yùn)動》ppt課件
- 鉆石小鳥電子商務(wù)案例分析x
- 貴州專版201x中考語文復(fù)習(xí)第二輪古詩文閱讀專題十文言文閱讀專項訓(xùn)練二課外古詩詞賞析課件
- 計算機(jī)發(fā)展簡史
- 五年級最小公倍數(shù)
- 分?jǐn)?shù)除法應(yīng)用題(一)1
- 人教版小學(xué)科學(xué)三年級《空氣占據(jù)空間嗎》
- 腹腔鏡脾切除技巧探討
- 水下溷凝土的灌注
- 主題班會關(guān)注小環(huán)境共享大健康
- 章引言數(shù)字圖像處理
- 學(xué)情通報會二課件
- 醫(yī)療企業(yè)組織氣氛建設(shè)方案分析
- 數(shù)據(jù)中心供配電系統(tǒng)概述
- 小學(xué)三年級口算題卡課件