通過COM口管理Linux伺服器

來源:互聯網
上載者:User

  本文簡要地介紹了如何通過常見的COM口進行Linux伺服器的控制台的擴充,具有實用性和簡易性,不受伺服器網路等條件的限制,可以方便地管理實際生產環境中的Linux伺服器。

  說到管理Linux伺服器,大家會有很多種不同的辦法:鍵盤+顯示器、通過網路登陸、基於WEB的工具、X系統下的圖形工具等等,這些方法用在普通的伺服器或者自己 的PC伺服器上是沒有任何問題的,但是要管理一台24X7模式的伺服器,確保在任何情況下都能直接快捷地管理到伺服器,就不是那麼容易了。

  對比以上說到的幾種方式:

X系統下的圖形工具。這當然是介面很友好的方式了,而且X系統也可以通過網路擴充到遠程,但網路畢竟不是這麼可靠,如果伺服器的網路癱瘓了,你正好需要遠程解決網路的問題,那該怎麼做?

基於WEB的工具。這種方式的介面也是相當友好,如webadmin,但是由於安全方面的問題,這些工具是不會安裝在真正重要的伺服器上的,另外這種方式也受限於網路;

通過網路登陸。這是常用的辦法,一般伺服器會對信賴的遠端站台開放SSH服務,以便維護人員可以遠程登陸進行日常維護,這是很安全的,但很不幸它還是基於網路的,當然也受限於網路;

鍵盤+顯示器。這是最保險的辦法,筆者都建議使用這種最保險的辦法,但是很不幸這也是有缺陷的,就是有很多伺服器都不配備顯示器和鍵盤,就算有,也只是安裝系統時使用,一旦投入生產運行就不再使用顯示器和鍵盤了。

  其實對於UNIX/Linux系統的伺服器,可以通過COM口即串列口來擴充系統的控制台,作為另外的途徑管理伺服器。

  CONSOLE,即控制台,是系統輸出管理資訊的字元輸出裝置,這些管理資訊是由核心產生,比如系統日誌、警示資訊等。Linux下預設的控制台就是鍵盤和顯示器,而一些老式的SUN、HP、IBM伺服器則使用串列口接Text Terminal[1](字元終端,如著名的DEC的VT100)作為控制台,這也是這次將要介紹的方式。

  字元終端在大型主機時代用得比較多,一個大型主機通常聯結許多終端,每個終端沒有處理能力,只是簡單地用鍵盤輸入和從螢幕輸出結果,處理過程都是由大型主機完成。字元終端螢幕多為黑白字元型的,不具備圖形顯示功能。這裡介紹的Text Terminal和大型主機的終端是一樣的,只不過市場上早就沒有新的終端裝置了,現在都是通過應用程式類比一個終端,叫虛擬終端,如WINDOWS的超級終端就是常用的一個虛擬終端程式,在管理工作站上用開啟超級終端(使用正確的速率),就相當於一個終端了。

  這種通過串列口實行CONSOLE功能是廣泛使用的,如CISCO的路由器,都是通過這種方式進行裝置的管理,小小的一條CONSOLE線就相當於一台PC的顯示器加鍵盤,這無疑為路由器省下了許多不必要的配件,而事實上部分CISCO的裝置就是一台PC,如思科PIX515防火牆,只要你插上一塊PCI的顯卡到PCI槽,接上顯示器,按下PIX的開關,你就可以看到一台BX主板、奔騰II代350MHZ處理器、128M記憶體電腦的啟動資訊,和一台普通電腦啟動是沒有任何區別的。當PIX完成自檢後,控制台就轉到CONSOLE口上了,而那個RJ45介面的CONSOLE口,其實就是一個COM口,只是介面形式不是9針D形口而己。

  現在可以明確我們需要做的工作了:使用管理工作站的虛擬終端程式類比一個字元終端裝置,通過COM口對COM口的形式將Linux的CONSOLE重新導向到該虛擬終端,以實現從虛擬終端控制Linux伺服器。步驟如下:

  1、製作交叉線

  兩台電腦要用COM口互聯起來需要一種"NULL MODEM CABLE","NULL MODEM CABLE"直譯過來大致是"交叉MODEM線",和網線的交叉線意思相近,這是用來"背靠背"聯結兩個DTE裝置的,兩頭都是9針D型母接頭,分別插入管理工作站和伺服器的COM口中,為了方便標識建議都接第一個COM口。這種線可以自己製作,也可以去電腦城買,最方便的是有CISCO的標準CONSOLE線加RJ45轉9針D型母接頭的轉接頭(組件號74-0495-01),可以直接使用。自己製作可以參考以下的線序:

縮寫 引腳定義 方向 引腳定義
RxD Receive Data 2 <---- 3 TxD Transmit Data
TxD Transmit Data 3 ----> 2 RxD Receive Data
+--> 6 DSR Data Set Ready
DTR Data Terminal Ready 4 --+--> 1 DCD Carrier Detect
GND Signal Ground 5 <----> 5 GND Signal Ground
DCD Carrier Detect 1 <--+
DSR Data Set Ready 6 <--+-- 4 DTR Data Terminal Ready
RTS Request To Send 7 ----> 8 CTS Clear To Send
CTS Clear To Send 8 <---- 7 RTS Request To Send
RI Ring Indicator 9 (not used)

  製作時需要把Txd與Rxd、CTS與RTS、GND與GND、DTR與DSR&DCD交叉相聯,DSR&DCD表示這兩個引腳串聯在一起作為一個引腳訊號。更多的詳細介紹參見Serial-HOWTO[3]。

  2、測試聯通性

  管理工作站和伺服器接上交叉線後,可以簡單地來測試一下這條線是否起作用。在管理工作站上用超級終端建立一個聯結,速率9600,8資料位元,1停止位,無同位位元,無硬體"Flow control";在伺服器上echo '1'>/dev/ttyS0(需要ROOT許可權),在管理工作站超級終端裡觀察是否能收到數字1,如果能收到就表明聯結無問題。如果不能收到則要在伺服器上檢查一下各訊號引腳是否正確,使用命令"statserial /dev/ttyS0"可以查看當前串列口的狀態(在CABLE對端不接管理工作站時或者線序錯誤時DSR狀態為0),聯結狀態如下:

Device: /dev/ttyS0
Signal Name Pin(25) Pin(9) Direction (computer) Status Full Name
----- --- --- --------- ------ -----
FG 1 - - - Frame Ground
TxD 2 3 out - Transmit Data
RxD 3 2 in - Receive Data
RTS 4 7 out 1 Request To Send
CTS 5 8 in 0 Clear To Send
DSR 6 6 in 1 Data Set Ready
GND 7 5 - - Signal Ground
DCD 8 1 in 0 Data Carrier Detect
DTR 20 4 out 1 Data Terminal Ready
RI 22 9 in 0 Ring Indicator

  3、從POST開始

  這是很多電腦都無法實現的功能,這主要取決於主板BIOS是否支援。POST(Power On Self Test)即我們通常說的自檢,我們可以看到系統的基本資料及檢查過程,當然也有可能有出錯的提示資訊及相應的處理提示,有一些型號的伺服器主板(如INTEL原裝NL440BX)可以將POST重新導向到COM口,這樣我們可以接一個終端在COM口上便能看到POST過程,當然也可以通過終端操作,完全不需要鍵盤和顯示器。可惜一般情況下我們的主板並不支援這項功能,但是沒有關係,我們可以先設定好BIOS參數(Halt On 設定為None)忽略無關緊要的出錯資訊,讓每次系統自檢都順利通過,這樣系統便能順利進入硬碟啟動了。

  4、重新導向GRUB

  也許你有幾個系統(如FreeBSD),或者有新的核心需要進行測試,你可能希望通過COM口來選擇系統,將GRUB重新導向到COM口也是可能的。我們在GRUB的manual頁[4]可以看到其支援seriral終端,在GRUB設定檔第一條Title的前面加入兩行如下:

serial --unit=0 --speed=38400
terminal serial console

  我們便能從接在COM口上的終端中看到GRUB的提示資訊,通過上、下鍵選擇光帶就可以正確地進入各個系統了。LILO的用法類似,請參閱LILO的手冊頁。

  5、重新導向CONSOLE

  為了能夠控制Linux伺服器啟動過程,我們需要傳遞一些參數到Linux核心中,從serial-console[2]中我們可以看到只需要將console=ttyS0,9600傳遞到核心中就可以實現CONSOLE重新導向到串口。當然9600的速度太慢,我們可以使用38400的速率,這樣顯示的速度就和啟動時顯示器上顯示的速度差不多了。我的伺服器使用GRUB,所以我的/boot/grub/menu.lst檔案中kernel語句如下:

kernel /vmlinuz-2.4.20-8 ro root=LABEL=/ console=tty0 console=ttyS0,38400

  現在重新啟動Linux伺服器,開啟超級終端,不出意外就能看到平時在顯示器上才看得到的啟動資訊,當然你也可以按"i"鍵進入互動啟動模式,當然在不小心踢掉電源後也能輕鬆輸入"Y"進行檔案系統檢測,是不是很好用?不過啟動完了系統後怎麼就停在那裡不動了?好像Linux很笨啊,它居然不知道我想從這裡登入進系統?不要怪Linux,我們馬上就來解釋為什麼會這樣以及解決辦法。

  6、開啟ttyS0登陸

  其實Linux啟動時的資訊都是由KERNEL顯示的,預設情況下啟動完畢了後init再運行mingetty來提供6個虛擬終端來登陸系統,這可以在/etc/inittab檔案中清楚地看到。其實login和核心是沒有關係的,所以如果只是在核心中加入參數使其能從COM口互動式地操作並不代表能從超級終端登入系統,我們需要另外運行一個提供從串口登入能力的程式,這個程式就是agetty,它是屬於util-Linux軟體包中的一員,大家可以參考其man手冊頁以獲得更多的資訊,這些資訊在其他的文檔[1][3]中也都提及到了。我在伺服器的/etc/inittab檔案中加了一行如下:

S0:2345:respawn:/sbin/agetty -L 38400 ttyS0

  這樣我們就能從超級終端登入系統了,很好用吧。

  7、一些經驗

  使用ttyS0登入還有一些小的竅門和經驗,以下是我的經驗:

  COM口的傳輸距離有限制,普通的線纜只有15米的有效距離,建議使用5類雙絞線,可以擴充到50米仍能正常操作;

  大家一般會想使用root從ttyS0登入,但是預設的這是不行的,我們需要把該終端加入到檔案/etc/securetty中,就是說終端ttyS0是安全的終端,可以使用root登入;

  如果伺服器長時間開著的話,最好每次都使用exit退出該終端,因為如果不退出來的話,下次再登陸可能會出現輸入亂碼導致終端不可用等問題,而在登入提示符下輸入亂碼則無關緊要;

  如果你是通過這種方法管理一台實際24X7開著的伺服器的話,你可能會有時發現在終端中按斷行符號沒有任何反映,有一種可能性就是系統在停電後再開機出現不能啟動NFS和sendmail之類的服務,就這樣卡在那裡死結住了,這在電源不穩定的情況下尤其多見,所以一定要給你的Linux伺服器接上UPS不斷電供應系統,或者在系統BIOS裡設定斷電後不再啟動系統(如果它不是太重要的話),在這種情況下只有按鍵盤重新啟動或者直接斷電再重新啟動一次,檢查啟動過程到底發生了什麼事情,一般只需要檢查一遍硬碟就沒有問題了;

  如果你的ttyS0出現亂碼沒有辦法使用的話,可以嘗試著從網路登陸,把/etc/inittab中ttyS0那一行注釋,使用"init q"命令停止通過inittab啟動的agetty,然後再重新取消/etc/inittab中的注釋,再次"init q"命令啟動agetty,不出意外就能恢複正常了。

  結束語

  到此我們就方便地管理沒有顯示器和鍵盤的Linux伺服器了,實際生產中可以使用終端伺服器代替管理工作站來管理非常多的伺服器。簡單地說終端伺服器有許多COM口,可以同時串連多個伺服器(或者網路裝置如思科路由器)的CONSOLE,以實現集中式管理。Linux也可以作為優秀的終端伺服器,我們將另作介紹。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.