简介
这篇文档包含了你用solaris和Sun平台工作时所需要的最重要的20%的技术。它能处理你所遇到的80%的问题。
这篇文档并不打算覆盖Solaris处理环境的细节,也不会包含常见问题解答(相关的书和链接将在附录中给出)。这本书将用来为刚成为Solaris系统管理员的新手或没有每天管理Solaris系统基础的人提供一种怎样收集这种信息的服务。这篇文章关注的方向是用来做技术开发的图形工作站,也将对希望为建立一套用来演示或作为基准的Sun系统的人有所帮助。
两点提醒:
· 永远记住在记录日志中记录下你对系统的每一次改动
· 清楚的在头脑中记住这篇文档包含能让系统不可用的系统级的程序。除非你对它的破坏性做了仔细的分析,否则不要在正在使用的系统上执行这些程序。
1 系统启动和测试
1.1 OK提示符
每套SUN都有一个Boot-PROM模式,可以在启动操作系统之前访问,也可以在运行的时候访问,可以用STOP+A进入,如果没有STOP键(PC),可以用ctrl+break.。一旦进入Boot-PROM模式,会出现OK提示符。如果操作系统运行时候出现,可以用go继续。
1.2 控制台测试
Boot-PROM模式可以用直接连接的键盘和显示器,也可以用终端。
如果系统启动时候没有检测到键盘,输入输出自动转到第1个串口(/dev/ttya,A),可以连接一个终端或者另一计算机(通过交叉串口线)到这个端口。
如果另外的计算机是SUN工作站,可以使用tip hardwire来查看启动控制台。Tip命令输入之后,所有的启动信息会出现在相应的终端窗口里面,如果被观察的机器用了STOP+A,必须使用Strg-]把tip改成telnet模式,然后输入一个BREAK:telnet>send brk
1.3 重新启动SUN工作站
重新启动之前,工作站需要进入一个合适的状态,可以使用下面及格命令退出:
# init 5
# init 6
# init 0
SUN工作站在重新启动之前,会以一定的方式关闭系统,下面是几种可选择的方法:
最好、最干净的方法:
- # init 5 关闭所有进程,然后系统自动关掉电源。
- #init 6,关闭所有进程,然后系统自动从新启动。
- #init 0,关闭所有进程,然后系统自动回到OK状态。
在这3种情况下,在系统关闭之前执行/etc/rc0.d下面的K*脚本,这可以用于关闭数据库,或者关闭WEB服务器的进程ID文件等。
如果没有合适的shell窗口,可以使用远程登录来执行上面的命令。远程也不可以,可以使用下面的方法:
- STOP-A
- OK sync 同步文件系统,中断OS,然后重启。
注意:需要察看随之产生的保存在/var/crash/<hostname>下面的内核转储文件。
如果碰到STOP-A也不能使用的情况,必须关闭计算机电源,在打开电源。
1.4 系统的测试
启动系统,在执行到内存测试的时候,按下STOP-A。
下面的段落只描述很重要的命令。
详细的描述可以在下面的书中《Hardware Diagnostics for Sun TM Systems: A Toolkit for System Adminis-trators》(Infodoc Number 23476 on http://sunsolve.sun.com)。
1.4.1 Banner(标识)
Banner显示下列信息:
. CPU的数量、类型和频率
. 内存
. MAC地址和主机地址(主机号)
. 控制台显示卡类型
. Sun-Globe: Creator 3D
. Sun with face: Elite 3D
. Self-describing Logo: PGX, Raptor GFX (=PGX32), Expert3D(lite) XVR-500, XVR-1000 etc.
1.4.2检测
probe-scsi-all列出内置和外置的所有SCSI设备。对于IDE硬盘,使用:probe-ide-all.
1.4.3 测试所有
test-all.运行所有的自检,可以检测象网线是否正常等情况。
1.4.4 printenv and devalias
devalias列出所有别名,printenv列出所有变量。例如boot-device变量,定义了计算机启动的路径,一般情况下是disk,disk是一个指向特定设备的别名。
1.4.5禁止网卡错误信息
当网卡在没连接网线启动的时候,"Interface: No link"会出现多次,可以在OK下面设置
setenv tpe_link test false 来禁止这个报错信息。
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/dsk and /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。Solaris 8操作系统缺省安装产生3个分区,大约1G的根区,SWAP区(根据内存容量确定大小),剩余空间给/export/home.
对于工作站来说,这个缺省分区不是最优化的,分区的容量不能在数据不丢失的情况下扩充。在分区空间用尽的情况下,必须使用符号连接。对于服务器来说,得保留一个分区给/var目录,
这样的话,保存在/var/tmp里面的记录和大文件就不会影响到根区,避免系统产生问题。
建议工作站这样分区
slice 0: / root-Partition, incl. /usr, /var, /opt plus
/export/home
slice 1: swap 交换区,和物理内存一样大
slice 2: backup 不要改变这个分区!!代表整个硬盘
slice 7: sds 用于Solstice DiskSuite(TM) metadata的小分区
为了使用Solstice Disksuite logical volume manager (SDS),建议保留30M,用于拷贝"state replica databases".可以参阅后面的使用SDS镜像启动盘
从Solaris 8 02/02开始,会自动安装Live Upgrade。使用Live Upgrade,可以在系统正在运行的时候拷贝当前根的环境。例如可以测试新的操作系统而不用改变正在运行的系统。为了产生这个预备启动环境(ABS),必须留出足够的空间,现在的硬盘空间足够大,可以使用下面分区:
slice 0: / root-partition, incl. /usr, /var, /opt
slice 1: swap swap-Partition, as large as physical memory
slice 2: backup Do not change this partition!
It is always the size of the whole disk
slice 3: /export OS-independent data, home-directories
slice 4: <not mountet>, to be used as ABE with Live Upgrade
( about 150% of the expected size of / )
slice 7: sds A small space reserved for Disksuite metadata
2.3 Crashdumps
从Solaris 7开始,缺省情况下crashdump写到交换区上,这也是为什么交换区为什么和内存一样大的原因之一。下次启动的时候,从交换区中读取这个文件,压缩之后写到var/crash/<hostname>里面,用于以后的分析。因此/var(如果没有单独分出/var或者是/区)不能太小。
如果一个系统用了几个G的空间作为dump设备,启动时会由于上面提到的拷贝操作,花上很长时间。这时候,最好利用dumpadm定义一个dump分区,从这个指定分区拷贝的操作会在后台运行。注意经常检查和清除/var/crash/<hostname>,保证有足够的空间用于其他的crashdumps.
2.4 Example
假如有一台E450系统并且有一个已经配置好的启动盘,但你不知道两件事情:(1)盘插哪里(系统又20个槽,必须装到安装系统时硬盘所在的槽里才能启动),(2)忘了超级用户口令。把 盘插到一个任意槽里,按下面的步骤:
第1步 插入一个启动光盘(SOLARIS 安装盘)STOP+A,然后 boot cdrom –s。如果用外置光驱,就需要probe-scsi-all列出光驱位置,然后boot <光驱路径> -s。系统起来之后,就有了一个不需要口令的超级用户窗口。
第2步 开始mount硬盘。首先用devfsadm重新建立设备,在/dev/dsk下面会有8个新文件。接下来使用format-print-partition确认盘已经装好,并找出来哪个分区是root分区,通常都是0区 。假设盘插到2槽,format会识别到c1t2d0(SCSI ID是2,第1个控制器),c1t2d0s0就是root分区,因此应该ount这个盘,fsck –Y /dev/rdsk/c1t2d0s0;mldir /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步 定义别名, nvalias my disk <物理设备文件名>,这样就可以输入boot mydisk就可以启动了。定义setenv boot-device mydisk,系统就会自动从mydisk启动了。
2.5 Removable Devices
2.5.1 Volume Management(卷管理)
可移动设备由卷管理器来负责,卷管理器检测CD-ROM并自动挂接到/cdrom/cdrom0下面。一些手工操作会造成卷管理器错误,比如使用曲别针打开光驱,而不是使用eject cdrom命令。只这时候需要手工重起卷管理器.
/etc/init.d/volmgt stop
/etc/init.d/volmgt start
2.5.2 软驱
插入软盘(UNIX或DOS格式)必须使用volcheck才能使用卷管理器管理软驱。如果volcheck成功,软驱会出现在/floppy/floppy0下面,使用eject floppy而不手工取出软盘。
2.5.3 CD-ROM
CDROM不需要volcheck,开机就会被检测到,并挂接在/cdrom/cdrom0下面,没有shell或命令使用/cdrom路径时可以使用eject cdrom弹出光驱,fuser –c /cdrom/cdrom列出所有和光驱有关的进程ID或命令,fuser –k可以快速杀掉相关进程。
如果没有卷管理器,使用下面的方法管理CDROM(假设SCSI地址是6):
- mkdir /tmp/cdrom
- mount -F hsfs /dev/dsk/c0t6d0s0 /tmp/cdrom
- (Work with CD mounted on /tmp/cdrom)
- umount /tmp/cdrom
- eject /dev/dsk/c0t6d0s0
2.5.4 CD-R 和 CD-RW
CDRW,是一个与solaris 8 捆绑的工具,用来烧制CD-R或者CD-RW介质。这个工具也可以烧制用命令mkisofs从solaris文件系统和目录中创建的ISO镜象文件。
看下面带精确参数的例子:
#! /bin/sh
# ./nfscd <PARAMETER1> <PARAMETER2>
# PARAMETER1 = Application ID
# PARAMETER2 = from where
#
# ./nfscd SunNetManager /net/center2000/export/pkg/SUNWsnm
# set Umask
umask 022
# Remove old image
rm /data/disk.img
# Create image
mkisofs -A $1 -d -l -L -o /data/disk.img -P "Sun Microsystems" -p
"Solaris SPARC" -r -R -J -V "$1" -v $2
# Burn
cdrw -i /data/disk.img
2.5.5 磁带
磁带设备不是用卷管理器来控制的,它们必须用命令tar来处理。典型的磁带设备被作为一个外部SCSI设备连接到系统。当solaris OE 运行时它们的连接和配置就已经被完成了,在运行以前版本的solaris命令devfsadm(solaris 8 OE) 或者drvconfig; tapes;devlinks,你能找到一些逻辑的连接在/dev/rmt 目录。0描述的是第一个磁带设备,1是第二个磁带设备。
通过以上,你就可以访问这个磁带,用命令 tar tvf /dev/rmt/0.
注意:SGI系统写入的磁带通常只能用特定的块因子(blocksize)来读
tar tvfb 512 /dev/rmt/0
在某些情况下,需要进行字节交换操作,才能正确读取
dd if=/dev/rmt/0 conv=swab | tar tvfb 512 -
2.6 克隆磁盘
通过这部分的学习,你可以把一个系统克隆到另一个和它的硬件属于同一系列的系统中。例如克隆Ultra(TM) 10工作站到Ultra 10工作站是可以的,而克隆到Ultra 60工作站就是行不通的。
如果监测到目标系统的硬件结构和源系统有所不同的话(不同的结构缓冲,网卡等),目标系统在克隆以后需要用boot –r命令来重新配置。
2.6.1 使用内部磁盘来克隆
这种方式适合用于易于改变的内部磁盘:
·Ultra 30, Ultra 60, Ultra 80或者Sun Blade(TM) 100工作站或者E220R/E420R/E250R/E450
·Sun Enterprise(TM)220R, 420R, 250, 或者450服务器
内部的FC-AL磁盘(如Sun Blade 2000工作站和Sun Fire(TM) 280R或V880服务器)可能导致一些问题。
接下来是用Ultra 60工作站做的一个范例:
1 将目标盘插入主板上的第二个硬盘口
3 启动进入但用户模式(STOP-A; boot –s)
4 用devfsadm重新配置所有的磁盘
5 键入format察看硬盘的名称。在Ultra 60工作站上,你会看到c0t0d0和c0t1d0。C0t1d0是内部系统中最顶端的磁盘。
6 决定哪个盘是源盘,哪个盘是目标盘(不要忘记备份你的数据!)。在我们的例子中c0t0d0(底部的盘)作为源盘,c0t1d0(上面的盘)是目标盘。
7 dd if=/dev/rdsk/c0t0d0s2 of=/dev/dsk/c0t1d0s2 bs=128k(这条命令为整个盘,包括分区标的内容作了一个1:1的副本。如果源盘是一个9GB的盘,而目标盘是一个18GB的盘,那么将会有9GB的容量被浪费)。警告:仔细检查这一步,避免对你源盘的意外损坏。
8 fsck –Y of=/dev/dsk/c0t1d0s0(检查启动分区的文件系统,一般来说是分区0)
9 移除源盘,将克隆好的盘放进先前源盘所在的位置。重新启动你新做好的克隆的系统
2.6.2 通过转接线来克隆
这种方式比上面描述的通过内部磁盘克隆要慢,但是它适合用于一些内部的磁盘不容易改变的系统(如Ultra 10或Ultra 5工作站)。
警告:记住文件“/.rhosts”仅仅在这个任务中使用,在完成这个任务之后删除它来避免系统的安全漏洞。
目标系统
启动
在注册屏幕上使用命令行注册(command line login)
尽可能地停止引起磁盘输入输出的进程
TERM=vt100vi /etc/inet/hosts
->添加目标和源
ifconfig hme0 plumb
ifconfig hme0 <target> netmask 255…up
->测试rsh源
rsh source “dd if=/dev/rdsk/c0t0d0s2 ibs=128k obs=8k” | dd of=dev/rdsk/cotodos2 bis=128k obs=128k
(9GB的盘需要等待大约40分钟)
STOP-Aboot cdrom –s(用可引导的光盘引导)
fsck –Y /dev/rdsk/c0t0d0s0
源系统
在文件/.rhosts中添加目标IP
sync; sync;
2.7 用SDS制作磁盘镜像
Solaris逻辑卷面管理(SVM),一般是指Solstice Disksuite(SDS)软件,它可以把磁盘系统做成RAID 0, 1, 0+1或5。工作站最感兴趣的方式是RAID 1:为磁盘错误准备好了一个包含启动文件系统的磁盘镜像。
SVM是Solaris 9系统环境的一部分。在Solaris 8平台上,你可以在第二章光盘的“EA”目录下找到SDS软件。而在Solaris 7或者2.6系统环境中,服务器版,你可以查找一下光盘“Easy Access Server”。
我们假定一个工作站有两块内部的磁盘,c0t0d0和c0t1d0。这两块盘都以相同的方式被正确的分区:分区0被分配给/(root),分区1被分配给交换区(swap),一个比较小的分区7被分配用来记录复制数据库(State Replica Databases)。分区2被定义成一个备份区(参见“分区”一章)。
把第一块盘的分区信息复制到第二块盘,可以用如下的命令:
# prtvtoc /dev/rdsk/c0t0d0s2 | fmthard -s - /dev/rdsk/c0t1d0s2
记录复制数据库是一个包含了镜像信息纪录的小文件。镜像中的每个磁盘都必须知道有三个记录复制数据库文件:
# metadb -a -f -c 3 c0t0d0s3 c0t1d0s3
下一步,在第一块磁盘上创建第一个子镜像,它包含了启动文件系统:
# metainit -f d50 1 1 c0t0d0s0
然后在第二块磁盘上创建第二个子镜像:
# metainit d52 1 1