SOLARIS常见问题与问题解决方案.docx
《SOLARIS常见问题与问题解决方案.docx》由会员分享,可在线阅读,更多相关《SOLARIS常见问题与问题解决方案.docx(31页珍藏版)》请在冰豆网上搜索。
SOLARIS常见问题与问题解决方案
SOLARIS常见问题与问题解决方案
简介
这篇文档包含了你用solaris和Sun平台工作时所需要的最重要的20%的技术。
它能处理你所遇到的80%的问题。
这篇文档并不打算覆盖Solaris处理环境的细节,也不会包含常见问题解答(相关的书和链接将在附录中给出)。
这本书将用来为刚成为Solaris系统管理员的新手或没有每天管理Solaris系统基础的人提供一种怎样收集这种信息的服务。
这篇文章关注的方向是用来做技术开发的图形工作站,也将对希望为建立一套用来演示或作为基准的Sun系统的人有所帮助。
两点提醒:
·永远记住在记录日志中记录下你对系统的每一次改动
·清楚的在头脑中记住这篇文档包含能让系统不可用的系统级的程序。
除非你对它的破坏性做了仔细的分析,否则不要在正在使用的系统上执行这些程序。
1系统启动和测试
1.1OK提示符
每套SUN都有一个Boot-PROM模式,可以在启动操作系统之前访问,也可以在运行的时候访问,可以用STOP+A进入,如果没有STOP键(PC),可以用ctrl+break.。
一旦进入Boot-PROM模式,会出现OK提示符。
如果操作系统运行时候出现,可以用go继续。
1.2控制台测试
Boot-PROM模式可以用直接连接的键盘和显示器,也可以用终端。
如果系统启动时候没有检测到键盘,输入输出自动转到第1个串口(/dev/ttya,A),可以连接一个终端或者另一计算机(通过交叉串口线)到这个端口。
如果另外的计算机是SUN工作站,可以使用tiphardwire来查看启动控制台。
Tip命令输入之后,所有的启动信息会出现在相应的终端窗口里面,如果被观察的机器用了STOP+A,必须使用Strg-]把tip改成telnet模式,然后输入一个BREAK:
telnet>sendbrk
1.3重新启动SUN工作站
重新启动之前,工作站需要进入一个合适的状态,可以使用下面及格命令退出:
#init5
#init6
#init0
SUN工作站在重新启动之前,会以一定的方式关闭系统,下面是几种可选择的方法:
最好、最干净的方法:
-#init5关闭所有进程,然后系统自动关掉电源。
-#init6,关闭所有进程,然后系统自动重新启动。
-#init0,关闭所有进程,然后系统自动回到OK状态。
在这3种情况下,在系统关闭之前执行/etc/rc0.d下面的K*脚本,这可以用于关闭数据库,或者关闭WEB服务器的进程ID文件等。
如果没有合适的shell窗口,可以使用远程登录来执行上面的命令。
远程也不可以,可以使用下面的方法:
-STOP-A
-OKsync同步文件系统,中断OS,然后重启。
注意:
需要察看随之产生的保存在/var/crash/下面的内核转储文件。
如果碰到STOP-A也不能使用的情况,必须关闭计算机电源,在打开电源。
1.4系统的测试
启动系统,在执行到内存测试的时候,按下STOP-A。
下面的段落只描述很重要的命令。
详细的描述可以在下面的书中《HardwareDiagnosticsforSunTMSystems:
AToolkitforSystemAdminis-trators》(InfodocNumber23476on)。
1.4.1Banner(标识)
Banner显示下列信息:
.CPU的数量、类型和频率
.内存
.MAC地址和主机地址(主机号)
.控制台显示卡类型
.Sun-Globe:
Creator3D
.Sunwithface:
Elite3D
.Self-describingLogo:
PGX,RaptorGFX(=PGX32),Expert3D(lite)XVR-500,XVR-1000etc.
1.4.2检测
probe-scsi-all列出内置和外置的所有SCSI设备。
对于IDE硬盘,使用:
probe-ide-all.
1.4.3测试所有
test-all.运行所有的自检,可以检测象网线是否正常等情况。
1.4.4printenvanddevalias
devalias列出所有别名,printenv列出所有变量。
例如boot-device变量,定义了计算机启动的路径,一般情况下是disk,disk是一个指向特定设备的别名。
1.4.5禁止网卡错误信息
当网卡在没连接网线启动的时候,"Interface:
Nolink"会出现多次,可以在OK下面设置
setenvtpe_linktestfalse来禁止这个报错信息。
2管理硬盘
2.1逻辑设备名
所有的硬盘都有一个共同的命名方案,该方案包括以下四个部分:
c控制器号
t目标号,对于SCSU设备,就是对应的SCSI地址。
d驱动号或者是RAID设备的LUN号(一个地址,多个硬盘)
S分区号(见下一段)
这些逻辑设备的以连接方式放在/dev/dsk和/dev/rdsk目录里面,并指向物理设备名。
但这些物理设备仅在改变启动设备时用到,一般的命令都以逻辑设备为参数。
例如:
c0t0d0s0通常是工作站的第1硬盘,c0t1d0s0是第2个c0t6d0s0是内部光驱(SCSI地址是6)
在OK提示下输入boot–r可以更新/dev/dskand/dev/rdsk目录里面的内容,devfsadm也可以。
Solaris8以前的需要用drvconfig;disks;devlinks3个命令来完成,刷新之后,probe-scsi-all所看到的设备的逻辑连接也就能看见了。
2.2分区
下面是一个两个硬盘的工作站用format命令看到的内容
c0t0d0
c0t1d0
这里显示的是硬盘,不是分区或扇区,format的目的就是产生和管理分区,一个硬盘最多可以优个分区,用format-print可以查看。
如果使用缺省安装,Solaris安装工具就会把系统盘分成slices:
/(root)/usr/var和/export/home。
Solaris8操作系统缺省安装产生3个分区,大约1G的根区,SWAP区(根据内存容量确定大小),剩余空间给/export/home.
对于工作站来说,这个缺省分区不是最优化的,分区的容量不能在数据不丢失的情况下扩充。
在分区空间用尽的情况下,必须使用符号连接。
对于服务器来说,得保留一个分区给/var目录,
这样的话,保存在/var/tmp里面的记录和大文件就不会影响到根区,避免系统产生问题。
建议工作站这样分区
slice0:
/root-Partition,incl./usr,/var,/optplus
/export/home
slice1:
swap交换区,和物理内存一样大
slice2:
backup不要改变这个分区!
!
代表整个硬盘
slice7:
sds用于SolsticeDiskSuite(TM)metadata的小分区
为了使用SolsticeDisksuitelogicalvolumemanager(SDS),建议保留30M,用于拷贝"statereplicadatabases".可以参阅后面的使用SDS镜像启动盘
从Solaris802/02开始,会自动安装LiveUpgrade。
使用LiveUpgrade,可以在系统正在运行的时候拷贝当前根的环境。
例如可以测试新的操作系统而不用改变正在运行的系统。
为了产生这个预备启动环境(ABS),必须留出足够的空间,现在的硬盘空间足够大,可以使用下面分区:
slice0:
/root-partition,incl./usr,/var,/opt
slice1:
swapswap-Partition,aslargeasphysicalmemory
slice2:
backupDonotchangethispartition!
Itisalwaysthesizeofthewholedisk
slice3:
/exportOS-independentdata,home-directories
slice4:
,tobeusedasABEwithLiveUpgrade
(about150%oftheexpectedsizeof/)
slice7:
sdsAsmallspacereservedforDisksuitemetadata
2.3Crashdumps
从Solaris7开始,缺省情况下crashdump写到交换区上,这也是为什么交换区为什么和内存一样大的原因之一。
下次启动的时候,从交换区中读取这个文件,压缩之后写到var/crash/里面,用于以后的分析。
因此/var(如果没有单独分出/var或者是/区)不能太小。
如果一个系统用了几个G的空间作为dump设备,启动时会由于上面提到的拷贝操作,花上很长时间。
这时候,最好利用dumpadm定义一个dump分区,从这个指定分区拷贝的操作会在后台运行。
注意经常检查和清除/var/crash/,保证有足够的空间用于其他的crashdumps.
2.4Example
假如有一台E450系统并且有一个已经配置好的启动盘,但你不知道两件事情:
(1)盘插哪里(系统又20个槽,必须装到安装系统时硬盘所在的槽里才能启动),
(2)忘了超级用户口令。
把盘插到一个任意槽里,按下面的步骤:
第1步插入一个启动光盘(SOLARIS安装盘)STOP+A,然后bootcdrom–s。
如果用外置光驱,就需要probe-scsi-all列出光驱位置,然后boot<光驱路径>-s。
系统起来之后,就有了一个不需要口令的超级用户窗口。
第2步开始mount硬盘。
首先用devfsadm重新建立设备,在/dev/dsk下面会有8个新文件。
接下来使用format-print-partition确认盘已经装好,并找出来哪个分区是root分区,通常都是0区。
假设盘插到2槽,format会识别到c1t2d0(SCSIID是2,第1个控制器),c1t2d0s0就是root分区,因此应该mount这个盘,fsck–Y/dev/rdsk/c1t2d0s0;mkdir/tmp/disk;mount/dev/dsk/c1t2d0s0/tmp/disk
第3步首先清楚/tmp/etc/shadow里面的root后面的加密内容清空,然后查看/tmp/etc/vfstab里面看看该盘是不是第2槽的,如果是,/应该mount在/dev/dsk/c1t2d0s0,如果不是,就把硬盘插到相应的槽里面。
第4步假设在/tmp/etc/vfstab里面看到的是/dev/dsk/c1t2d0s0,这说明在原来的系统里面启动盘就是第2槽,一般,E450会从第1槽启动(c1t0d0s0)。
在/dev/dsk里面找到并记下来c1t0d0s0指向的物理设备文件名。
第5步reboot,STOP+A,输入:
boot<物理设备文件名>。
第6步定义别名,nvaliasmydisk<物理设备文件名>,这样就可以输入bootmydisk就可以启动了。
定义setenvboot-devicemydisk,系统就会自动从mydisk启动了。
2.5RemovableDevices
2.5.1VolumeManagement(卷管理)
可移动设备又卷管理器来负责,卷管理器检测CD-ROM并自动挂接到/cdrom/cdrom0下面。
一些手工操作会造成卷管理器错误,比如使用曲别针打开光驱,而不是使用ejectcdrom命令。
只这时候需要手工重起卷管理器.
/etc/init.d/volmgtstop
/etc/init.d/volmgtstart
2.5.2软驱
插入软盘(UNIX或DOS格式)必须使用volcheck才能使用卷管理器管理软驱。
如果volcheck成功,软驱会出现在/floppy/floppy0下面,使用ejectfloppy而不手工取出软盘。
2.5.3CD-ROM
CDROM不需要volcheck,开机就会被检测到,并挂接在/cdrom/cdrom0下面,没有shell或命令使用/cdrom路径时可以使用ejectcdrom弹出光驱,fuser–c/cdrom/cdrom列出所有和光驱有关的进程ID或命令,fuser–k可以快速杀掉相关进程。
如果没有卷管理器,使用下面的方法管理CDROM(假设SCSI地址是6):
-mkdir/tmp/cdrom
-mount-Fhsfs/dev/dsk/c0t6d0s0/tmp/cdrom
-(WorkwithCDmountedon/tmp/cdrom)
-umount/tmp/cdrom
-eject/dev/dsk/c0t6d0s0
2.5.4CD-R和CD-RW
CDRW,是一个与solaris8捆绑的工具,用来烧制CD-R或者CD-RW介质。
这个工具也可以烧制用命令mkisofs从solaris文件系统和目录中创建的ISO镜象文件。
看下面带精确参数的例子:
#!
/bin/sh
#./nfscd
#PARAMETER1=ApplicationID
#PARAMETER2=fromwhere
#
#./nfscdSunNetManager/net/center2000/export/pkg/SUNWsnm
#setUmask
umask022
#Removeoldimage
rm/data/disk.img
#Createimage
mkisofs-A$1-d-l-L-o/data/disk.img-P"SunMicrosystems"-p
"SolarisSPARC"-r-R-J-V"$1"-v$2
#Burn
cdrw-i/data/disk.img
2.5.5磁带
磁带设备不是用卷管理器来控制的,它们必须用命令tar来处理。
典型的磁带设备被作为一个外部SCSI设备连接到系统。
当solarisOE运行时它们的连接和配置就已经被完成了,在运行以前版本的solaris命令devfsadm(solaris8OE)或者drvconfig;tapes;devlinks,你能找到一些逻辑的连接在/dev/rmt目录。
0描述的是第一个磁带设备,1是第二个磁带设备。
通过以上,你就可以访问这个磁带,用命令tartvf/dev/rmt/0.
注意:
SGI系统写入的磁带通常只能用特定的块因子(blocksize)来读
tartvfb512/dev/rmt/0
在某些情况下,需要进行字节交换操作,才能正确读取
ddif=/dev/rmt/0conv=swab|tartvfb512-
2.6克隆磁盘
通过这部分的学习,你可以把一个系统克隆到另一个和它的硬件属于同一系列的系统中。
例如克隆Ultra(TM)10工作站到Ultra10工作站是可以的,而克隆到Ultra60工作站就是行不通的。
如果监测到目标系统的硬件结构和源系统有所不同的话(不同的结构缓冲,网卡等),目标系统在克隆以后需要用boot–r命令来重新配置。
2.6.1使用内部磁盘来克隆
这种方式适合用于易于改变的内部磁盘:
·Ultra30,Ultra60,Ultra80或者SunBlade(TM)100工作站或者E220R/E420R/E250R/E450
·SunEnterprise(TM)220R,420R,250,或者450服务器
内部的FC-AL磁盘(如SunBlade2000工作站和SunFire(TM)280R或V880服务器)可能导致一些问题。
接下来是用Ultra60工作站做的一个范例:
1将目标盘插入主板上的第二个硬盘口
3启动进入但用户模式(STOP-A;boot–s)
4用devfsadm重新配置所有的磁盘
5键入format察看硬盘的名称。
在Ultra60工作站上,你会看到c0t0d0和c0t1d0。
C0t1d0是内部系统中最顶端的磁盘。
6决定哪个盘是源盘,哪个盘是目标盘(不要忘记备份你的数据!
)。
在我们的例子中c0t0d0(底部的盘)作为源盘,c0t1d0(上面的盘)是目标盘。
7ddif=/dev/rdsk/c0t0d0s2of=/dev/dsk/c0t1d0s2bs=128k(这条命令为整个盘,包括分区标的内容作了一个1:
1的副本。
如果源盘是一个9GB的盘,而目标盘是一个18GB的盘,那么将会有9GB的容量被浪费)。
警告:
仔细检查这一步,避免对你源盘的意外损坏。
8fsck–Yof=/dev/dsk/c0t1d0s0(检查启动分区的文件系统,一般来说是分区0)
9移除源盘,将克隆好的盘放进先前源盘所在的位置。
重新启动你新做好的克隆的系统
2.6.2通过转接线来克隆
这种方式比上面描述的通过内部磁盘克隆要慢,但是它适合用于一些内部的磁盘不容易改变的系统(如Ultra10或Ultra5工作站)。
警告:
记住文件“/.rhosts”仅仅在这个任务中使用,在完成这个任务之后删除它来避免系统的安全漏洞。
目标系统
启动
在注册屏幕上使用命令行注册(commandlinelogin)
尽可能地停止引起磁盘输入输出的进程
TERM=vt100vi/etc/inet/hosts
->添加目标和源
ifconfighme0plumb
ifconfighme0netmask255…up
->测试rsh源
rshsource“ddif=/dev/rdsk/c0t0d0s2ibs=128kobs=8k”|ddof=dev/rdsk/cotodos2bis=128kobs=128k
(9GB的盘需要等待大约40分钟)
STOP-Abootcdrom–s(用可引导的光盘引导)
fsck–Y/dev/rdsk/c0t0d0s0
源系统
在文件/.rhosts中添加目标IP
sync;sync;
2.7用SDS制作磁盘镜像
Solaris逻辑卷面管理(SVM),一般是指SolsticeDisksuite(SDS)软件,它可以把磁盘系统做成RAID0,1,0+1或5。
工作站最感兴趣的方式是RAID1:
为磁盘错误准备好了一个包含启动文件系统的磁盘镜像。
SVM是Solaris9系统环境的一部分。
在Solaris8平台上,你可以在第二章光盘的“EA”目录下找到SDS软件。
而在Solaris7或者2.6系统环境中,服务器版,你可以查找一下光盘“EasyAccessServer”。
我们假定一个工作站有两块内部的磁盘,c0t0d0和c0t1d0。
这两块盘都以相同的方式被正确的分区:
分区0被分配给/(root),分区1被分配给交换区(swap),一个比较小的分区7被分配用来记录复制数据库(StateReplicaDatabases)。
分区2被定义成一个备份区(参见“分区”一章)。
把第一块盘的分区信息复制到第二块盘,可以用如下的命令:
#prtvtoc/dev/rdsk/c0t0d0s2|fmthard-s-/dev/rdsk/c0t1d0s2
记录复制数据库是一个包含了镜像信息纪录的小文件。
镜像中的每个磁盘都必须知道有三个记录复制数据库文件:
#metadb-a-f-c3c0t0d0s3c0t1d0s3
下一步,在第一块磁盘上创建第一个子镜像,它包含了启动文件系统:
#metainit-fd5011c0t0d0s0
然后在第二块磁盘上创建第二个子镜像:
#metainitd5211c0t1d0s0
使用第一个子镜像创建镜像的第一个部分:
#metainitd54-md50
用metaroot修改/etc/vfstab和/etc/system,让系统可以从元设备(metadevice)d54上启动:
#metarootd54
重新启动系统,然后将添加第二个子镜像d54。
这就强制了“镜像同步”,将第一块盘的内容复制到了第二块盘。
这将在一小段时间内影响系统的性能。
#metattachd54d52
为了避免在从第二块盘上紧急启动时发生错误信息,交换分区必须做成相同样式的镜像。
否则,交换分区在损坏的磁盘上,/etc/vfstab仍然会定位到c0t0d0s1。
现在系统已经可以从第一块盘(bootdisk),也可以从第二块盘(bootdisk1)上启动了。
如果有一块磁盘损坏,SolsticeDiskSuite会停止启动程序。
这是因为如果要在一次错误以后成功地启动系统,纪录复制数据库的大部分必须依然“幸存”。
在我们的两块镜像盘上仅仅需要六个复制中的三个依然存活。
超过两块盘的服务需要有第三块盘来用记录复制数据库来配置。
两块盘的工作站必须手动地修复,下面的例子描述了这个过程:
·记录数据库复制在c0t0d0s7和c0t1d0s7上配置,c0t0d0盘发生故障。
·启动程序被SolsticeDiskSuite停止,并转换进入到单用户模式。
·现在记录数据库复制希望发生错误的盘没有被配置:
metadb-d-fc0t0d0s7
·在下一次重启之后,对重置的磁盘进行分区,使它和仍然活动的磁盘的分区一致。
·做完这些之后,在重置的硬盘上创建记录数据库复制文件:
metadb-a-c3c0t0d0s7
·在下次的重启之后,镜像又可以重新同步了。
注意:
如果你有一个两块盘的系统,在一块盘上创建三个记录数据库复制,在另一块上面创建四个。
在理论上有50%的机会可以在一次错误后重新启动系统而不需要手动地去使用元数据。
如果你能接受在2盘系统下发生错误后无人职守的重启,在两块盘上创建相同数量的记录数据库复制并且创建/etc/system条目:
setmd:
mirrored_root_flag=1
关于这方面内容更多的讨论可以在Sun的蓝皮书“ConfiguringBootDisksWithSolaris[tm]VolumeManagerSoftware"(
3SWAP交换空间
3.1固定配置文件/etc/vfst