三、其它故障的一般解决方案
如果是Linux的引导程序出现问题,那么也可以通过光盘引导的方式进入Linux修复模式,然后修改对应的引导程序或者重新安装引导程序。
如果Linux内核崩溃或者丢失,同样可以先进入Linux rescue下,然后加载root分区,最后重新编译内核。
如果出现了最坏的情况,文件系统破坏严重,同时内核也崩溃,那么此时重新安装系统反而比较容易,在这种情况下可以先将Linux上有用的数据和文件备份转移到其它设备,然后对整个文件系统进行全新安装。
在这里我们不可能对每个出现的问题,都给出详细的解决方案,问题都是千差万别的,每个问题的处理都不尽相同,本书要传授给大家的是当Linux系统出现问题后,解决问题的一般思路和通用策略,熟练掌握了这些技巧,处理任何Linux问题都能游刃有余。
四、 Linux下常见网络故障处理
Linux网络服务功能非常强大,在Linux上可以部署Web Server、DNS Server、Mail Server、Db server、Ftp server等等,但是也由此产生了很多网络问题,据统计,在Linux系统下产生的故障,有60%来自网络方面,40%来自系统本身,可见熟练解决Linux下故障,对于熟练掌握Linux有着巨大的帮助。
解决Linux网络问题的顺序应该是首先从Linux操作系统自身的底层网络开始,然后逐步有点及面的向外扩展,网络问题的一般解决流程为:
? 网络硬件传输问题,可以通过检查网线是否正常,网卡、集线器、路由器、交换机等是否正常来确认是否由硬件问题造成网络故障。
? 检查网卡是否能正常工作,可以从网卡是否正常加载、网卡IP设置是否正确、系统路由是否设置正确3个方面进行检查确认。
? 检查DNS是否设定正确,可以从Linux的DNS客户端配置文件/etc/resolv.conf,本地主机文件/etc/hosts进行检查确认。
? 服务是否正常打开,可以通过telnet或者netstat命令的方式检测服务是否开启。
? 访问权限是否打开,可以从本机iptables防火墙、Linux内核强制访问控制策略seLinux两方面入手,进行检查确认。
? 局域网主机之间联机是否正常; 可以通过ping自身IP,ping局域网其它主机IP,ping网关地址来确认局域网是否连接正常。
接下来,我们就针对上面给出的解决网络问题的一般思路,详细展开讲述。
1. 检查网络硬件传输问题
检查网络故障,首先要排除的是网络硬件设备是否存在问题,比如网线是否正常,网卡、集线器、路由器、交换机等是否正常,这些是网络正常运行的基本条件,如果发现某些设备出现故障,只需更换硬件即可解决问题。
2.检查网卡是否能正常工作
(1)检查网卡是否正常加载
通过lsmod、ifconfig命令可以判断网卡是否正常加载,如果通过ifconfig可以显示网络接口(eth0、eth1等等)的配置信息,表示系统已经认到了网卡驱动程序,检测到了网络设备,网卡加载正常。
(2)检查网卡IP设置是否正确
接下来就要检查网卡的软件设定,比如IP是否配置,配置是否正确,确保IP的配置和局域网其它计算机配置没有冲突。
(3)检查系统路由表信息是否正确
最后就是要检查系统的路由表设置是否正确,如果一个Linux系统有两块网卡,同时两块网卡设置的IP不在一个网段,要特别注意系统路由表的设置。
例如下面这个系统的网络接口信息:
[root@webserver ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:12:3F:FF:65:24
inet addr:10.10.1.239 Bcast:10.10.1.255 Mask:255.255.255.0
inet6 addr: fe80::212:3fff:feff:6524/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:20632289 errors:0 dropped:0 overruns:0 frame:0
TX packets:20223702 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:793608426 (756.8 MiB) TX bytes:2567481473 (2.3 GiB)
Interrupt:201
eth1 Link encap:Ethernet HWaddr 00:12:3F:FF:65:25
inet addr:192.168.200.30 Bcast:192.168.200.255 Mask:255.255.255.0
inet6 addr: fe80::212:3fff:feff:6525/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:15496910 errors:0 dropped:0 overruns:0 frame:0
TX packets:8028739 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1048038084 (999.4 MiB) TX bytes:3195989266 (2.9 GiB)
Interrupt:209
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:508961 errors:0 dropped:0 overruns:0 frame:0
TX packets:508961 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:574086961 (547.4 MiB) TX bytes:574086961 (547.4 MiB)
从上面输出可知,本系统有两块网卡,分别配置不同网段的IP地址,假定eth0通过映射的方式对外提供ssh连接服务,而eth1仅供局域网主机之间共享数据使用。
现在的问题是,外界无法ssh远程登录到此系统,而网卡加载没有问题,网卡IP设置也没问题,接下来看看此系统的路由设置:
[root@webserver ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.10.1.0 * 255.255.255.0 U 0 0 0 eth0
192.168.200.0 * 255.255.255.0 U 0 0 0 eth1
default 192.168.200.1 0.0.0.0 UG 0 0 0 eth1
到这里,问题已经基本排查出来了:从route的输出可知,Linux的缺省路由是192.168.200.1,而192.168.200段的IP仅仅供局域网主机之间共享数据使用,没有连接出去的访问权限,因而,外界无法连接到Linux系统,也是理所当然的事情了。
定位了问题,解决方法很简单,删除192段的缺省路由,然后增加10段的缺省路由即可:
[root@webserver ~]# route delete default
[root@webserver ~]#route add default gw 10.10.1.254
此时外界就可以通过ssh服务远程连接到Linux系统了。