安裝伺服器與 kickstart 大量部署用戶端電腦
上一章我們將區域網路內的線路處理妥當並且將伺服器設定成可分享區域網路對 Internet 的連線後,再來當然就是要管理內部的用戶端電腦的設定了。 用還原卡管理用戶端電腦是很簡易的方式,不過確有很多教學方面的問題等待克服。如果不用還原卡, 要怎麼處理用戶端的電腦內作業系統的安裝與還原呢?用原版光碟嗎?
以正常的 DVD 光碟片安裝一兩台 Linux 系統似乎是沒啥大問題,但如果有好幾間電腦教室,裡頭有幾十部總共數百部的主機要你裝 Linux 系統的話,那使用 DVD 光碟來裝也太花時間了吧?此時,選擇透過網路來進行安裝就是一項可以思考的方向!同時,如果以鳥哥上班的單位為例,電腦教室的 PC 需要有多重作業系統的環境下,如何準備一個可以裸機安裝的功能, 就是一個相當重要的任務了!這篇文章就在討論如何從網路進行這些動作囉!
一般來說,不論是哪種作業系統,只要是使用 DVD 釋出作業系統軟體的,通常安裝的程序是這樣的:
程序是很簡單,不過,如果用戶端的數量一多起來,上述的第四、五步驟通常會佔用相當大的人力!因為安裝程式需要與使用者互動啊!此外,如果用戶端的數量很大! 那麼我們如果想要同時進行以減少等待的時間時,就得要燒錄多片 DVD,雖然不貴,不過很覺得浪費~另外,現在的網路速度要比 DVD 速度快的多 (Gigabit 網卡至少可以到達 100Mbytes/s 的速度,16X DVD 只能到達大約 25Mbytes/s 以下), 如果將 DVD 的資料複製到網路上,透過網路來安裝,不是更快嗎?是的!沒錯~但是,這時候就需要 PXE 的協助了!
對於現在的主機硬體系統來說,不論你想在上頭幹嘛,首先你總是得要透過開機管理程式 (boot loader) 載入系統核心 (kernel) 之後,才能夠順利的開始運作系統。 同理,使用 DVD 原版光碟安裝時,BIOS 選擇光碟機開機,光碟片裡面就得要含有開機管理程式與簡易的核心,開始驅動整個系統硬體後,才能夠進入下一步安裝軟體的控制中。
現在,我們想要透過網路開機來進入本機系統,等開機之後,接下來愛幹嘛就幹嘛,當然也就包括進行網路安裝的行為啊!那跟上面講的就一樣了,既然我是想要透過網路開機, 那麼必要的 (1)開機管理程式與 (2)作業系統核心就得要放在網路上給用戶端的主機系統下載使用才行。 問題來了,既然我的主機系統還沒有安裝任何作業系統,那怎麼 (1)取得網路 (2)下載開機管理程式與核心呢?這時就得要透過 Intel 發佈的 PXE 機制了。
所謂的 PXE 是『 Preboot Execution Environment 』的縮寫,字面上的意思是:『開機前的執行環境』之意。根據 Intel 所發佈的文件來看 (註1),要達成這個 PXE 必須要有兩個環節,(1)一個是用戶端的網路卡必須要支援 PXE 用戶端功能,並且開機時選擇網路卡開機,這樣系統才會以網路卡進入 PXE 用戶端的程序;(2)一個是 PXE 伺服器必須要提供至少含有 DHCP 以及 TFTP 的服務才行!且其中:
上述兩個服務僅能讓 PXE 用戶端開機而已,開機的定義只是讓硬體開始執行罷了!我們都知道,開機完成後還得要提供各式各樣的軟體之後,才能夠順利的載入可讓一般用戶操作的基本作業系統。 因此,通常 PXE server 還必須要能夠提供用戶端所需程式與軟體資料的來源才行!所以,通常還得要加上 NFS/FTP/HTTP (通常是選擇一樣即可) 等資料提供的通訊協定後, 才算是比較完整的 PXE 伺服器囉。
在本章末了的參考文獻中,PXE 已經講得非常詳細!我們這裡僅簡單的使用底下的圖示來解釋一下 PXE 的整體運作流程:
從上圖中我們再次的歸納幾個重點:
那什麼時候需要有安裝光碟內的軟體支援安裝呢?那就得要外帶核心參數才行囉!也就是說,我們至少得要設定底下這幾個服務才行: (1)TFTP (2)DHCP (3)NFS/HTTP/FTP! 其中 TFTP 與 DHCP 為必須,則安裝的軟體來源則是可選擇的!底下我們就一項一項服務來設定吧!
從圖 1.1-1 的資料上面,可以發現 DHCP 主要僅是提供用戶端網路參數與 TFTP 的位址,以及 boot loader 的檔名而已。 同時,我們僅針對內網來告知 TFTP 的相關位置,所以,我們可以編輯 /etc/dhcp/dhcpd.conf 在 subnet 的區塊內加入兩個參數即可。
首先,由於我們這個區網還不算太大,所以,鳥哥是將 DHCP 與 TFTP 綁在同一個主機上頭,因此 DHCP 與 TFTP 的 IP 都是延續前一章的 192.168.42.254 這一個。那 boot loader 呢? 在 CentOS 裡面有提供一個檔名為『 pxelinux.0 』的專門給 PXE client 下載的 PXE boot loader!這個檔案我們即將放置於 TFTP 的根目錄下,所以,DHCP 的簡單設定就變成如下模樣:
[root@centos ~]# vim /etc/dhcp/dhcpd.conf ddns-update-style none; default-lease-time 259200; max-lease-time 518400; option routers 192.168.42.254; option broadcast-address 192.168.42.255; option domain-name-servers 192.168.42.254; subnet 192.168.42.0 netmask 255.255.255.0 { range 192.168.42.101 192.168.42.200; option subnet-mask 255.255.255.0; option domain-name "i4502.dic.ksu"; <==上面的資料是前一章的內容! next-server 192.168.42.254; <==就是 TFTP 的位址所在處 filename "pxelinux.0"; <==告知得從 TFTP 根目錄下載的 boot loader 檔名 ....(中間省略).... } <==別忘記最後的這玩意! [root@centos ~]# /etc/init.d/dhcpd restart |
再重新啟動過 DHCP 之後,這樣針對這個內網的 TFTP 設定就生效了。不過,請特別留意喔!如果你沒有繼續接著底下的 TFTP 來設定的話,那麼未來你的用戶端如果設定網路卡開機, 就會發現到如下的錯誤訊息~雖然這個錯誤訊息並不會影響到用戶端的操作,反正過了逾時等待時間後,系統就會自動的進入下一個開機裝置來開機。但是,有這個錯誤訊息就很討厭就是了。
從上面的訊息你可以發現,用戶端這個 PXE 已經抓到 DHCP 提供的網路參數,取得的 IP 為 192.168.42.158,但是當他連線到 TFTP 想去下載 pxelinux.0 時, 卻抓不到程式!所以就造成等待逾時。雖然沒什麼,不過多一段等待時間就很討厭~因此,繼續接著底下的 TFTP 來設定吧!
從圖 1.1-1 的流程當中,我們知道開機過程所需要的開機管理程式與核心相關開機檔案,主要都是透過 TFTP 這個服務來給予的! 這個服務在 CentOS 上面已經有相關的軟體主動提供了!設定很簡單。但是,那個開機管理程式與核心檔案在哪裡啊?呵呵!底下我們就分別來說一說各別的設定囉!
TFTP 的安裝很簡單~直接使用 yum 來處理即可。不過,如同 FTP 服務一樣,你總是得要告訴用戶端,我的 TFTP 資料的『根目錄』在哪裡才行! 這樣接下來才有辦法取得完整的絕對路徑相關資料啊。另外要注意,TFTP 其實是由 xinetd 這個 super daemon 所管理的,因此設定好 TFTP 之後, 你要啟動的是 xinetd 才對喔!
另外,預設的 TFTP 服務的根目錄是放在 /var/lib/tftpboot/ 底下,由於未來我們的安裝伺服器有很多資料都會放置在這個檔案系統中,為了統一管理, 所以鳥哥習慣上都會將所有需要的資料統一放置於某個目錄中!那未來如果有需要加速檔案系統或者擴大檔案系統時,就比較方便處理~在本章的案例中, 鳥哥是將所有的資料統一放置於 /install/ 目錄下的!那這個 TFTP 的根目錄我們就將他放置於 /install/tftpboot 底下囉!
# 先安裝所需要的 TFTP 伺服器軟體: [root@centos ~]# yum install tftp-server tftp # 事實上,只要安裝 tftp-server 即可。不過這裡鳥哥連用戶端的 tftp 也一口氣裝好算了。 # 開始設定 TFTP 的設定檔~主要是 TFTP 的根目錄所在啦! [root@centos ~]# vim /etc/xinetd.d/tftp service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /install/tftpboot <== 重點在這裡!改成這樣即可 disable = yes per_source = 11 cps = 100 2 flags = IPv4 } [root@centos ~]# mkdir -p /install/tftpboot [root@centos ~]# chcon --reference /var/lib/tftpboot /install/tftpboot [root@centos ~]# chcon --reference /var /install [root@centos ~]# ll -dZ /install/tftpboot drwxr-xr-x. root root system_u:object_r:tftpdir_rw_t:s0 /install/tftpboot/ # 如果你沒有關掉 SELinux 的話,那這裡就得要這樣做才行!注意上面特殊字體部分! # 啟動 TFTP 並觀察之: [root@centos ~]# /etc/init.d/xinetd restart [root@centos ~]# chkconfig xinetd on [root@centos ~]# chkconfig tftp on [root@centos ~]# netstat -tulnp | grep xinetd Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name udp 0 0 0.0.0.0:69 0.0.0.0:* 2238/xinetd # 你要注意的是埠口 69 以及 xinetd 這個啟動的服務名稱才對! |
接下來你得要知道的是,所有透過 TFTP 提供的資料,在本章的案例中,都必須要放置於 /install/tftpboot/ 目錄下才行喔!不要放錯地方了!要注意!要注意!
如果要使用 PXE 的開機管理程式與開機選單的話,那就得要安裝 CentOS 內建提供的 syslinux 軟體,從裡面撈出兩個檔案即可。當然啦,這兩個檔案得要放置在 TFTP 的根目錄下才好! 整個實作的過程如下:
[root@centos ~]# yum install syslinux <==底下的檔案是由這軟體所提供! [root@centos ~]# cp /usr/share/syslinux/menu.c32 /usr/share/syslinux/vesamenu.c32 \ > /usr/share/syslinux/pxelinux.0 /install/tftpboot/ [root@centos ~]# mkdir /install/tftpboot/pxelinux.cfg [root@centos ~]# ll /install/tftpboot/ -rw-r--r--. 1 root root 60928 2013-04-02 18:10 menu.c32 <==提供類選單模式的功能 -rw-r--r--. 1 root root 26828 2013-04-02 18:10 pxelinux.0 <==就是開機管理程式! drwxr-xr-x. 2 root root 4096 2013-04-02 18:11 pxelinux.cfg <==開機的選單設定在這裡! -rw-r--r--. 1 root root 162860 2013-04-02 18:41 vesamenu.c32 <==圖形化介面選單 |
上面的 memu.c32, vesamenu.c32 及 pxelinux.0 幾個檔案還好理解,反正就是提供『選單介面』以及『開機管理程式』的咚咚。那麼那個 pxelinux.cfg 是啥鬼?其實那是個目錄,可以放置『預設的開機選單』,也能夠『針對每部不同的用戶端主機提供設定的開機選單』!非常有趣吧!一般來說,還沒有特定的用戶端時,可以在 pxelinux.cfg 目錄內,建立一個名為 default 的檔案,那個檔案的功能就類似 grub 的 menu.lst 啦!提供一個選單的設定!
那如果沒有 menu.c32 或 vesamenu.c32 時,選單會以醜醜的純文字模式一行一行顯示。如果加上了 menu.c32 或 vesamenu.c32 時,就會有類似反白光棒的效果出現,那就可以使用『上下鍵』來操作光棒, 而不需要看著螢幕去輸入數字鍵來選擇開機選單囉!鳥哥覺得這樣比較好啦!包括在未來的設定檔以及相關的參數設定上面。這部分設定完畢後,再來則是核心檔案囉!
我們需要安裝 Linux 系統,所以得要從原版光碟裡面將核心檔案撈出來~這裡鳥哥以 64 位元版本的 CentOS 6.4 為範例來說明,鳥哥預計將核心檔案放置於 /install/tftpboot/kernel/centos6.4/ 目錄下,且鳥哥已經將原版光碟的映像檔捉下來放置於 /install/iso/CentOS-6.4-x86_64-bin-DVD1.iso 了,因此捉到核心檔案的方法如下:
# 將原版光碟暫時掛載在 /mnt 底下來抓資料用: [root@centos ~]# mount -o loop /install/iso/CentOS-6.4-x86_64-bin-DVD1.iso /mnt [root@centos ~]# mkdir -p /install/tftpboot/kernel/centos6.4 [root@centos ~]# cp /mnt/isolinux/vmlinuz /install/tftpboot/kernel/centos6.4 [root@centos ~]# cp /mnt/isolinux/initrd.img /install/tftpboot/kernel/centos6.4 [root@centos ~]# cp /mnt/isolinux/isolinux.cfg /install/tftpboot/pxelinux.cfg/demo [root@centos ~]# umount /mnt |
其實僅需要兩個檔案即可,不過鳥哥建議可以抓原版光碟裡面的選單設定檔來作為修改的依據!這樣以後比較好改!上面三個檔案的意義是:
既然 PXE 用戶端是透過網路卡來向 TFTP 取得開機管理程式與核心檔案的,那麼 pxelinux.0 這個開機管理程式又可以去抓預設的開機選單設定檔 (pxelinux.cfg/default 內容), 這也就是說,其實有很多種不同的方案來讓開機管理程式進行開機的!包括本機硬碟開機以及網路下載核心開機。
我們這裡預計有兩個開機選項, 一個是透過本機硬碟開機 (local boot) 一個則是透過剛剛我們所下載的核心檔案來開機,以進入安裝模式。那設定該如何處理呢?建立 pxelinux.cfg/ 目錄下的 default 即可! 而且我們會使用 vesamenu.c32 來將選單顯示成為類圖形光棒喔!注意相關語法!
[root@centos ~]# vim /install/tftpboot/pxelinux.cfg/default UI vesamenu.c32 <== 使用 vesamenu.c32 這個類圖形的介面程式 TIMEOUT 300 <== 單位 0.1 秒,所以這個設定可等待 30 秒來進入預設開機 DISPLAY ./boot.msg <== 提供一些額外的資訊,讓使用者更瞭解選單意義! MENU TITLE Welcome to VBird's PXE Server System <== 上面這行只是提供一個大標題而已! LABEL local <== 第一個選單的項目 MENU LABEL Boot from local drive MENU DEFAULT <== 此選單為預設項目 (等待逾時就進入此開機) localboot 0 <== 本機磁碟開機的特定項目! LABEL network1 MENU LABEL Boot from PXE Server for Install CentOS 6.4 kernel ./kernel/centos6.4/vmlinuz <== 核心所在的檔名 append initrd=./kernel/centos6.4/initrd.img <== 就是核心外帶參數啊! # 上述設定中,大寫的文件部分要特別注意!那是使用 vesamenu.c32 的關鍵字! # 至於後面的部分,那就是每個設定項目的內容囉! [root@centos ~]# vim /install/tftpboot/boot.msg Welcome to VBird's PXE Server System. The 1st menu can let you system goto hard disk menu. The 2nd menu can goto interactive installation step. |
這個檔案有很多種不同的設定模式,包括使用 menu.c32 以及 vesamenu.c32 的設定項目也不太相同。鳥哥這邊是以 vesamenu.c32 為範例的喔! 同時,在開始寫這設定值之前,請務必回到上面幾個小段落瞧一瞧,因為檔案放置的地點在每本書或每個範例裡面都不一樣!能不能透過 TFTP 讀到你正確想讀的檔案, 在這個設定檔當中才是重點項目喔!那就來說說上面大寫字體的關鍵字部分的意義:
關於這個設定檔的內容,鳥哥建議前往你系統中的 /usr/share/doc/syslinux-${version}/menu.txt 檔名去瞧一瞧,裡面寫得非常仔細!尤其是你還可以使用 chain.c32 去載入不同的 boot sector 開機!這就等於透過網路去指揮你的系統進行某個多重作業系統開機!而不用在現場敲鍵盤!非常有幫助!不過我們這裡沒有這方面的需求, 因此沒有仔細介紹。反正,記得去瞧瞧就是了。
一切都整理妥當之後,接下來你就可以開始在用戶端的 BIOS 設定網路開機,然後來測試一下你的 PXE 環境設定正確否了!只不過,每一家主機的 BIOS 設定都不相同, 鳥哥沒有辦法全部測試給你看~同時,新的 BIOS 甚至已經支援滑鼠設定了!好厲害好厲害~鳥哥還是使用舊舊的電腦來顯示給大家瞧瞧~相關的設定位置應該都差不多啦!
完成上述的項目之後,重新開機後,如果一切順利,你的系統在開機時就會進入如下的畫面當中:
如上圖所示,鳥哥測試過兩種介面,分別使用了 menu.c32 以及 vesamenu.c32 來測試顯示的畫面,結果就像上圖,使用 vesamenu.c32 看起來解析度似乎比較好,只是, 預設的配色好像不怎麼樣,可能得要自己去參考說明文件配色一下比較好。使用 menu.c32 的話,就是明顯的顏色對比,但是比較呆板一些的畫面。隨人喜好去調整吧。
由於預設有 30 秒的選擇時間,因此畫面下方會開始讀秒,如果按了上/下按鍵,反白的部分就不會在 default 值預設的光棒處了!如果你在需要的選單上面,按下了『Tab』按鈕, 此時系統就會跳出類似 grub 的互動介面給你修改參數就是!由於我們還沒有安裝系統在硬碟上,因此,鳥哥選擇了第二個項目,亦即是『Boot from PXE Server for Install CentOS 6.4』的項目。 按下之後就會開始進入安裝的偵測畫面中。
硬體偵測完畢,並且讓你:
之後,就開始選擇 CentOS 軟體所在的儲存媒體了!如下圖所示:
由於我們尚未製作軟體安裝伺服器,因此,我們直接使用國家高速網路中心的 FTP 所提供的軟體來源來安裝!因此,此時請選擇『 URL 』的項目。因為使用 URL 必須要有網路, 因此,安裝程式會要求我們設定 IP !請注意,這個安裝過程使用的網路參數與 PXE 取得的網路參數無關!所以這裡得要重新輸入一次網路參數。因為我們有使用 DHCP 服務啊! 所以如下勾選動態設定就好了:
然後輸入你查到的網址,如下所示 (使用國高的 FTP):
如果一切都沒有問題,這個時候就會開始進入安裝畫面,開始進行裸機的線上安裝!你也不用在用戶端燒錄光碟機,非常簡單方便吧!只是有個問題,你得要讓你的機器連上 Internet 去安裝軟體~ 那你也知道網際網路的速度要比你區域網路的速度慢很多~如果同時有很多台用戶端電腦要安裝系統,那就糗大了!因此,這時在區網內架設一個軟體安裝伺服器就顯的很重要了! 底下就來聊一聊怎麼建這個安裝伺服器吧!
架設安裝伺服器實在是非常的簡單,尤其是 CentOS 這個版本!你只要下載 CentOS 6.x 的第一片 DVD,將裡頭的資料以 NFS, HTTP, FTP 等方式分享出去,那你的主機就變成安裝伺服器了!就這麼簡單!鳥哥個人比較偏好使用 NFS 來分享,這是因為未來的應用中,我們可能需要網路磁碟機, NFS 是一個可以直接作為 Linux 網路磁碟機的服務,所以就用它比較簡單!如果你喜歡其他的協定來分享也沒有關係啊!我們可以使用同一個目錄來分享呢! 假設我們 DVD1 放置於 /install/iso/ 目錄內了,預計要分享的 CentOS 6.4 原版 DVD 目錄放在 /install/nfs_share/centos6.4/ 中, 簡單的處理如下:
# 1. 先將 DVD 的資料給他放置於所需要的目錄中,當然直接使用掛載最快! [root@centos ~]# mkdir -p /install/nfs_share/centos6.4 [root@centos ~]# vim /etc/fstab /install/iso/CentOS-6.4-x86_64-bin-DVD1.iso /install/nfs_share/centos6.4 iso9660 defaults,loop 0 0 # 特別要注意的是檔案系統與參數,記得光碟使用 iso9660 且需要加上 loop [root@centos ~]# mount -a [root@centos ~]# df 檔案系統 1K-區段 已用 可用 已用% 掛載點 /install/iso/CentOS-6.4-x86_64-bin-DVD1.iso 4251346 4251346 0 100% /install/nfs_share/centos6.4 # 這樣就掛載結束,比複製來複製去要簡單的多喔! # 2. 製作 NFS 分享,要注意對內 port 有規範喔! [root@centos ~]# yum -y install nfs-utils [root@centos ~]# vim /etc/exports /install/nfs_share/ 192.168.42.0/24(ro,async,nohide,crossmnt) localhost(ro,async,nohide,crossmnt) # NFS 的設定是很簡單,不過,要注意由於 server 上面有兩個掛載點在分享的目錄上, # 所以得要加上 nohide 與 crossmnt 這兩個參數才行!且後續的服務要開比較多就是了~ [root@centos ~]# vim /etc/sysconfig/nfs RQUOTAD_PORT=901 LOCKD_TCPPORT=902 LOCKD_UDPPORT=902 MOUNTD_PORT=903 STATD_PORT=904 # 找到上面這幾個設定值,我們得要設定好固定的 port 來開放防火牆給用戶處理! [root@centos ~]# vim /etc/idmapd.conf [General] Domain = i4502.dic.ksu [Mapping] Nobody-User = nfsnobody Nobody-Group = nfsnobody # 找到上面幾個設定值,我們這裡假設 ID 對應的無此帳號使用 nfsnobody 設定! [root@centos ~]# /etc/init.d/rpcbind restart [root@centos ~]# /etc/init.d/nfs restart [root@centos ~]# /etc/init.d/rpcidmapd restart [root@centos ~]# /etc/init.d/nfslock restart [root@centos ~]# chkconfig rpcbind on [root@centos ~]# chkconfig nfs on [root@centos ~]# chkconfig rpcidmapd on [root@centos ~]# chkconfig nfslock on [root@centos ~]# rpcinfo -p program vers proto port service 100000 4 tcp 111 portmapper 100000 4 udp 111 portmapper 100011 2 udp 901 rquotad 100011 2 tcp 901 rquotad 100005 3 udp 903 mountd 100005 3 tcp 903 mountd 100003 4 tcp 2049 nfs 100003 4 udp 2049 nfs 100021 4 udp 902 nlockmgr 100021 4 tcp 902 nlockmgr 100024 1 udp 904 status 100024 1 tcp 904 status # 要注意喔,我們得要啟動的 port 有 111, 2049,901~904 這幾個!防火牆要開! [root@centos ~]# showmount -e localhost Export list for localhost: /install/nfs_share 192.168.42.0/24,localhost # OK!看到上面這些東西,就是搞定囉!讚! # 3. 然後我們也來開放 www 服務提供這個安裝伺服器吧!簡單作法如下: [root@centos ~]# yum install httpd [root@centos ~]# /etc/init.d/httpd start [root@centos ~]# chkconfig httpd on [root@centos ~]# mkdir -p /var/www/html/install/centos6.4 [root@centos ~]# vim /etc/fstab /install/iso/CentOS-6.4-x86_64-bin-DVD1.iso /var/www/html/install/centos6.4 iso9660 defaults,loop 0 0 [root@centos ~]# mount -a [root@centos ~]# df 檔案系統 1K-區段 已用 可用 已用% 掛載點 /install/iso/CentOS-6.4-x86_64-bin-DVD1.iso 4251346 4251346 0 100% /var/www/html/install/centos6.4 # 同樣的,用掛載的應該會比較快速些~ # 4. 如果還想要提供 FTP 的處理呢?那還是簡單的這樣做即可: [root@centos ~]# yum install vsftpd [root@centos ~]# /etc/init.d/vsftpd start [root@centos ~]# chkconfig vsftpd on [root@centos ~]# mkdir -p /var/ftp/install/centos6.4 [root@centos ~]# vim /etc/fstab /install/iso/CentOS-6.4-x86_64-bin-DVD1.iso /var/ftp/install/centos6.4 iso9660 \ defaults,loop,context=system_u:object_r:public_content_t:s0 0 0 # 上面是同一行,比較重要的是參數的部分多了 context 喔!因為我們這個系統有使用 SELinux, # 為了要避免掛載的檔案系統出現 FTP 的 SELinux 錯誤,因此這裡得要加上此參數才行! [root@centos ~]# mount -a [root@centos ~]# df 檔案系統 1K-區段 已用 可用 已用% 掛載點 /install/iso/CentOS-6.4-x86_64-bin-DVD1.iso 4251346 4251346 0 100% /var/ftp/install/centos6.4 # 超級簡單的這樣就搞定了! |
很神奇的,這樣就搞定了三個服務的安裝伺服器功能!如果你想要開始測試使用內網的 http, ftp 來安裝的話,請回到圖 1.4-10 的畫面當中,在 URL 的空格上面,分別填入兩個不同的網址試看看:
上面兩個網址鳥哥都測試過,透過上面的設定,這個網址是可以直接就進入安裝模式當中沒問題~那如果是 NFS 呢?你得要先回去圖 1.4-8 的畫面中點選『 NFS directory 』的項目,然後在出現如下的畫面中,才輸入我們詳細的 NFS 分享的 CentOS 6.4 光碟內容的所在目錄:
因為畫面的關係,所以你看不到全部的輸入資料。請注意,CentOS directory 項目要填寫:『/install/nfs_share/centos6.4』才行喔! 接下來,請自行使用底下的方式來完整的安裝好一套 Linux 在你的系統上。鳥哥這裡使用的是 30GB 的測試硬碟來安裝的,底下僅列出不是自動設定的項目,需要調整的地方:
接下來系統就會使用你想不到的速度安裝好一套 CentOS Linux 了!非常簡單吧!這個網路安裝的流程!
完成上面各小節的設定後,你區網內的用戶端電腦應該都能夠透過網路來安裝 CentOS 了!只是,比較傷腦筋的地方在於,你還是得要手動一部一部電腦去開機,然後一步一步去選擇需要的安裝選項後, 最終按下安裝,系統才會自動的幫你安裝妥當。有沒有可能讓系統自己幫我安裝而不用選擇呢?可以啊!那就透過 kickstart 這個機制吧!
我們在上個小節的最後一段當中,有請你自行安裝了一個超小型的 CentOS 系統吧!那麼請你進入該系統去,瞧一瞧 root 家目錄有沒有一個名為 anaconda-ks.cfg 的檔案呢? 請打開該檔案來瞧一瞧內容如何!
[root@client ~]# cat /root/anaconda-ks.cfg # Kickstart file automatically generated by anaconda. install nfs --server=192.168.42.254 --dir=/install/nfs_share/centos6.4 lang en_US.UTF-8 keyboard us network --onboot yes --device eth0 --bootproto dhcp --noipv6 rootpw --iscrypted $6$qznCBKF/YnJdX9rB$OeSGN1c6JNCZ/GtqJTvKrN0t/pRkkUlhEXdc... firewall --service=ssh authconfig --enableshadow --passalgo=sha512 selinux --enforcing timezone Asia/Taipei bootloader --location=mbr --driveorder=vda --append="crashkernel=auto rhgb quiet" #clearpart --none #part / --fstype=ext4 --size=3000 repo --name="CentOS" --baseurl=nfs:192.168.42.254:/install/nfs_share/centos6.4 --cost=100 %packages @base @console-internet @core @debugging ....(中間省略).... krb5-workstation perl-DBD-SQLite %end |
看過這個檔案內容,有沒有覺得好像很熟悉啊!那是啥?沒錯!這就是剛剛你使用安裝程式進行設定項目選擇時,將你選擇的內容記憶起來的資料!透過這個檔案, 你可以知道最初安裝時是如何設定這個系統的。也由於這個系統還記錄了 root 編碼過的密碼,所以,很重要啊!不要隨便外流喔!現在讓我們想一想, 既然這個檔案已經記錄了我們所需要進行的各項步驟,那我透過這個檔案不就可以預先選擇好,然後交給安裝程式去自動執行即可嗎?沒錯啊!就是這樣!
既然知道了這個未來的功能了,那我們當然就得要先來瞭解一下這個 kickstart 檔案的內容才好啊!其實這個檔案大致將所有的動作分為三大部分來設計,分別是:
接下來就讓我們稍微談一談每個區段的重要設定項目吧!
這部分的重點項目有底下幾個常見的設定值,至於全部的完整資訊,可以參考文末的參考文獻去看更完整的資料喔!
[root@centos ~]# grub-crypt Password: <==輸入一次密碼 Retype password: <==再輸入一次密碼 $6$fPCvnGklAR4Qbxhp$RfFL4.wwZml.mWbej6HHYWTAE6ZLRV8/d... <==這就是加密過的密碼! |
# 不要在這部電腦使用防火牆系統,直接放行所有連線功能: firewall --disabled # 僅放行 ssh 的連線功能: firewall --service=ssh <==啟用的服務,可以是 ssh, telnet, smtp, http, ftp 等等 firewall --port=22:tcp <==啟用的埠口,也可以使用 2049:udp 之類的模式! # 上面兩個取任何一個都可以!鳥哥個人是比較喜歡使用號碼的 port number 來顯示! # 讓 eth1 變成信任網域,且放行 port 22, 25, 80 等埠口: firewall --port=22:tcp,25:tcp,80:tcp --trust eth1 # 如果有多個網卡,可以指定某張網卡變成信任裝置,這樣直接放行所有的進出封包在 eth1 上頭~ # 但不包括其他 eth0, eth2...介面,僅有 eth1 是信任的意思。 |
# CentOS 預設的身份驗證設定值:使用 sha1 512bits 演算法 authconfig --enableshadow --passalgo=sha512 <==較佳的預設值! # 如果想要使用舊的 md5 編碼來取代新的 sha1 編碼,可以這樣做看看: authconfig --enableshadow --enablemd5 |
selinux --permissive # 主要的模式有: --enforcing --disabled --permissive 喔! |
timezone Asia/Taipei <==建議改成這樣 timezone --utc Asia/Taipei <==以前預設的時區模式 # 更多系統支援的時區列於 /usr/share/zoneinfo/ 目錄下,請自行參考喔! |
# 原本預設的 bootloader 安裝於 MBR 以及預設 CentOS 6.x 的核心參數如下: bootloader --location=mbr --driveorder=vda --append="crashkernel=auto rhgb quiet" # grub 安裝於 MBR, 安裝於 vda 那顆硬碟上,且增加核心參數為 crashkernel=auto rhgb quiet # 先找 vda 安裝,如果找不到,就找 sda 安裝,再找不到,就找 hda 安裝在 MBR 內: bootloader --location=mbr --driveorder=vda,sda,hda --append="crashkernel=auto rhgb quiet" |
# 所有硬碟的分割表通通被清除! clearpart --all # 僅清除 vda 硬碟的分割表,其他的硬碟不要清除分割表! clearpart --drives=vda --all |
part / --fstype=ext4 --size=5000 --ondisk=vda --asprimary part /home --fstype=ext4 --grow --ondisk=vda --asprimary part /usr --fstype=ext4 --size=10000 --ondisk=vda part /var --fstype=ext4 --size=20000 --ondisk=vda part /tmp --fstype=ext4 --size=1000 --ondisk=vda part swap --fstype=swap --size=1000 # 如果僅有一顆硬碟,那麼 --ondisk 可以省略喔! # 使用 --size 來規範該分割的大小,單位是 MB 囉! # 使用 --grow 就可以讓系統自動去判斷最大可用容量,然後通通丟給該分割! # 使用 --asprimary 就會將該分割強制列在主要分割類型中! |
services --disabled cups,kdump,acpid,portreserve
|
repo --name="CentOS" --baseurl=nfs:192.168.42.254:/install/nfs_share/centos6.4 --cost=100 # --name 接這個 yum 軟體倉儲的名稱,可以自訂一個名字即可 # --baseurl 就是軟體來源~上述為 NFS 的寫法,如果是 url 的寫法,就直接 --baseurl=http://xxx 即可 # --cost 這個來源的權重比例 |
上面鳥哥僅列出常見的 kickstart 選項,還有很多其他選項,就請自行參閱相關的文獻資料囉!接下來讓我們來看一看軟體安裝區段能有什麼特殊的功能吧!
玩過 yum 就會知道,一般我們在安裝軟體時,可以獨立安裝某一個特定軟體 (yum install package),也可以安裝整個軟體群組 (yum groupinstall grouppackage)!
那我怎麼知道有哪些軟體群組可以使用呢?這時就得要查詢原版光碟內的 repodata/*comps.xml 檔案了!舉例來說,請到目前你伺服器內的
/install/nfs_share/centos6.4/repodata/*comps.xml 檔案內,使用關鍵字 『group』 去查詢一下,就會看到很多安裝過程中會出現的軟體群組了!
以我們在上一小節談到的安裝內容 (basic server) 來說,相關的軟體與軟體群組有這些:
%packages @base <==前面加個 @ 的,代表是軟體群組喔! @console-internet @core @debugging @directory-client @hardware-monitoring @chinese-support <==中文語系支援!這個重要! ....(中間省略).... pax <==直接寫軟體名稱的,就是單一軟體而已! oddjob sgpio device-mapper-persistent-data ....(底下省略).... |
一般來說,所有的軟體都可以在後續才安裝!不過,如果你想要一安裝完畢就能夠看到圖形介面以及所有相關的其他語系顯示畫面,那就得要安裝額外的語系支援。 同樣可以到 *comps.xml 檔案內找到相關的軟體群組來安裝。舉例來說,如果你想要安裝法語語系,那就得要加個:『 @french-support 』在你的 %packages 區段內囉!
假設你的 kickstart 是要給不同的機器設備共同使用的,但我們知道所有的設備其實硬碟數量與大小都不相同。那能不能在開始解析 kickstart 之前,先偵測系統的磁碟設備, 根據偵測的結果製作出分割表的規劃後,才進行 kickstart 的解析,最後才開始安裝呢?是可以的!那就是將所需要偵測與作出分割資訊的檔案透過 bash shell 去檢測, 然後在 kickstart 內使用『 %include somefile 』的方式將該資料彙整進來即可~這時就得要將該動作放置於 %pre 的區段內了!
不過 %pre 的用途比較少,因為安裝前大概只要注意到硬體偵測,以釐清我們想要安裝的模式為何而已。如果是安裝後到重新開機前的行為,那就熱鬧多了! 因為我們可能會增加 ssh 的金鑰、額外掛載與設定某些特定的腳本程式到 /etc/rc.d/rc.local、額外進行其他 partition 的完整復原等等。舉例來說,如果我想要安裝完畢之後, 讓 root 加入 ssh 金鑰,這樣我才能夠不用密碼登入此機器時,那可以這樣處理:
%post #!/bin/sh mkdir -p /root/.ssh chmod 700 /root/.ssh chown root.root /root/.ssh echo "ssh-rsa AAAAB3NzaC1yc2EA...== root@i4502.dic.ksu" >> /root/.ssh/authorized_keys chmod 644 /root/.ssh/authorized_keys chown root.root /root/.ssh/authorized_keys |
當然啦,上面那個金鑰的內容 (echo 後面雙引號的內容) 你就得要自己貼上去了~
談完了大致的 kickstart 參數後,那怎麼用在我們想要處理的批次安裝電腦教室內的所有電腦主機呢?最簡單的方式就是,拿上一個小節做完的 anaconda-ks.cfg 來改即可! 簡單快速又方便!現在鳥哥想要使用底下的方式來處理批次安裝:
鳥哥預計將這個 kickstart 放置於 /install/nfs_share/kickstart/ 目錄內,且取名為 pcroom_raw.ks 檔案。在這個檔案開始處理前,我們有兩個東西需要先取得, 一個是 root 密碼,一個則是金鑰中公鑰的內容。我們可以簡單的透過底下的方式來取得相關的資訊:
# 1. 取得 root 密碼: [root@centos ~]# grub-crypt Password: Retype password: $6$ZXrlk3POd9J1kqa4$PmTaai.UlWf.exaXFP.aqmn6C4gdQvP9NpExsJmcJIDAKD8VEZArkVtfr/KDnScY41tZGJxwix0ZvEbsmjLea0 # 上面這一串就是我們要的資料啦! # 2. 取得金鑰的公鑰資料: [root@centos ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): <==輸入 Enter Enter passphrase (empty for no passphrase): <==輸入 Enter Enter same passphrase again: <==輸入 Enter Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. <==這就是我們要的! The key fingerprint is: 51:ee:b0:29:e5:3a:01:eb:57:33:f3:73:34:12:0b:26 root@server.i4502.dic.ksu [root@centos ~]# cat /root/.ssh/id_rsa.pub # 輸出的內容就是我們要的資訊!! |
好了,那就讓我們來調整一下這次我們所需要的 kickstart 檔案內容吧!
[root@centos ~]# mkdir /install/nfs_share/kickstart [root@centos ~]# vim /install/nfs_share/kickstart/pcroom_raw.ks install text nfs --server=192.168.42.254 --dir=/install/nfs_share/centos6.4 lang zh_TW.UTF-8 keyboard us network --onboot yes --device eth0 --bootproto dhcp --noipv6 rootpw --iscrypted 剛剛你用 grub-crypt 作出的密碼參數 firewall --port=22:tcp,25:tcp,80:tcp,111:tcp,111:udp,9000:udp,9001:udp authconfig --enableshadow --passalgo=sha512 selinux --permissive timezone Asia/Taipei bootloader --location=mbr --driveorder=vda --append="crashkernel=auto rhgb quiet" reboot zerombr clearpart --all part / --fstype=ext4 --size=3000 services --disabled cups,kdump,acpid,portreserve repo --name="CentOS" --baseurl=nfs:192.168.42.254:/install/nfs_share/centos6.4 --cost=100 %packages @base @console-internet @core @debugging @directory-client @hardware-monitoring @java-platform @large-systems @network-file-system-client @performance @perl-runtime @server-platform @server-policy pax oddjob sgpio device-mapper-persistent-data samba-winbind certmonger pam_krb5 krb5-workstation perl-DBD-SQLite %post #!/bin/sh mkdir -p /root/.ssh chmod 700 /root/.ssh chown root.root /root/.ssh echo "剛剛你製作出的 id_rsa.pub 檔案的內容" >> /root/.ssh/authorized_keys chmod 644 /root/.ssh/authorized_keys chown root.root /root/.ssh/authorized_keys [root@centos ~]# chmod 644 pcroom_raw.ks |
瞭解了 kickstart 的參數後,這個小節的相關參數修改與製作就顯的簡單多了!接下來,就讓我們準備來大量安裝系統吧!
我們得要告知用戶端在取得 PXE 的環境後,還能夠自動下載這個 kickstart 設定檔,這樣用戶端電腦才會自己安裝而不會進入詢問模式。這時得要修改 pxelinux.cfg/default 內容了! 我們現在增加另外一個選單,這個選單可以讓系統自動的以剛剛的 kickstart 方式來自我裸機安裝~這樣做就可以了!
[root@centos ~]# vim /install/tftpboot/pxelinux.cfg/default ....(前面省略).... LABEL kickstart1 MENU LABEL Boot from PXE Server for AUTO Install CentOS 6.4 raw kernel ./kernel/centos6.4/vmlinuz append initrd=./kernel/centos6.4/initrd.img ks=nfs:192.168.42.254:/install/nfs_share/kickstart/pcroom_raw.ks |
重點是上面特殊字體的部分!可以是 nfs 也可以是 http:// 的格式!看你的資料要放哪裡就是了。鳥哥偷懶一下,就直接擺內網原本要分享出去的位置而已。 好了,接下來請到內網的用戶端開機一下,使用網路開機喔!看看能不能進入第三個選單,然後讓系統自己安裝去!
在鳥哥的測試中,很快的啦!幾分鐘就安裝好了這樣的一套系統~相當的簡單快速!不用挑選!好開心啊!另外,這一套系統如果搞定了之後,拜託注意一下, 請回到第一章 2.3 小節的 DHCP 伺服器部分,參考一下 getmac.sh 的內容, 根據該功能重新設定一下你的 DHCP 伺服器設定檔,讓你的用戶端 IP 能夠與座位搭配上喔!
如果你跟鳥哥一樣有特殊的作業系統環境需求,那麼可能得要花點功夫來思考一下怎麼進行作業系統的初期安裝才好!安裝好了之後,再將該 partition 所在的環境給他完整的備份, 然後丟給其他電腦來作為復原的機制!這樣就成功啦!這過程是挺複雜的~底下我們就來玩一玩~
在鳥哥工作的資訊傳播系單位中,因為系上老師們使用的軟體都不一樣,很多老師還是需要 Windows 上面的重要軟體。因此,鳥哥得要將電腦系統安裝成多重作業系統。 在這樣的情況下,我們系上需要安裝 (1)第一套 Linux 管理系統 (2)windows 7 系統 (3)上課用 CentOS 桌面系統,這還沒有提到資料共用的 windows D 槽~ 好了,假設我們已經使用 kickstart 安裝好了第一套 Linux 管理系統,那接下來 Windows 系統怎麼安裝呢?當然你得要調整用戶端 BIOS 變成光碟機開機,放入 Windows 7 的原版光碟, 接下來請自行安裝你的 Windows 系統吧!
因為 Demo 機未來安裝的系統都是要做為備份的來源,因此安裝在上頭的資料當然就得要能夠復原給其他用戶端電腦。一般來說,目標的磁碟總是要比來源的磁碟大才好。 例如,原本 Demo 機器的 Windows 佔用了 20GB 的話。那麼你的其他用戶端電腦,除非系統與磁碟是一模一樣的,否則的話,最好能夠加大到類似 20.1GB 之類的容量,那未來在復原時比較不會出問題。 這是鳥哥過去的經驗啦,提供給您參考囉!
另外,安裝過 Windows 7 的朋友都知道,Windows 會自己搞一個額外的 100MB 分割來儲存資訊。不過,鳥哥不是很喜歡多這個分割在。但是這個分割是 windows 正常安裝所產生的, 以正常手段是很難避免掉!所以,為了避免這個問題,鳥哥習慣上都會先自己在 Linux 控制系統上面使用 fdisk 或 parted 手動建立足夠的分割,然後再強迫 Windows 安裝到固定的分割槽中, 這樣就不會多出那個怪異的 100MB 分割槽了。
現在,鳥哥假設我這裡預計要安裝的 Windows 會佔用 20.1GB 的容量,剩餘的容量都給 Linux 使用。不過如前所述,Demo 機器的容量要檢小一些。因此,底下我們要處理的方式中, Windows 的 /dev/vda2 僅擁有 20GB,剩餘的容量中,除了給 Linux Desktop 用之外,還會有 100MB 留在最面沒有使用到!底下是鳥哥的測試機分割示意:
# 1. 先看看剩下多少容量吧! [root@centos ~]# parted /dev/vda unit MB print Model: Virtio Block Device (virtblk) 磁碟 /dev/vda:31527MB <==此硬碟的最大可用容量 磁區大小 (邏輯/物理):512B/512B 分割區:msdos 編號 起始點 結束點 大小 類型 檔案系統 旗標 1 1.05MB 3147MB 3146MB primary ext4 <==此硬碟的 /dev/vda1 起始/結束磁柱 # 2. 建立的新分割為 NTFS 檔案系統,且起始為 3147MB 結束為 3147+20480*1.024=24118.5=24120 # 請注意,parted 顯示的 MB 為十進位的 1000 倍而不是我們常用的 1024 倍! [root@centos ~]# parted /dev/vda mkpart primary NTFS 3147MB 24120MB [root@centos ~]# parted /dev/vda unit MB print 編號 起始點 結束點 大小 類型 檔案系統 旗標 1 1.05MB 3147MB 3146MB primary ext4 2 3147MB 24120MB 20974MB primary ntfs <==注意大小的地方即可! # 3. Linux Desktop 容量應該在 24120MB ~ (31527-100) = 31427MB [root@centos ~]# parted /dev/vda mkpart primary ext2 24120MB 31427MB [root@centos ~]# parted /dev/vda mkpart primary ext2 31427MB 31527MB [root@centos ~]# parted /dev/vda unit MB print 編號 起始點 結束點 大小 類型 檔案系統 旗標 1 1.05MB 3147MB 3146MB primary ext4 2 3147MB 24120MB 20974MB primary ntfs 3 24120MB 31427MB 7306MB primary 4 31427MB 31527MB 99.7MB primary |
請注意,鳥哥是特別留下 100MB 在最後面,這個不見得用的到!如果每部機器的磁碟都一模一樣的話,那就無所謂~如果不一樣大的話,那麼等一下用戶端的電腦就得要先作個手腳~ 讓他們的 /dev/vda2, /dev/vda3 稍大一下,這樣在復原時比較不會出問題啦!
請先確認你的光碟機放了 Windows 7 的原版光碟,並且調整了 BIOS,之後直接進入安裝程式,因為我們先作了分割了,因此,你就會看到如下的畫面, 直接按下箭頭點選處安裝到 /dev/vda2 即可!
安裝好了 Windows 7 之後,鳥哥建議可以關閉某些不必要的服務,以及更改一些可能會發生問題的設定,並增加一個可以自動修訂主機名稱的軟體後, 再開始進行 Windows update。等到更新完畢後,再安裝你所需要的所有軟體。等到軟體都處理妥當了,這時才開始進行後續的備份與大量復原的動作吧!底下是鳥哥建議可以進行的工作:
整個 windows 7 的安裝大概就是這樣,重點在那個分割的動作啦!然後,由於未來這部 Demo 機的 windows 會被拿來作為範本並還原在其它的主機上, 所以,最好對這個系統做個比較完整的設定與更新,然後才關機後準備備份的動作。不要忘記了,我們還有個 CentOS Linux 要安裝喔!
安裝好了 Windows 7 之後,你會發現一件事情,那就是:『你再也進不了第一套 Linux 控制系統』了!這是因為 Windows 7 會主動的將它的 boot loader 安裝於硬碟的 MBR 當中,但它的 boot loader 又不允許提供 Linux 系列的 boot loader 的控制權移交,因此,你才再也進不了 Linux。沒關係啦!反正我們還可以再安裝一套 Linux 嘛!
那如何安裝這套 Linux 呢?要不要原版光碟啊?不用啦!我們不是在 PXE 的階段就作好了可以讓使用者自由挑選安裝內容的選單嗎?回到圖 2.3-1 去瞧一瞧,直接使用第二個選單來開機就能進入互動的安裝模式了。然後就開始依據正常程序安裝系統,你唯一比較需要注意的地方是:
如果一切順利的話,你的系統會很快速的就安裝完畢且進入 Linux Desktop 中沒問題~不過,此時你卻只能使用這套 Linux 與 Windows 來操作系統而已, 還是無法回到原本的 Linux 控制系統!那怎辦?沒關係,我們先來處理一下 Linux desktop (第三套系統) 的問題,處理完畢後,再來搞定 Linux manager (第一套系統) 的問題~
# 刪除系統偵測到的網卡 MAC 與網卡代號對應值 [root@centos ~]# vim /etc/udev/rules.d/70-persistent-net.rules # PCI device 0x1af4:0x1000 (virtio-pci) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:00:ae:67:07", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" # 上面刪除線的內容是同一行~只要出現的任何 SUBSYSTEM 開頭的,通通刪除! # 讓系統下次開機時,重新針對網路卡進行硬體自動檢測! # 讓網路設定檔中,關於網卡與網卡 UUID 的設定值拿掉~ [root@centos ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE="eth0" BOOTPROTO="dhcp" HWADDR="52:54:00:AE:67:07" NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Ethernet" UUID="93fa7379-4e1b-4893-a480-0e405cd8e165" # 將上面兩個設定值,HWADDR 與 UUID 拿掉! |
[root@centos ~]# vim /boot/grub/menu.lst default=0 timeout=30 splashimage=(hd0,2)/boot/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.32-358.el6.x86_64) root (hd0,2) kernel /boot/vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/vda3 .....(後面省略).. initrd /boot/initramfs-2.6.32-358.el6.x86_64.img title Windows 7 rootnoverify (hd0,1) chainloader +1 title MBR root (hd0) chainloader +1 # 如上所示,增加選單等待時間之外,也增加回到 MBR 的選單功能! # 此外,由於這個映像檔要被複製,因此 root 不建議使用 UUID,應變為原本的 /dev/vda3 較佳。 |
# 1. 先掛載原有的 Linux 控制系統,並且將根目錄切為該系統去! [root@centos ~]# df 檔案系統 1K-區段 已用 可用 已用% 掛載點 /dev/vda3 7119768 3435780 3322320 51% / <==有 7G 為 desktop 系統 tmpfs 510212 76 510136 1% /dev/shm [root@centos ~]# mount /dev/vda1 /mnt <==除根目錄外,底下的記憶體與裝置也需要掛載 [root@centos ~]# mount --bind /proc /mnt/proc [root@centos ~]# mount --bind /dev /mnt/dev [root@centos ~]# chroot /mnt [root@centos /]# df <==你會看到,突然變成了根目錄了! 檔案系統 1K-區段 已用 可用 已用% 掛載點 /dev/vda1 3023760 1730868 1139292 61% / <==整個根目錄變成為 vda1 sysfs 3023760 1730868 1139292 61% /sys # 2. 設定好選單項目,預設為 Windows --> Linux desktop --> Linux manager [root@centos /]# vim /boot/grub/menu.lst default=0 timeout=30 <==等待 30 秒比較夠用 splashimage=(hd0,0)/boot/grub/splash.xpm.gz #hiddenmenu <==不要隱藏,直接讓使用者挑選 title Windows 7 <==第 0 個是 Windows 7 rootnoverify (hd0,1) chainloader +1 title CentOS Linux for Desktop System (Linux OS) <==第 1 個依舊直接交給該系統的 loader root (hd0,2) chainloader +1 <==就是這裡!是該系統自己的 loader title This system restore/backup manager <==最後一個才是管理系統本身 root (hd0,0) kernel /boot/vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/vda1 .....(後面省略).. initrd /boot/initramfs-2.6.32-358.el6.x86_64.img # 是要特別注意上頭核心參數的 root 部分啦!因為這個選單也要複製給所有用戶端機器使用! # 3. 將此設定寫入 MBR 當中去! [root@centos /]# grub GNU GRUB version 0.97 (640K lower / 3072K upper memory) [ Minimal BASH-like line editing is supported. For the first word, TAB lists possible command completions. Anywhere else TAB lists the possible completions of a device/filename.] grub> root (hd0,0) root (hd0,0) Filesystem type is ext2fs, partition type 0x83 grub> setup (hd0) setup (hd0) Checking if "/boot/grub/stage1" exists... yes Checking if "/boot/grub/stage2" exists... yes Checking if "/boot/grub/e2fs_stage1_5" exists... yes Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 27 sectors are embedded. succeeded Running "install /boot/grub/stage1 (hd0) (hd0)1+27 p (hd0,0)/boot/grub/stage2 /boot/grub/grub.conf"... succeeded Done. grub> quit quit # 4. 回原本的 Desktop 系統,並重新將自己的 grub 安裝於自己 filesystem 的 boot sector 內! [root@centos /]# exit [root@centos ~]# grub <==回到原本的 Linux desktop 中 grub> root (hd0,2) grub> setup (hd0,2) <==以 Linux desktop 的設定,再次安裝於自己的 boot sector 內! grub> quit # 在某些特殊的情境下,partition 內的 boot sector 並不會安裝 grub 開機管理程式, # 為了避免困擾,建議還是重新安裝一次在原 desktop 系統中較好! |
在一切都搞定之後,接下來要幹嘛?當然就是將 Demo 機的 /dev/vda2, /dev/vda3 內的檔案系統複製起來啦!那如何複製呢? 就得要透過 server 端提供的 NFS 檔案系統空間,然後再以 partclone 指令處理即可!繼續來參考下一小節的內容吧!
我們的 Demo 機的第一套 Linux 控制系統內的檔案容量很小,全部的檔案系統只給 3GB 而已,根本沒有空間可以儲存 /dev/vda2, /dev/vda3 的資料。 因此得要透過區網內的 server 提供的網路磁碟來進行備份。最簡單的網路磁碟當然就是 NFS 啦!另外,我們也知道備份整個 partition 最簡單的方式是 dd 這個指令~只是,dd 會連同沒有使用到的磁區也備份下來,而且也沒有進行任何檔案系統壓縮,因此備份檔會非常非常大!
以本案例來說,鳥哥的 windows 灌完只用了 13GB 而 Linux 更小,只有 3GB 左右而已,因此總共用的磁碟也不過 16GB。但如果使用的是 dd 指令備份, 那麼全部的備份資料將會保留原有 partition 的大小,亦即是 20+7=27GB,這比用到的資料還要大太多了吧!
為了減少儲存備份的檔案系統壓力,也為了加快檔案系統的復原 (越大的備份代表越久的復原時間),我們這裡使用的是國家高速網路中心推出的, 修改 partimage 讓備份支援 ext4/NTFS 等檔案系統的 partclone 軟體啦(註3)!這個軟體功能相當強大,而且國高也有針對 CentOS 推出 yum 軟體倉儲, 你只要設定好 yum 就能夠直接線上安裝 partclone 了!好輕鬆呢!
接下來,我們將分 server 與 client 需要進行的動作來做介紹喔!下達指令之前,務必瞭解該指令段是給哪個系統使用的! 不要做錯地方了喔! ^_^
Server 端要進行的項目中,其實不需要安裝 partclone 啦!只是為了管理上的方便,所以建議還是得安裝一下比較好!另外,鳥哥預計要讓用戶端上傳備份資料的地方, 主要是放置於 /install/client_img/ 目錄,該目錄最好要權限全開比較好!那就讓我們來玩一玩吧!
# 1. 先設定好 DRBL 官方網站提供的 yum repository 的網址,並安裝所需要的 partclone 與 ntfsprogs [root@centos ~]# vim /etc/yum.repos.d/drbl.repo [drbl] name = Diskless Remote Boot in Linux baseurl = http://free.nchc.org.tw/drbl-core/x86_64/RPMS.drbl-stable/ gpgcheck = 0 enabled = 1 # 記得,這個檔案是自己建立的!所以是全新檔案啦! [root@centos ~]# yum install partclone ntfsprogs # 2. 分享 /install/client_img/ 目錄使用 NFS 出去 [root@centos ~]# mkdir /install/client_img [root@centos ~]# vim /etc/exports /install/client_img 192.168.42.0/24(rw,async,no_root_squash) localhost(rw,async,no_root_squash) [root@centos ~]# /etc/init.d/nfs reload [root@centos ~]# showmount -e localhost Export list for localhost: /install/client_img 192.168.42.0/24,localhost <==多這玩意兒就對了! /install/nfs_share 192.168.42.0/24,localhost |
Server 做到這步就成功了!很簡單吧!
Client 端的設定中,第一步驟與 server 一樣,就是安裝好 partclone, ntfsprogs 即可!非常簡單!不過你需要注意的是,你要進入的是:『Linux 控制系統, 也就是第一套用 kickstart 安裝的系統』才對喔!因為我們是透過這個 Linux 來掌控整部主機的嘛!
# 1. 先設定好 DRBL 官方網站提供的 yum repository 的網址,並安裝所需要的 partclone 與 ntfsprogs [root@centos ~]# vim /etc/yum.repos.d/drbl.repo [drbl] name = Diskless Remote Boot in Linux baseurl = http://free.nchc.org.tw/drbl-core/x86_64/RPMS.drbl-stable/ gpgcheck = 0 enabled = 1 [root@centos ~]# yum install partclone ntfsprogs # 2. 掛載來自 Server 的 /install/client_img 目錄到本系統中 [root@centos ~]# mkdir -p /install/client_img [root@centos ~]# mount -t nfs 192.168.42.254:/install/client_img /install/client_img [root@centos ~]# df 檔案系統 1K-區段 已用 可用 已用% 掛載點 192.168.42.254:/install/client_img 15481856 4456704 10238720 31% /install/client_img <==要看到他! # 3. 使用 partclone 完整備份 /dev/vda2 到 Server 上面去! [root@centos ~]# partclone.[fs] -c -s [裝置] -o [file] <==這個是備份 [root@centos ~]# partclone.[fs] -r -s [file] -o [裝置] <==這個是還原 選項與參數: -c :為複製 (clone) 的意思,所以要備份得要加上 -c 參數才行喔! -r :為還原 (restore) 的意思,還原映像檔到裝置上,就得使用這玩意兒! -s :為來源 (source) 的意思,備份時為裝置,還原時為來源印象檔。 如果與標準輸入/輸出有關而非檔案/裝置時,那就寫『 - 』即可! -o :為目標 (output) 的意思,是要將來源複製到哪裡去的意思~一般是檔案! -d :為除錯 (debug) 的意思,可以輸出的訊息比較多,方便使用者除錯 -C :為略過檢測 (no check) 的意思,某些特殊情況下,你可能要略過檢測~ 這個項目就可以幫助你略過檢測了! # 將 windows 7 的 partition 完整備份後,並且進行壓縮,直接放置於 server 上 [root@centos ~]# partclone.ntfs -c -s /dev/vda2 -o - | \ > gzip > /install/client_img/windows7.img.gz Partclone v0.2.59 http://partclone.org 開始備份 裝置 (/dev/vda2) 到 印象檔 (-) Reading Super Block 經過:00:00:01, 剩餘: 00:00:00, 完成:100.00% 全部時間:00:00:01, 100.00% completed! done! <==上面在讀取整體檔案系統資訊,主要是 superblock 內的資料 檔案系統: NTFS Device size: 21.0 GB = 5120135 Blocks <==檢測檔案系統資料量~ Space in use: 14.3 GB = 3502594 Blocks Free Space: 6.6 GB = 1617541 Blocks 裝置區塊大小: 4096 Byte 經過:00:11:04, 剩餘: 00:00:00, 完成:100.00%, 速率: 1.30GB/min current block: 5120135, total block: 5120135, Complete: 100.00% <==備份過程展示 全部時間:00:11:04, 平均速率: 1.3GB/min, 100.00% completed! Syncing... OK! 備份 裝置 (/dev/vda2) 到 印象檔 (-) 完成 [root@centos ~]# ll -h /install/client_img/ -rw-r--r--. 1 root root 4.9G 2013-04-21 12:33 windows7.img.gz <==容量是否小一些! [root@centos ~]# partclone.ext4 -c -s /dev/vda3 -o - | \ > gzip > /install/client_img/linux_desktop.img.gz # 繼續備份下一個 /dev/vda3 的 Linux desktop 囉! [root@centos ~]# cp /boot/grub/menu.lst /install/client_img/ # 同時備份其他系統也會更動到的開機選單的部分即可! |
需要注意的是,partclone 支援很多的檔案系統讓我們選擇備份,只是他並不是提供類似『 mkfs -t [檔案系統類型] 』的指令模式, 而是直接製作許多指令檔讓我們來執行~因此,你不能使用 partclone.ntfs 來備份 Linux 系統,也不能使用 partclone.ext4 來備份 windows 系統。 所以,要操作這個動作之前,還得先要瞭解你的作業系統的檔案系統類型才行哩!
另外,partclone 本身並不提供壓縮功能,所以,你必須要透過資料流重導向的方式,將資料丟到螢幕中,再交給 gzip 進行壓縮~ 所以才會有上面的範例中,那麼複雜的指令輸入情況!還原也一樣,先必須要透過 gzip 解壓縮後,才能夠交給 partclone 來還原! 做完這些動作後,我們的 Demo 機就可以功成身退了!
與備份一樣,還原也是很簡單的!只是,你得要留意的是,必須要先執行磁碟分割,分割完畢之後,才能夠依據映象檔來復原。 分割槽的容量要不要一模一樣大呢?其實,只要比映象檔內的分割參數要大就好了。舉例來說,我們剛剛備份的 windows 7 裡面的 Device size 顯示為 21GB, 那麼你預計要將這個備份資料復原的分割槽,就要比這個值大!否則就會出現還原失敗的情況。由於每顆硬碟的容量都不一樣大, 因此,你得要先在新機器上面做好分割後,才能夠復原。
好,假設你已經使用之前做好的 kickstart 在另一部新機器上安裝好了第一套 Linux 了,請進入該系統,然後一步一步來處理另外兩個 Windows/Linux 作業系統的復原吧!(我這裡假設你已經安裝好了 partclone 了喔!不再重複 yum 階段!)
# 1. 先觀察分割表,之後依據 Demo 機的分割表來進行本機分割吧! [root@centos ~]# parted /dev/vda unit MB print Model: Virtio Block Device (virtblk) 磁碟 /dev/vda:31527MB 磁區大小 (邏輯/物理):512B/512B 分割區:msdos 編號 起始點 結束點 大小 類型 檔案系統 旗標 1 1.05MB 3147MB 3146MB primary ext4 啟動 # 目前僅有自己的分割,沒有底下兩個額外的 Windows/Linux 分割! [root@centos ~]# parted /dev/vda mkpart primary NTFS 3147MB 24120MB [root@centos ~]# parted /dev/vda mkpart primary ext2 24120MB 31427MB [root@centos ~]# parted /dev/vda unit MB print 編號 起始點 結束點 大小 類型 檔案系統 旗標 1 1.05MB 3147MB 3146MB primary ext4 啟動 <==啟動的位置不對 2 3147MB 24120MB 20974MB primary NTFS 3 24120MB 31427MB 7306MB primary ext4 # 利用本章製作的 Demo 機器之前的分割表來重複一次!因為鳥哥的機器一模一樣, # 所以這裡暫時跟原有的 Demo 機的分割參數一個模樣喔! [root@centos ~]# parted /dev/vda set 2 boot on [root@centos ~]# parted /dev/vda unit MB print 編號 起始點 結束點 大小 類型 檔案系統 旗標 1 1.05MB 3147MB 3146MB primary ext4 2 3147MB 24120MB 20974MB primary NTFS 啟動 <==OK!正確了! 3 24120MB 31427MB 7306MB primary ext4 [root@centos ~]# reboot # 重新開機讓 partition 生效,然後才能繼續後續的處理流程! # 2. 開始復原系統 [root@centos ~]# mkdir -p /install/client_img [root@centos ~]# mount -t nfs 192.168.42.254:/install/client_img /install/client_img [root@centos ~]# gzip -d /install/client_img/windows7.img.gz -c | \ > partclone.ntfs -r -s - -o /dev/vda2 開始還原 印象檔 (-) 到 裝置 (/dev/vda2) Reading Super Block Calculating bitmap... Please wait... done! 檔案系統: NTFS Device size: 21.0 GB = 5120135 Blocks Space in use: 14.3 GB = 3502594 Blocks Free Space: 6.6 GB = 1617541 Blocks 裝置區塊大小: 4096 Byte 經過:00:03:46, 剩餘: 00:00:00, 完成:100.00%, 速率: 3.81GB/min current block: 5120135, total block: 5120135, Complete: 100.00% 全部時間:00:03:46, 平均速率: 3.8GB/min, 100.00% completed! Syncing... OK! 還原 印象檔 (-) 到 裝置 (/dev/vda2) 完成 Cloned successfully. # 從解壓縮的資料中讀取 partclone 映象檔,並將之復原到 /dev/vda2 !無須格式化! [root@centos ~]# gzip -d /install/client_img/linux_desktop.img.gz -c | \ > partclone.ext4 -r -s - -o /dev/vda3 # 3. 開始處理 grub 選單內容 [root@centos ~]# cp /install/client_img/menu.lst /boot/grub/menu.lst # 4. 處理彈性縮放檔案系統的動作: (optional) [root@centos ~]# partclone.ntfsfixboot -w /dev/vda2 [root@centos ~]# ntfsresize /dev/vda2 [root@centos ~]# resize2fs /dev/vda3 # partclone.ntfsfixboot 可以修復 NTFS 檔案系統開機磁區可能會出現的錯誤; # ntfsresize 可以讓該檔案系統放大到該裝置最大可用容量!(但是 windows 開機會要求磁碟檢查) # resize2fs 則是彈性處理 ext4 的檔案系統囉! |
一般來說,備份會花比較多時間,還原的速度比較快!所以,同樣是針對 windows7 來比較,備份需要花去我們 11 分鐘的時間, 還原僅需一半的時間即可處理完畢!相當有趣吧!還不需要預先格式化呢!還不快點來學習 partclone 嗎?! ^_^
接下來,就請您在這部新機器上面重新開機,看看你的開機選單有沒有出現三個,並且嘗試登入其他兩個作業系統試看看囉!
想想看,我們在完成了 kickstart 以及 Demo 機的安裝之後,在其他用戶端上面做了什麼事?大概只有這些:
既然只進行這些動作而已,那為何不能將這些動作寫入 kickstart 設定檔中呢?恩!你問了一個好問題!我們當然可以將這些動作寫入 kickstart 設定檔當中的 %post 之後,這樣系統就能夠一鍵安裝了!開心得不得了嗎?呵呵!那就讓我們來玩玩看,試看看能不能這樣做吧!
# 先在 PXE server 上面進行改寫 kickstart 設定檔的動作啊! [root@centos ~]# cd /install/nfs_share/kickstart [root@centos kickstart]# cp pcroom_raw.ks pcroom_one_touch.ks [root@centos kickstart]# vim pcroom_one_touch.ks ....(前面省略).... repo --name="DRBL" --baseurl=http://free.nchc.org.tw/drbl-core/x86_64/RPMS.drbl-stable/ --cost=200 # 加入了 DRBL 的 yum 軟體倉儲! %packages ....(中間省略).... partclone ntfsprogs # 加入了 DRBL 的 partclone, ntfsprogs 等軟體的自動安裝! %post #!/bin/sh ....(中間省略).... chown root.root /root/.ssh/authorized_keys parted /dev/vda mkpart primary NTFS 3147MB 24120MB parted /dev/vda mkpart primary ext2 24120MB 31427MB parted /dev/vda set 2 boot on echo " #!/bin/bash echo 'Prepare to mount NFS server' mkdir -p /install/client_img mount -t nfs 192.168.42.254:/install/client_img /install/client_img echo 'Restore windows7' gzip -d /install/client_img/windows7.img.gz -c | partclone.ntfs -r -s - -o /dev/vda2 echo 'Restore Linux Desktop' gzip -d /install/client_img/linux_desktop.img.gz -c | partclone.ext4 -r -s - -o /dev/vda3 echo 'Restore boot menu' cp /install/client_img/menu.lst /boot/grub/menu.lst echo 'remove partclone procedure' sed -i 's/^.*sh \/root\/partclone.sh.*$//g' /etc/rc.d/rc.local rm /root/partclone.sh sleep 10s poweroff " > /root/partclone.sh echo "sh /root/partclone.sh" >> /etc/rc.d/rc.local # 上面就是在進行各項復原的動作! # 2. 再增加一個 PXE 的選單,可以一鍵安裝到底! [root@centos ~]# vim /install/tftpboot/pxelinux.cfg/default ....(前面省略).... LABEL kickstart2 MENU LABEL Boot from PXE Server for AUTO Install CentOS 6.4 One touch kernel ./kernel/centos6.4/vmlinuz append initrd=./kernel/centos6.4/initrd.img ks=nfs:192.168.42.254:/install/nfs_share/kickstart/pcroom_one_touch.ks |
上述的動作中,最重要的當然就是 kickstart 的修改了!因為新的 CentOS 6.x 以後,不知道是加了什麼系統保護的機制,因此 partprobe 這個強迫核心重新抓取分割表的功能遺失了~ 所以,我們在 %post 當中進行過分割,但是卻無法順利的使用該分割來工作。所以,只好加上一些腳本在 Linux 的啟動程序中,讓 kickstart 安裝好 Linux 之後, 立刻自動的去處理第一支腳本程式 (/root/partclone.sh),處理完畢後自我刪除且除掉 /etc/rc.d/rc.local 的腳本指向即可。
在上面的 kickstart 檔案中,鳥哥強迫讓系統安裝完畢後自動關機 (poweroff),如果你有其他特殊的需求,想要在安裝完畢後繼續留在原 Linux 控制系統中工作時, 那可以將 poweroff 與 sleep 10s 刪除,這樣就不會讓你的系統安裝完畢後自動關機囉!接下來打開你的用戶端電腦,用網路開機,選擇最後一個 PXE 選單, 你不用再理它!它會自動安裝、還原之後,自己關機!開心的不得了啊! ^_^
完成上述的功能之後,你的用戶端只要使用網路開機,然後點選 PXE 的最後一個選單,那就可以安心的去睡覺了!反正系統會自動關機嘛! 只是,如果是很急的情況底下,你想要復原全部電腦教室的 60 部主機時,那就有點頭疼了~因為全部的系統同時去抓來自 Server 的 NFS 提供的映像檔時, 太多用戶端了!會吃掉很多頻寬,所以速度快不了~那怎辦?
想像一個情況,我能不能只從 Server 抓一次資料,然後將資料同時廣播給所有用戶,這樣不就能夠節省好多頻寬了嗎?因為只送出一次資料而已嘛! 不像每部主機單獨來的時候,都得要再次的將資料送出。可以達到嗎?嘿嘿!是可以的,可以透過所謂的『 Multicast (群播)』的功能喔!(註5)
所謂的 multicast 主要是透過 switch 的 MAC 學習功能,然後將來自 Server 的一份資料,透過 switch 的 multicast 支援,將這份資料主動複製成多份, 然後丟給需要的用戶端電腦。因為需要 switch 的協助,所以,你的 switch 必須要支援 multicast 的相關能力才行。不過,由於某些 switch/hub 可能沒有支援 multicast, 因此,後來該項功能也可以使用 broadcast (廣播) 傳給所有人,而僅有需要的用戶會抓下來。
會不會很難啊這個功能?其實不會呢!我們可以直接透過 udpcast (註5) 這套軟體來實施即可!這套軟體還剛剛好 DRBL 的 yum 軟體倉儲有提供呢! 所以,直接使用 yum 來安裝即可。安裝好了之後,每部系統都要開啟在 Linux 控制系統中,然後這樣處理即可:
# 1. 先安裝 udpcast 這套軟體,記得,要在 yum 裡頭加入 DRBL 的官網才行,Server/client 都要裝 [root@centos ~]# yum install udpcast # 2. 不論 switch 有沒有支援,我們使用 broadcast 即可!這是在 server 端下達的指令: [root@centos ~]# udp-sender --interface eth1 \ > -f /install/client_img/linux_desktop.img.gz \ > --min-receivers 3 \ > --nokbd --broadcast --fec 8x8/128 stripes=8 redund=8 stripesize=128 Udp-sender 20110710 Using full duplex mode Using mcast address 232.168.42.254 UDP sender for /install/client_img/linux_desktop.img.gz at 192.168.42.254 on eth1 Broadcasting control to 192.168.42.255 New connection from 192.168.42.3 (#0) 00000009 <==有順利接上用戶端,就會顯示! New connection from 192.168.42.4 (#1) 00000009 New connection from 192.168.42.5 (#2) 00000009 # 請注意,預設 udpcast 會用到 9000~9001 兩個 udp 的埠口,所以要確認你的 server 已放行~ # 同時檢查一下用戶端!用戶端也要放行才可以呦! (如果有參考第一章與本章就 OK!) # 3. 在用戶端下達此一指令來接收並且還原系統! [root@centos ~]# udp-receiver --nokbd | \ > gzip -d -c | partclone.ext4 -r -s - -o /dev/vda3 Udp-receiver 20110710 UDP receiver for (stdout) at 192.168.42.3 on eth0 received message, cap=00000009 Connected as #0 to 192.168.42.254 <==真的連接上了呦! Listening to multicast on 232.168.42.254 Partclone v0.2.59 http://partclone.org <==收下檔案立刻解壓縮還原! 開始還原 印象檔 (-) 到 裝置 (/dev/vda3) Calculating bitmap... Please wait... done! 檔案系統: EXTFS Device size: 7.3 GB = 1783808 Blocks Space in use: 3.7 GB = 892278 Blocks Free Space: 3.7 GB = 891530 Blocks 裝置區塊大小: 4096 Byte 經過:00:01:38, 剩餘: 00:00:00, 完成:100.00%, 速率: 2.24GB/min current block: 1783808, total block: 1783808, Complete: 100.00% 全部時間:00:01:38, 平均速率: 2.2GB/min, 100.00% completed! Syncing... OK! 還原 印象檔 (-) 到 裝置 (/dev/vda3) 完成 Cloned successfully. # 因為 udpcast 僅發送檔案而已,所以用戶端接收檔案,還得解壓縮與還原才行! |
你會發現,全部的用戶端系統是同步在進行還原!所有的數據會一模一樣!鳥哥上面僅使用到 3 部系統來示範而已,而且使用較簡便的 Linux desktop 示範而已, 真的使用到整間電腦教室時,那種時間的節省,才教你開心吶!!
或許你有發現一件事,既然我們用了網路 PXE 的選單,這已經是第一層選單,然後,還得要通過第二層的本機開機選單,才能夠進入我們所需要的環境中。 兩層選單ㄟ!好麻煩~有沒有可能直接在 PXE 裡面就作好了直接進入到某個特定作業系統的選單?這樣就可以直接透過第一層 PXE 選單即可,不用轉來轉去啦! 可以做到嗎?是可以的!只是,還得要額外提供一個 chain.c32 的選單轉遞模組才行。
現在我們上面這個示範機裡面總共有:
這三個選單我們將它加入於 PXE 的 default 檔案中,然後直接透過 chain.c32 去轉遞開機管理功能,這樣設定一下,看看能不能生效吧!
# 1. 先將 chain.c32 放置於 tftp 的根目錄中: [root@centos ~]# cp /usr/share/syslinux/chain.c32 /install/tftpboot/ [root@centos ~]# vim /install/tftpboot/pxelinux.cfg/default ....(前面省略).... LABEL local MENU LABEL Boot from local drive MENU DEFAULT localboot 0 LABEL local1 MENU LABEL Boot from local drive to Windows 7 kernel chain.c32 <==使用 chain.c32 來作為開機管理程式 append hd0 2 <==使用第一顆硬碟的第二個分割槽開機! LABEL local2 MENU LABEL Boot from local drive to Linux Desktop kernel chain.c32 append hd0 3 LABEL local3 MENU LABEL Boot from local drive to Linux Management kernel chain.c32 append hd0 1 LABEL network1 ....(後面省略).... |
上述的設定中,比較需要注意的是『 append hd0 2 』這個設定值,這個設定值的意思是,使用第一顆 (從 0 開始編號) 的第 2 個分割槽 (從 1 開始編號, hd0 2 組合起來,就是 Linux 的 /dev/sda2 或本案例中的 /dev/vda2 的意思) 來進行開機。如此一來,你就會多出三個選單,所以再次重新開機之後,你就會看到如下的畫面:
這樣就搞定了單層選單!太棒了吧!呵呵!
既然現在這麼簡單的透過 PXE 可以製作選單,也可以直接透過 kickstart 來進行批次的每部主機個別的還原,那為何還需要安裝第一套 Linux 管理系統呢? 不知道你有沒有過這樣的疑問呢?這是因為要預防萬一啦!多一個 Linux 管理系統有許多的好處,包括這部系統會具有比較大的自由度!要管理系統比較安全, 此外,最大的重點是,你的這部用戶端電腦可以不必在此教室內使用,方便移動機器!
會這麼做的原因是,由於電腦教室所在的環境中,常常會因為某些不明的原因導致跳電,這一跳電,很多『機會』會讓 Server 就此掛點! 而如果單純使用 PXE 而沒有用戶端自己的選單管理時,恐怕到時候某些特定的作業系統會無法進入,這會對上課環境造成些許的困擾啦!
此外,以鳥哥所在的資訊傳播系而言,我們系上在畢業專題展時,常常需要將教室的個人電腦帶往展場去展出。如果沒有選單模式時,比較不能符合專題組的需求 (每個專題組要使用的作業系統都不相同)。所以,在較複雜的環境,而且需要有移機的需求時,安裝一套 Linux 管理系統,對我們後續的處理還是有很多好處的! 因此,如果你也有相關的需求,那鳥哥真的強烈的建議你要有這個 Linux 管理系統的安裝比較好喔!