怎麼開機啟動eth00
A. 如何解決 U盤啟動 Lunix 系統死機問題
故障排除 Linux操作系統死機處理方法總結
Linux 有多種機制來保證發生系統崩潰後,可以獲取有價值的信息用以分析問題。確定是硬體故障,還是應用程序bug 導致的。
Linux 中,有如下幾種方法來獲取各種崩潰時產生的信息。
1.Core mp
Core mp 通常用來調試應用程序錯誤,當某些應用程序運行出現異常崩潰時,可以開啟系統的 core mp 功能,來得到一個程序崩潰時的內存信息,用來分析崩潰原因:
在/etc/profile里加上(或者修改)一條:
ulimit -c 0
運行命令:sysctl -w "kernel.core_name_format=/coremp/%n.core"
該命令意思是指core文件放在/coremp目錄下,文件名是進程名+.core
2.Diskmp
diskmp工具提供了在單機上創建和採集vmcore(kernel mp)的能力,而無須使用網路。當內核本身出現崩潰的時候,當前的內存和CPU狀態以及相關的信息都會被保存到一個支持diskmp的磁碟上的保留分區上。在下一次重新啟動的時候,當系統重新啟動,diskmp的初始化腳本會從保留分區中讀取保存的信息並創建一個vcore文件,然後這個文件被再次存放到/var/crash/目錄下,文件名為127.0.0.1-
如下是一個配置 HP SCSI 設備上啟用 diskmp 的過程,如果不是 HP SCSI 設備(即設備名為 /dev/sdX的形式),則無須執行第三、四兩個步驟。但需要在第一步前先執行命令: modprobe
diskmp
第一步:編輯 /etc/sysconfig/diskmp文件,將一個空白分區的設備名填入後保存退出,例如:
DEVICE=/dev/cciss/c0d0p2
第二步:初使化 mp 設備
#service diskmp initialformat
警告:該分區的所以數據會丟失。
第三步:使用 cciss_mp 模塊替換當前的 cciss 模塊:
在 /etc/modprobe.conf 找到如下行:
alias scsi_hostadapter cciss
修改為:
alias scsi_hostadapter cciss_mp
再增加一行:
options cciss_mp mp_drive=1
註:假設diskmp文件中配置的為 /dev/cciss/c0d[#a]p[#b], 請設置為: options cciss_mp mp_drive=[#a]
第四步:重建 initrd 文件:
#mv /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img.old
#mkinitrd /boot/initrd-`uname -r`.img `uname -r`
第五步:設置 diskmp 服務能夠開機自啟動:
# chkconfig diskmp on
3.Netmp
如果使用紅旗DC4.0 或 3.0 版本系統,是不能支持 diskmp 的,可以利用netmp 來達到輸出vmcore 的目的。但是Netmp要求至少有一個伺服器以及任意數目的客戶端。伺服器用來接收客戶端死機時的信息,客戶端是經常死機的機器。
(一)伺服器配置:
(1).檢驗netmp伺服器是否安裝完畢:
rpm -q netmp-server
如果未安裝,請在光碟 RedFlag/RPMS/ 目錄中找到 netmp-server 打頭的軟體包,執行命令:
rpm -ivh netmp-server-x.x.x.rpm (x為版本號)
進行安裝。
(2).伺服器包安裝後,用命令:
passwd netmp
更改用戶的密碼.
(3).打開服務:
chkconfig netmp-server on
(4).運行伺服器:
service netmp-server start
(二)客戶端配置:
(1).校驗客戶端是否已安裝
rpm -q netmp
如果未安裝,在光碟 RedFlag/RPMS/ 目錄中找到 netm 打頭的軟體包,執行命令:
rpm -ivh netmp-x.x.x.rpm (x為版本號)
安裝.
(2).編輯文件/etc/sysconfig/netmp,添加如下行:
DEV=eth0
NETDUMPADDR=172.16.81.182
NETDUMPMACADDR=00:0C:29:79:F4:E0
172.16.81.182指 netmp 伺服器地址。
(3).運行下面的命令,出現提示符時輸入密碼:
service netmp propagate
(4).打開客戶端:
chkconfig netmp on
(5).運行客戶端:
service netmp start
(6).測試
為了測試netmp的配置是否正確,在netmp客戶機上做下面操作:
cp /usr/share/doc/netmp-xxxxxx/crash.c .
gcc -DKERNEL -DMODULE -I/lib/moles/$(uname -r)/build/include -c crash.c
insmod ./crash.o
這會造成系統崩潰,你會在netmp伺服器的/var/crash/<客戶端IP>/目錄下,看到一個核心轉儲。當客戶機正在轉儲數據到伺服器的時候,你會看到一個名叫「vmcore-incomplete"的文件。當轉儲結束後,該文件會改名成 "vmcore"。"vmcore"文件的大小會變化,可能達到幾個GB.在一個內存是512M的系統上,上面的測試會產生大約510M的vmcore文件。
怎麼判斷網卡是否支持netmp功能?
內核調試工具netmp需要網卡驅動支持netpoll功能。netpoll的目的是讓內核在網路和I/O子系統尚不能完整可用時,依然能發送和接收數據包。主要用於網路控制台(net console)和遠程內核調試(KGDBoE)中。實現netpoll功能,主要是要實現kernel中的poll_controller函數,該函數定義:void (*poll_controller)(struct net_device *dev)。該函數的作用是在缺少設備中斷的情況下,還能對控制器做出響應。幾乎所有的poll_controller函數都定義成如下形式:
void my_poll_controller(struct net_device *dev) {
disable_device_interrupt(dev);
call_interrupt_handler(dev->irq, dev);
enable_device_interrupt(dev);
}
所以,poll_controller只是模擬了來自指定設備的中斷。一個最簡單的判斷一個網卡驅動是否這次支持netpoll功能的方法是安裝內核源代碼,然後在代碼樹 /usr/src/kernel-<version>中搜索HAVE_POLL_CONTROLLER的定義, grep -r "HAVE_POLL_CONTROLLER" /usr/src/linux-<version>/drivers/net示例如下:
# grep -r "HAVE_POLL_CONTROLLER" /usr/src/linux-2.4/drivers/net
/usr/src/linux-2.4/drivers/net/3c59x.c:#ifdef HAVE_POLL_CONTROLLER
/usr/src/linux-2.4/drivers/net/3c59x.c:#ifdef HAVE_POLL_CONTROLLER
/usr/src/linux-2.4/drivers/net/e100/e100_main.c:#ifdef HAVE_POLL_CONTROLLER
/usr/src/linux-2.4/drivers/net/e100/e100_main.c:#ifdef HAVE_POLL_CONTROLLER
/usr/src/linux-2.4/drivers/net/e1000/e1000_main.c:#ifdef HAVE_POLL_CONTROLLER
/usr/src/linux-2.4/drivers/net/e1000/e1000_main.c:#ifdef HAVE_POLL_CONTROLLER
/usr/src/linux-2.4/drivers/net/e1000/e1000_main.c:#ifdef HAVE_POLL_CONTROLLER
/usr/src/linux-2.4/drivers/net/eepro100.c:#ifdef HAVE_POLL_CONTROLLER
/usr/src/linux-2.4/drivers/net/eepro100.c:#ifdef HAVE_POLL_CONTROLLER
/usr/src/linux-2.4/drivers/net/pcnet32.c:#ifdef HAVE_POLL_CONTROLLER
/usr/src/linux-2.4/drivers/net/pcnet32.c:#ifdef HAVE_POLL_CONTROLLER
/usr/src/linux-2.4/drivers/net/tg3.c:#ifdef HAVE_POLL_CONTROLLER
/usr/src/linux-2.4/drivers/net/tg3.c:#ifdef HAVE_POLL_CONTROLLER
/usr/src/linux-2.4/drivers/net/tlan.c:#ifdef HAVE_POLL_CONTROLLER
/usr/src/linux-2.4/drivers/net/tlan.c:#ifdef HAVE_POLL_CONTROLLER
/usr/src/linux-2.4/drivers/net/tulip/tulip_core.c:#ifdef HAVE_POLL_CONTROLLER
/usr/src/linux-2.4/drivers/net/tulip/tulip_core.c:#ifdef HAVE_POLL_CONTROLLER
從輸出可以看到,3c59x, e100, e1000, eepro100, pcnet32, tg3, tlan和tulip都支持netpoll。
如果系統使用了這些網卡,那麼系統應該支持netpoll,那麼就支持netmp。
如果希望進一步確認網卡是否是使用這些網卡,可以查看/etc/moles.conf:
# cat /etc/moles.conf
alias eth1 e100
alias eth0 3c59x
4.SysRq
SysRq組合鍵是一組"魔術組合鍵",只要內核沒有被完全鎖住,鍵盤還能夠使用,不管內核在做什麼事情,使用這些組合鍵可以立即列印出內核的信息。
使用sysrq組合鍵是了解系統目前運行情況的最好方式。如果系統出現掛起的情況或者在診斷一些和內核相關,比較怪異,比較難重現的問題的時候,使用sysrq鍵是一個比較好的方式。
為了安全起見,默認SysRq組合鍵是關閉的。
打開這個功能,運行:
# echo 1 > /proc/sys/kernel/sysrq
關閉這個功能:
# echo 0 > /proc/sys/kernel/sysrq
如果想讓此功能一直生效,在/etc/sysctl.conf裡面設置kernel.sysrq的值為1. 重新啟動以後,此功能將會自動打開。
kernel.sysrq = 1
因為打開sysrq鍵的功能以後,有終端訪問許可權的用戶將會擁有一些特殊的功能。因此,除非是要調試,解決問題,一般情況下,不要打開此功能。如果一定要打開,請確保您的終端訪問的安全性。
如何觸發一個sysrq事件?
有幾種方式可以觸發sysrq事件。在帶有AT鍵盤的一般系統上,在終端上輸入一下組合鍵:
Alt+PrintScreen+[CommandKey]
例如,要讓內核導出內存信息(CommandKey "m"),您應該同時按下Alt 和 Print Screen 鍵,然後按下 m 鍵. 提示: 此組合鍵在Xwindows上是無法使用的。所以,您先要切換到文本虛擬終端下。如果您現在是在圖形界面,可以按Ctrl+Alt+F1切換到虛擬終端。
當我觸發一個sysrq事件的時候,結果保存在什麼地方?
當一個sysrq命令被觸發,內核將會列印信息到內核的環形緩沖並輸出到系統控制台。此信息一般也會通過syslog輸出到/var/log/messages.
有時候,可能系統已經無法響應,syslogd可能無法記錄此信息。在這種情況下,建議您配置一個串口終端來收集這個信息。
那些類型的sysrq事件可以被觸發?
sysrq功能被打開後,有幾種sysrq事件可以被觸發。不同的內核版本可能會有些不同。但有一些是共用的:
* m - 導出關於內存分配的信息
* t - 導出線程狀態信息
* p - 到處當前CPU寄存器信息和標志位的信息
* c - 故意讓系統崩潰(在使用netmp或者diskmp的時候有用)
* s - 立即同步所有掛載的文件系統
* u - 立即重新掛載所有的文件系統為只讀
* b - 立即重新啟動系統
* o - 立即關機(如果機器配置並支持此項功能)
故障分析
雖然我們可以通過上述的幾種方法來獲取應用程序或操作系統崩潰時的各種信息,但是分析這些問題有一定難度。
常見問題
軟體相關
系統平時運行一切正常,自從新實施了一項應用後,頻繁發生崩潰現象,此類問題多數與應用程序Bug有關,不一定在所有相同配置系統中都會產生,但是一旦觸發該Bug,就有可能發生崩潰。
系統平時運行一切正常,自從新實施了一項應用後,頻繁發生崩潰現象,也有一些情況是新增的應用需要做一定的操作系統配置,沒有設置的話,也有可能出現資源利用問題,導致崩潰發生。
系統平時運行一切正常,自從新實施了一項應用後,頻繁發生崩潰現象,也有一些情況是應用的版本與操作系統版本不匹配,應用軟體所需的系統庫文件版本不對應,容易引發應用程序崩潰。
系統平時運行正常,近期沒有任何新增應用,也沒有更改系統配置,卻接連發生多次崩潰現象。此類問題多數是壓力增大,超出了硬體所能承受的負載,耗盡資源,發生崩潰。
系統平時運行正常,近期無新增應用,系統負載也不高,卻發生崩潰現象。不排除操作系統本身的問題,有可能某種操作誘發了一個系統Bug,發生崩潰。
硬體相關
新增內存後,系統經常發生崩潰現象,此類問題有可能是32位機器配置了超過12GB的內存,但沒有使用 hugemem 核心導致,具體原因可參見第一節中的說明。
機器使用期限較長,某個硬體發生故障,也會導致系統崩潰的發生。
新配置的機器經常發生崩潰現象,有可能硬體較新,而驅動程序版本較低,一般可通過升級驅動解決,驅動一般集成在內核當中,常見的辦法是升級內核版本。
B. 內核識別出網卡,/dev沒有eth0,怎麼辦
1、用ifconfig eth0 up命令開啟下網卡。
#ifconfig eth0 up
2、更改eth0配置:
#vi/etc/sysconfig/network-scripts/ifcfg-eth0下顯示:
DEVICE=eth0
ONBOOT=no //開機啟動網卡
BOOTPROTO=static
IPADDR=192.168.1.8 //自己設置有效ip地址
NETMASK=255.255.255.0 //子網掩碼
GATEWAY=192.168.1.1 //有效網關地址
HWADDR=00:0C:29:96:38:F8
注意其中的ONBOOT=no將其改為yes,網卡激活。
3、重啟服務。
#service network restart
重啟後配置生效。
C. Linux系統\Centos沒有網卡eth0配置文件怎麼辦
一、配置文件詳解
在RHEL或者CentOS等Redhat系的Linux系統里,跟網路有關的主要設置文件如下:
/etc/host.conf 配置域名服務客戶端的控制文件
/etc/hosts 完成主機名映射為IP地址的功能
/etc/resolv.conf 域名服務客戶端的配置文件,用於指定域名伺服器的位置
/etc/sysconfig/network 包含了主機最基本的網路信息,用於系統啟動.
/etc/sysconfig/network-script/ 系統啟動時初始化網路的一些信息
/etc/xinetd.conf 定義了由超級進程xinetd啟動的網路服務
/etc/networks 完成域名與網路地址的映射
/etc/protocols 設定了主機使用的協議以及各個協議的協議號
/etc/services 設定主機的不同埠的網路服務
1. /etc/host.conf文件的默認信息如下:
multi on #允許主機擁有多個IP地址
order hosts,bind #主機名解析順序,即本地解析,DNS域名解析的順序
這個文件一般不需要我們修改,默認的解析順序是本地解析,DNS伺服器解析,也就是說在本系統里對於一個主機名首先進行本地解析,如果本地解析沒有,然後進行DNS伺服器解析。
2. /etc/hosts文件默認的內容大概如下:
127.0.0.1 butbueatiful localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
可見,默認的情況是本機ip和本機一些主機名的對應關系,第一行是ipv4信息,第二行是ipv6信息,如果用不上ipv6本機解析,一般把該行注釋掉。
第一行的解析效果是,butbueatiful localhost.localdomain localhost都會被解析成127.0.0.1,我們可以用ping試試。
[root@butbueatiful ~]# ping -c 3 butbueatiful
PING butbueatiful (127.0.0.1) 56(84) bytes of data.
64 bytes from butbueatiful (127.0.0.1): icmp_seq=1 ttl=64 time=0.061 ms
64 bytes from butbueatiful (127.0.0.1): icmp_seq=2 ttl=64 time=0.052 ms
64 bytes from butbueatiful (127.0.0.1): icmp_seq=3 ttl=64 time=0.051 ms
--- butbueatiful ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.051/0.054/0.061/0.009 ms
[root@butbueatiful ~]# ping -c 3 localhost.localdomain
PING butbueatiful (127.0.0.1) 56(84) bytes of data.
64 bytes from butbueatiful (127.0.0.1): icmp_seq=1 ttl=64 time=0.055 ms
64 bytes from butbueatiful (127.0.0.1): icmp_seq=2 ttl=64 time=0.035 ms
64 bytes from butbueatiful (127.0.0.1): icmp_seq=3 ttl=64 time=0.050 ms
--- butbueatiful ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.035/0.046/0.055/0.011 ms
看到上面的結果,你可能會問為什麼ping localhost.localdomain的時候,下面顯示的是卻是butbueatiful,這是因為第一個主機名butbueatiful後面的那些主機名其實都是butbueatiful的主機別名。
如果我們要追加新的本地解析,比如我們希望在我們的機器里把yyyy.com和www.yyyy.com都解析成192.168.0.100,那麼就追加如下一句即可:
192.168.0.100 yyyy.com www.yyyy.com
同樣,在這里,www.yyyy.com是yyyy.com的主機別名。
如果你仔細一想,會發現,其實這個文件是很危險的,如果有人惡意修改了你這個文件,比如把淘寶的網站域名解析到了他的釣魚網站,那你就要中招了。
3. /etc/resolv.conf, 指定域名解析的DNS伺服器IP等信息, 配置參數一般接觸到的有4個:
nameserver 指定DNS伺服器的IP地址
domain 定義本地域名信息
search 定義域名的搜索列表
sortlist 對gethostbyname返回的地址進行排序
但是最常用的配置參數是nameserver,其他的可以不設置,這個參數指定了DNS伺服器的IP地址,如果設置不正確,就無法進行正常的域名解析。
一般來說,推薦設置2個DNS伺服器,比如我們用google的免費DNS伺服器,那麼該文件的設置內容如下:
nameserver 8.8.8.8
nameserver 8.8.4.4
同樣,這個文件也是危險的,如果被人惡意改成了他自己的DNS伺服器,他就可以為所欲為的控制你通過域名訪問的每個目的地了,這就是常說的DNS劫持。
4. /etc/sysconfig/network, 典型的配置如下:
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=butbueatiful
GATEWAY=192.168.0.1
參數簡要解釋:
NETWORK 設置網路是否有效,yes有效,no無效
NETWORKING_IPV6 設置ipv6網路是否有效,yes有效,no無效
HOSTNAME 設置伺服器的主機名,最好和/etc/hosts里設置一樣,否則在使用一些程序的時候會有問題。
GATEWAY 指定默認網關IP
5. ifcfg-ethX, 設置對應網口的IP等信息, 比如第一個網口, 那麼就是/etc/sysconfig/network-scripts/ifcfg-eth0,配置例子:
DEVICE="eth0"
BOOTPROTO="static"
BROADCAST="192.168.0.255"
HWADDR="00:16:36:1B:BB:74"
IPADDR="192.168.0.100"
NETMASK="255.255.255.0"
ONBOOT="yes"
參數簡要解釋:
DEVICE 設備名,不要自己亂改,和文件ifcfg-ethX里的ethX要一致
BROADCAST 廣播地址
HWADDR 物理地址,這個你不要亂改
IPADDR IP地址
NETMASK 子網掩碼
ONBOOT 啟動或者重啟網路時,是否啟動該設備,yes是啟動,no是不啟動
BOOTPROTO 開機協議,最常見的三個參數如下:
static(靜態IP)
none(不指定,設置固定ip的情況,這個也行,但是如果要設定多網口綁定bond的時候,必須設成none)
dhcp(動態獲得IP相關信息)
6. route-ethX,比如第一個網口eth0的路由信息,那麼就是/etc/sysconfig/network-scripts/route-eth0:
比如我們現在有這樣一個需求,通過eth0去網路172.17.27.0/24不走默認路由,需要走192.168.0.254,那麼我們第一反應,肯定是用route命令追加路由信息:
[root@butbueatiful ~]# route add -net 172.17.27.0 netmask 255.255.255.0 gw 192.168.0.254 dev eth0
可是,你沒意識到的是,這樣只是動態追加的而已,重啟網路後,路由信息就消失了,所以需要設置靜態路由,這時候就要設置/etc/sysconfig/network-scripts/route-eth0文件了,如果沒有該文件,你就新建一個:
[root@butbueatiful ~]# vi /etc/sysconfig/network-scripts/route-eth0
#追加
172.17.27.0/24via 192.168.0.254
這下即使重啟網路,重啟系統,該路由也會自動載入,當然了,如果你沒有這樣的需要,那麼這個文件就沒必要創建和配置了。
D. Linux系統\Centos沒有網卡eth0配置文件怎麼辦
在CentOS系統安裝過程中,有時會遇到沒有ifcfg-eth0配置文件的情況。這通常是因為CentOS6.5開始採用NetworkManager來管理網路,而不是傳統的network服務。NetworkManager默認不會自動啟動eth0網卡,而是在安裝過程中提供了一個圖形界面,讓用戶可以手動配置網路設置。
若不使用NetworkManager,可以通過編輯ifcfg-eth0配置文件來手動設置網路,例如,將ONBOOT設置為yes。具體操作步驟如下:
首先,關閉NetworkManager服務:
$ service NetworkManager stop
然後,關閉NetworkManager開機啟動:
chkconfig NetworkManager off
接著,創建ifcfg-eth0配置文件,設置相應的網路參數,如:
DEVICE=eth0
BOOTPROTO=static
IPADDR=146.175.139.13
NETMASK=255.255.255.0
GATEWAY=146.175.139.255
HWADDR=00:25:90:81:5e:64
NM_CONTROLLED=no
ONBOOT=yes
TYPE=Ethernet
IPV6INIT=no
確保文件內容根據實際情況進行調整。
最後,重啟network服務:
chkconfig network on
service network start
這樣,就可以使用傳統的network服務來管理網路,並確保eth0網卡在每次啟動時自動連接。