网娱平台Linux类操作系统疑难排除
Distributi
|
1#
Distributi 发表于 2008-01-01 12:47
网娱平台Linux类操作系统疑难排除
作者:交叉的平行线
系统安装过程中的疑难排除 系统安装中的疑难排除主要是解决Linux系统无法安装、以及在系统安装过程中的出错的排除。主要包括主板芯片的兼容性、对外接设备的驱动的支持等。 主板芯片兼容性问题 对主板芯片的兼容性主要是指Linux操作系统能否正确的识别主板上所集成的芯片,并为之安装正确的驱动程序。兼容性可以大致的分层两个层次,一个是完全不支持,就是Linux操作系统根本无法识别该芯片,或者说该主板上的芯片根本没有Linux操作系统下的驱动程序;第二种情况是,操作系统可以识别出该芯片,但是需要额外的内核补丁,或者有驱动,但是驱动只是处于测试阶段,稳定性和性能都得不到保障。 针对主板芯片兼容性的问题,解决办法主要有如下几种: 第一、 选择比较知名的厂商生产的主板,尽量选择Intel系列芯片组。总体而言,Intel在其芯片的驱动开发方面要比VIA、SIS等其他主板芯片组提供商要强得多,一般的,Intel芯片组在Linux下的驱动程序从稳定性和性能方面来讲,都要比其他厂商强很多。 第二、 选择版本比较高的Linux操作系统。高版本的Linux操作系统的安装光盘在光盘引导启动的内核压缩镜像中,附带更多的对新的芯片组的驱动,因此能更方便的支持新的芯片组和其他硬件设备。但是,要注意的是,Linux下的驱动开发进度一般比较慢,较新版本的Linux往往在额外增加系统自身并不附带的驱动的时候,会比较难找到针对该版本的驱动程序。 外接设备驱动支持问题 这里的外接设备主要是指网卡,阵列卡或者SCSI卡的问题,将单独讨论。 针对网卡的驱动主要是对网卡核心芯片的支持。要说明的事,并不是所有的网卡都有Linux下的驱动程序。有很多比较差的芯片制造商,在开发芯片的时候,并未希望该芯片在Linux下使用,因此只专门针对Windows系列操作系统做驱动开发,则你将无法在Linux操作系统下使用该设备,除非你愿意自己开发驱动程序。还有一些芯片,由于太旧,而无法使用,典型的如TP-LINK TG-3220所使用的TMI TAMARACK TC9020芯片,厂商已经倒闭,不再有新的驱动支持了。 一般的比较通用的网卡芯片,如realtek 8139/8169、Intel系列的芯片组,以及3COM系列的芯片组等,都能被很好的直接支持,不需要额外安装驱动,因为驱动已经附随着操作系统的发行版本自带了。发行版本自带的驱动程序一般是一个类似 eepro100.o 这样的以.o结束的内核模块。这些自带的驱动位于/lib/modules/内核版本号/kernel/drivers 目录下。当你需要安装一个设备是,请根据设备类型在该目录下查找系统是否已经附带了该设备的驱动,如果没有,那么就需要下载该设备在Linux下的驱动进行安装。 一般的驱动安装过程分三个步骤,一个是配置内核版本,编译源程序,生成内核模块;第二个步骤是insmod插入生成的内核模块,第三个步骤是将内核模块拷贝到系统默认的内核模块存放目录下,并编辑/etc/modules.conf文件,让系统启动时,能自动插入模块。我们以在Redhat 9.0 下安装BCM 5700系列芯片组的千兆网卡为例子,为大家具体描述这一过程。 第一步:从驱动光盘或者从网络上获得驱动程序包。譬如bcm5700-6.0.2.tar.gz,将之通过sftp协议拷贝到Linux主机上(可以先插一块8139网卡)。解开驱动包 tar zxf bcm5700-6.0.2.tar.gz 进入源代码目录 cd src make 将生成bcm5700.o 文件 第二步:插入内核模块 insmod ./bcm5700.o 第三步:将内核模块拷贝到/lib/modules/2.4.24/kernel/drivers目录下 cp ./bcm5700.o /lib/modules/2.4.24/kernel/drivers 编辑/etc/modules.conf文件,使得系统可以在启动时插入内核 vi /etc/modules.conf 增加一行 alias eth0 bcm5700 重新启动机器,则在启动kudzu服务的时候,会检查到网卡,并可以进行配置。 其他的外接设备的驱动安装过程,可以参考网卡部分的安装来完成。 RAID卡和SCSI卡以及SATA驱动的安装 存储类设备的安装有些特殊,因此,我们将之从外接设备驱动安装中单独分离了出来。存储设备的安装总体上来讲分成两类:第一类,系统从IDE硬盘引导,而SCSI设备(RAID卡、SATA设备实际上来讲都是模拟或者说是类似SCSI设备的,我们将这类设备统称为SCSI设备,下同)只是在系统安装完毕后再进行安装。第二类是指引导要直接安装在SCSI设备上,驱动需要在安装系统的时候就安装,否则安装程序将无法找到有效的存储设备来安装系统。 系统从IDE引导情况下的SCSI设备驱动安装 即系统从IDE引导,而SCSI设备只是作为一个普通的外接设备来安装驱动程序。这类情况下安装驱动程序可以参考上一个章节中的关于普通外界设备的驱动安装方法。只是要注意的是,如果SCSI设备在没有安装好驱动程序,就已经被连接到系统上,则很容易导致系统崩溃。因为系统识别到SCSI设备后,又无法正确驱动,则很容易造成内核混乱。所以,我们建议,在安装驱动之前,请先拔下SCSI卡,如果是主板集成的SCSI设备,则请先从主板BIOS设置中关闭SCSI设备。在将驱动安装完毕后,关闭计算机,插上SCSI设备,或者从BIOS中启用SCSI设备,再重新启动计算机。 这类情况下的SCSI设备驱动安装请参考普通外接设备的驱动安装部分,我们在这里将不在赘述。 系统安装在SCSI设备上的驱动安装 如果系统需要安装在SCSI设备上,譬如安装在SCSI硬盘或者安装在IDE RAID卡上,或者安装在SATA硬盘上,则需要采用比较特殊的方式来安装SCSI设备的驱动程序。当然,比较通用的SCSI设备,是不需要考虑这一步骤的,譬如Adptec 的 aic7xxx系列SCSI接口卡,或者Intel 的 ata_piix 系列的SATA接口芯片组等一般的Linux发行版本都自带了这些驱动,在操作系统安装光盘引导时所解压缩的内核镜像中已经可以识别并支持这些SCSI设备。如果是一些并不是很通用的芯片,则需要手动的安装驱动。我们以VIA 的VT8237/6420系列SATA RAID控制芯片的驱动安装来为大家具体的秒素这一过程。 第一步:获取驱动程序包,譬如从驱动光盘,或者从网络上获得。目前VIA官方网站上为RedHat 系统提供的驱动包为 via_raid_linux_v100_20040412.zip。在Windows上通过Winrar解开这个包,并通过sftp协议将安装包中的Driver目录拷贝到一台已经安装了Redhat9.0的服务器上。 第二步:生成驱动磁盘镜像.img文件。 chmod +x dd.sh ./dd.sh 这样就会在目录driverdisk下生成一个viamraid.img的镜像文件。要注意的是,目前VIA还只发布了对Redhat 9.0的驱动支持,RHAS上是无法安装该驱动的。另外,这个过程只能在一台安装了Redhat 9.0的Linux机器上运行。如果在别的版本的操作系统上运行,则安装程序无法从生成的.img文件中读取驱动信息。如果你已有的Linux服务器并不是Redhat 9.0的版本,则你可以直接使用Driver 目录中Driverdisk子目录下已经提供的viamraid.img文件。 第三步:将生成的img文件写入磁盘。 在软驱中插入一张空白磁盘,关闭写保护功能。 dd if=driverdisk/viamraid.img of=/dev/fd0 如果你根本没有已有的Linux操作系统,则你可以用Windows下的写磁盘镜像软件将Driverdisk子目录下已经提供的viamraid.img文件写入磁盘。 第四步:用Redhat 9.0安装光盘引导,在出现boot:提示的时候,输入linux dd,或者不输入,让系统自己提示插入驱动磁盘。如果是输入linux dd引导安装程序,则系统会提示,Do you have a dirver disk? 选择Yes。然后选择/dev/fd0,系统将会将驱动信息读取到内核。则安装程序将可以正常的找到SATA硬盘,安装可以按照平常的步骤进行。 需要说明的是,VIA目前提供的VT8237系列的芯片驱动,在Linux下性能奇差。这是驱动程序设计造成的,无法通过设置来进行性能提升。因此,我们不建议客户使用这种主板安装Linux服务器。 系统配置过程中的疑难排除 系统配置过程中的疑难排除主要包括网娱平台所依赖服务的配置以及系统常用的几个配置文件的配置等。 /etc/fstab的配置 /etc/fstab文件是文件系统自动挂载的配置文件,Linux操作系统在启动的过程中根据fstab和mtab这两个文件来进行文件系统的自动挂载。在平时的使用过程中,fstab比较常见。 /etc/fstab的文件结构如下所示: LABEL=/ / ext3 defaults 1 1 none /dev/pts devpts gid=5,mode=620 0 0 LABEL=/home/download /home/download ext3 defaults 1 2 LABEL=/home/menu /home/menu ext3 defaults 1 2 LABEL=/home/mp3 /home/mp3 ext3 defaults 1 2 none /proc proc defaults 0 0 none /dev/shm tmpfs defaults 0 0 /dev/hda8 swap swap defaults 0 0 /dev/hdc1 /game ext3 defaults 1 2 /dev/hdd1 /game2 ext3 defaults 1 2 每一行表示一个挂载点的挂载。格式分别为 设备名 挂载点 文件系统格式 选项 备份 检查 一般需要注意的是设备名和挂载点的对应关系。如果挂载点并不存在,则需要手动建立挂载点。建立挂载点的方式很简单,直接使用目录建立命令 mkdir /test 这样就可以建立一个名为/test的挂载点。 另外一个需要注意的问题是,如果fstab中所标名的某一个挂载出现问题,则系统将无法正常启动,一般会提示输入root密码进入文件系统修复模式或者按ctrl+D重新启动。这个时候,一般只需要输入root密码,然后编辑fatab文件,将出现问题的挂载项目前面加一个“#”注释掉就可以了。 /etc/modules.conf配置文件 /etc/modules.conf配置文件是系统自动插入内核模块的配置文件。如果某些外围设备的驱动被设计为动态模块类型,并未固定的包含在内核中,则需要手动的使用insmod命令插入内核模块以驱动这些设备。如果需要系统在启动的时候自动的插入动态内核模块,并设置模块的参数,那么,就需要在该文件中进行相应的配置。 /etc/modules.conf文件结构如下 alias eth0 e1000 alias scsi_hostadapter ata_piix alias usb-controller usb-uhci alias sound-slot-0 i810_audio alias usb-controller1 ehci-hcd /etc/modules.conf文件中的每一行表示一个内核模块的插入或者是模块的参数设置,我们在这里只讨论配置内核动态模块自动插入的方法。以第一行为例:alias eth0 表示,这个模块插入内核后,对应的设备别名为eth0,e1000表示插入系统默认的内核模块存放目录下的e1000.o这个内核模块文件。 /etc/sysconfig/network-script/目录与/etc/sysconfig/networking目录 /etc/sysconfig/network-script/目录与/etc/sysconfig/networking目录中存放的是系统网络相关的配置文件。主要是网卡的IP地址,子网掩码,MAC地址,网关等。要注意的是ifcfg-ethx这样的文件在三个地方都有,分别是/etc/sysconfig/network-script/目录下;/etc/sysconfig/networking/devices目录下和/etc/sysconfig/networking/profiles/default目录下。一定要保证这所有的ifcfg-ethx文件内容一致,否则将会导致网络无法接通。 Ifcfg-ethx文件分别对应着ethx。例如第一块网卡eth0的配置文件为ifcfg-eth0。如果需要给一块网卡指定多个IP地址,那么只需要在该目录下建立一个ifcfg-eth0:1这样的文件就可以了。文件里面的内容,参照ifcfg-eth0修改就可以了。 Ifcfg-eth0的具体结构如下 # 3Com Corporation|3c905C-TX/TX-M [Tornado] DEVICE=eth0 ONBOOT=yes BOOTPROTO=static IPADDR=192.168.1.101 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 HWADDR=00:06:5B:BE:0C:AD 要特别提醒的是,如果计算机在安装的过程中有两块网卡,而在安装完毕后拔出了一块网卡,有的时候,系统会无法检测到系统中的硬件变化,因此,需要手动的进行配置文件的修改,这个时候,就需要手动的将三个目录下的ifcfg-ethx文件全部删除掉。否则,将会出现很混乱的情况。 /etc/samba/smb.conf配置文件 /etc/samba/smb.conf是samba服务的主配置文件,也是我们平时打交道比较多的文件。虽然平时的安装工作可以完全通过安装程序来完成所有的配置,但是,我们还是希望大家能熟悉这个配置文件的配置方法,以应对特殊的情况。 Smb.conf的内容格式如下: unix charset = cp936 dos charset = cp936 display charset = cp936 netbios name = ECOFE2 server string = Samba Server %v encrypt passwords = Yes map to guest = Bad User log file = /var/log/samba/log.%m max log size = 50 socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192 printcap name = cups dns proxy = No guest account = admin valid users = admin,user,super,oface,cface,update admin users = admin,super,update write list = admin,super,update printer admin = @adm printing = cups [menu$] path = /home/menu write list = admin,user,update read only = No browseable = No [mp3$] path = /home/mp3 browseable = No [game$] path = /game browseable = No [game2$] path = /game2 browseable = No 由于这个文件比较重要,那么我将比较详细的解释一下各个设置选项。 unix charset = cp936 dos charset = cp936 display charset = cp936 这三行,是为了保证Samba 3.0下能正常的显示中文字符。如果去掉这三行,那么中文将会显示为乱码。 netbios name = ECOFE2 这一设置指定服务器的netbios机器名。请不要更改这一设置,否则其他的机器将无法正常的访问到服务器。 valid users = admin,user,super,oface,cface,update admin users = admin,super,update write list = admin,super,update 这三行非常重要,只有用户名在valid users中指定,这些用户才能访问服务器,否则,将会被拒绝访问。admin users 指定了哪些用户具备管理权限,write list指定哪些用户可以具备写权限。这两行一般来讲是相同的。 [game$] path = /game browseable = No 这一段配置是指定了一个共享,需要指定一个共享,则请用[]号把共享名扩起来,如果用$符号结束,则是隐含共享。然后用path=/game则是指定共享哪个挂载点或者说是哪个目录。 配置中的其他部分都是可有可无的,写出来只是为了处于严谨的考虑。 突发型故障疑难排除 在服务器的运作过程中,也会出现一些突发性的故障,譬如不能启动等。一般,如果能够很快修复,那么则尽快修复,如果修复比较麻烦,则采取重新安装的方式更有效率。与其花几个小时进行调试还不如直接花20分钟重新安装一遍。 文件系统损坏或者硬盘损坏导致无法启动 当服务器多次非正常关机或者硬盘出现坏道的时候,会导致系统无法正常启动,并提示输入root用户密码进入文件系统修复模式或者按Ctrl+D重新启动系统。 一般的,当文件系统没有被正常的卸载系统就断电,那么系统将会记录这一信息,并在启动的时候自动检查文件结构,另外,ext3文件格式规定,即使文件系统被正常的挂载和卸载,当次数操作20次的时候,系统也会强行的对文件系统进行一次检查。这些检查一般可以正常的通过,只是检查的时间会根据文件数量的多少而不等,正常的情况下,一次文件检查的时间可能超过10分钟。请耐心等待,千万不要在这个时候强行重新启动机器,那将会对文件系统造成更大的破坏。 如果自动文件系统检查无法通过,则系统会提示需要进入文件系统修复模式进行手动的文件检查或者按Ctrl+D重新启动计算机。这个时候,请输入root用户的密码,系统将引导进文件系统修复模式。此时,请按照系统的提示,对无法完成自动检查的硬盘分区进行手动文件系统检查,例如系统提示/dev/hdc1 无法完成自动检查,则请输入: fsck.ext3 /dev/hdc1 然后耐心等待文件系统检查完成,再输入exit 重新启动计算机,就可以了。如果系统提示文件系统已经挂载,是否强行执行检查,这个时候,请选择N,手动将文件分区umount再执行fsck命令。 有些情况下,文件系统破坏十分严重,已经无法修复,在执行文件系统检查的时候,会持续性的报错,那么,就不必再检查下去了,因为即使检查完成,最后数据将全部到 lost+found里面,无法恢复,全部丢失。碰到这种情况,则请直接拷贝硬盘。以解决时间。 如果硬盘出现坏道,则可能会导致系统死机,内核会在屏幕上告警,提示DMA错误,或者直接停止响应,键盘灯将持续闪烁。这种情况则请根据提示更换硬盘。在更换硬盘的时候,可以让没有损坏的硬盘继续工作,除非系统盘损坏。当然,在你拔掉一块硬盘,而没有更改fstab文件的时候,系统也将会无法启动,并且报告文件系统中硬盘丢失,并提示进入文件系统修复模式,则只需要将你取下的硬盘挂载从fstab里注销掉就可以了。 引导进入单用户模式 在很多情况下,需要进入单用户模式来修复系统。譬如root密码丢失,或者某一自动启动的服务出现问题导致服务器在启动服务的时候进程僵死等。 一般的,我们现在安装的文件服务器系统都是通过grub来引导的。如果要在grub的引导下引导进入单用户模式,则请在系统引导界面出现,等待10秒以让你选择引导内核的时候,选种你要引导进入单用户模式的内核,然后按“e”键,将会出现编辑界面,提示和下面的情况类似: kernel /boot/vmlinuz-2.4.21-15.EL ro root=LABEL=/ 则请在最后空一格,输入single,即如下所示。 kernel /boot/vmlinuz-2.4.21-15.EL ro root=LABEL=/ single 回车确认,然后在该内核选项上按“b“键。则系统将引导进入单用户模式。此时,可以通过passwd命令对root密码进行修改。或者进行其他的修复操作。 如果是服务器是通过lilo来引导的,则更加简单,在系统提示选择内核的时候按esc键,进入boot:提示符,按tab键,显示可以引导的内核,然后在内核后面空一格,加上single就可以了。具体情况不在赘述。 网络故障排除 这里的网络故障仅仅只指服务器网络无法接通的情况,不包括整体网络结构上的其他故障。一般来讲,当服务器无法ping通同一子网的某台机器的时候,则认为服务器出现了网络故障。同时,也有可能出现服务器可以ping通对端,但是,对端无法访问服务器的相关服务。 如果出现服务器无法ping通对端,则请先检查网络物理线路是否正常。 网络线路检查完毕后,连接服务器的交换设备是否有VLAN的限制。 确认外部条件都正常后,请参照上面章节中所提到的网卡设置部分,检查网卡的设置。或者通过ifconfig 命令来看网卡是否被正确的指定了IP地址。正确的ifconfig显示如下: eth0 Link encap:Ethernet HWaddr 00:0A:5E:3C:BD:94 inet addr:192.168.1.254 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:113 errors:0 dropped:0 overruns:1 frame:0 TX packets:66 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:18479 (18.0 Kb) TX bytes:8075 (7.8 Kb) Interrupt:11 Base address:0xa000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:10 errors:0 dropped:0 overruns:0 frame:0 TX packets:10 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:700 (700.0 b) TX bytes:700 (700.0 b) 如果eth0 中inet addr部分没有正确的IP地址,则很可能是因为配置文件不统一而导致的混乱状况。这个时候,可以通过ifconfig eth0 192.168.1.254 netmask 255.255.255.0 up 命令来临时激活eth0 口的协议状态。再测试是否能正常通信。 在上述的配置中,请注意netmask的配置。因为IP地址只有和netmask同时使用才有意义,如果netmask设置不正确,也会导致无法正常通信。 在多层交换的环境中或者在跨网段的环境中,还需要注意路由的配置状况。这些问题,请参考网络知识部分。 如果上述检查都没问题,则请检查服务器上是否应用了防火墙策略。iptables –L 网络故障还有一种情况是因为驱动程序丢失而导致网卡无法找到,这种情况一般是由于网卡质量不好造成的,遇到这边的情况,请参考驱动程序安装部分。或者简单的关闭计算机,然后把网卡拔出,让kudzu自动检查到硬件改动,卸载网卡驱动程序。再关闭计算机,插上网卡让kudzu自动安装网卡驱动。 性能故障排除 如果服务器出现性能严重退化的情况,或者在安装好后便发现性能很差。那么请首先参考上面章节的安装部分,看是否是因为硬件驱动的性能问题导致的。如果使用的是兼容性比较好的硬件,则请执行如下检查步骤。 首先,测试硬盘的读取速度是否正常。 hdparm –tT /dev/hda 第一个输出是从缓存中读取文件的速度,这一速度主要表征主板的性能。一般的,普通的主板,如一般的845系列的主板上缓存读取速度大概在600-700M每秒。比较好的服务器主板则在1.2G每秒。这也就是服务器主板和普通主板的区别所在了。当然,这一性能指标还受内存大小和硬盘的速度影响。 第二个输出是直接从硬盘上读取数据的速度,正常情况下7200转的IDE硬盘和SATA硬盘的速度一般在55M每秒左右。 如果测试得到的数据和上面的正常数据相差很大,则请使用lspci命令检查IDE控制芯片是否被正确识别。当然,一般的,IDE驱动会被正确安装。如果IDE驱动未被正确安装,则一般可认为是硬件兼容问题。 服务故障的排除 我们这里讨论的服务主要是指Samba服务。Samba服务包括smbd和nmbd两个主要服务。其中smbd是提供smb文件传输的主体服务,nmbd是进行netbios的服务。 服务出现故障一般表现为可以ping通服务器的IP地址,却无法ping通服务器的netbios机器名,如ecofe2。当然,更无法通过机器名来访问服务器的smb共享。出现这种故障可能是samba整个服务就没有启动,即smbd和nmbd都没有启动;或者是smbd服务已经启动但是nmbd服务没有启动。如果只是nmbd服务没有启动,而smbd服务已经启动,那么可以通过“\\服务器的IP地址\game$”这样类似的方式来访问文件服务器。 检查服务是否正常启动的命令是: service smb status 正常的状况应该输出 smbd (pid 2657) is running... nmbd (pid 2661) is running... 如果服务中任何一个出现停止,可以将服务重新启动,使用命令 service smb restart Shutting down SMB services: [ OK ] Shutting down NMB services: [ OK ] Starting SMB services: [ OK ] Starting NMB services: [ OK ] 这里有两个地方要引起注意:一个是,netbios广播是间隔型的,并不是一直在广播,因此,如果在工作站开机的时候,恰好处于netbios广播的间隙,可能会出现短暂的找不到ecofe2的情况,当然,工作站可以通过广播方式来查询netbios机器名的IP地址。也有可能是网当中出现了两个名称都叫ecofe2的机器,但是IP地址和MAC地址都不同,这种情况在公司多台服务器拔插网线进行调试的时候容易出现。这个时候,请把samba服务重新启动一次。第二个是,如果服务器上有两块网卡,而且都被激活,设置了IP地址,但是却只有块网卡接了网线。则会造成nmbd服务工作一段时间后异常终止的状况。要解决这个问题,要么将另外一个网卡也接上网线,要么就把另外一块网卡关闭。关闭空闲的网卡可以从BIOS上进行设置,也可以通过删除网卡的配置文件或者将网卡的配置文件中的ONBOOT 选项改成no来实现。 |