分享

solaris 系统日常维护

 CharlseLib 2011-11-17
Solaris系统日常维护



 

1.如何加swap

mkfile size filename ( mkfile 5m /export/home/swap01)

swap -a filename ( swap -a /export/home/swap01)

 

2.查看内核参数

nm -x /dev/ksyms > /tmp/kernal.sys (/usr/ccs/bin/nm)

 

3.man 的路径

在MANPATH环境变量中加入, 或

man -M path_of_man ...

 

4.license manager的安装

/opt/SUNWste/bin下的lmgrd.ste为主daemon

/opt/SUNWspro/license_dir下,sunpro.lic,1中的主机名改为当前主机名

 

5.cron的使用

编辑 crontab -e ( 环境变量EDITOR设为vi)

显示 crontab -l

 

6.vi中的中文显示不出来

设置环境变量 LANG=zh

 

7.系统是否支持async I/O

modinfo | grep kaio



对使用async I/O的进程进行truss

truss -t kaio,lwp_create -p pid

若出现: Err #48 ENOTSUP ,则表明不支持

 

8.UFS文件系统的空间利用率

UFS文件系统缺省为10%的空闲空间(可用-m指定),每个inode的平均文件尺寸为2K,如果文件大小超过1GB,可考虑用8K.

#newfs -i 8192 -m 1 /dev/raw_big_disk_device

 

9.vmstat的cpu idle值为什么和sar命令的不一样

vmstat中的cpu的idle值包括wio的值

 

10.对系统的软件包是否发生变化进行检查

#pkgchk SUNWcsu

 

11.修改telnet和ftp登录时的显示信息

添加信息:/etc/issue



telnet的显示信息: /etc/default/telnetd 加入BANNER=".........."

ftp的显示信息: /etc/default/ftpd 加入BANNER=".........."

sendmail的显示信息: /etc/mail/sendmail.cf中SmtpCreeting Message =

 

12.自动执行ftp命令

在发起ftp命令的用户的home目录下,编辑.netrc文件,内容:

machine hostname

login login_name

password password

macdef init

get .... (放ftp的指令)

bye

-----------> (一行空行结束)



这样只要在命令行输入 ftp -i hostname 就可以执行上面的ftp命令



13.在shell中获得前一天的日期

$TZ=PRC+16 (因为中国是东8区,为24-8=16)

$date

$用TZ=.... 来恢复时区

 

14.让inetd进程记录访问日志

inetd -s -t (-t 指定记录访问日志)

 

15./etc/system文件被搞坏了

OK>boot -a

输入回车接受缺省值,然后指定好的system文件或/dev/null

 

16.安装ssh时,在一台没有启动X进程的机器上无法configure成功

装ssh server时,缺省设置需要有Xsun:0 -nobanner -auth 这个进程,

如果没有,在configure时要加上 --without-x 这个参数

 

 

17.awk无法传递变量进来

用/usr/xpg4/bin/awk 或nawk

 

nawk -v PARRH=$HELLO '{

if (PARRH == $1 )

printf $1;

}' filename

 

18.wtmp和utmp

这2个文件是记录login,logout,reboot等信息的,/usr/lib/acct下有维护工具,可以把文件的信息转换成可读的记录,将这2个文件清零要reboot

 

19.获得系统参数

$getconf -a

 

20.发mail(系统维护的脚本中使用)

在/etc/hosts中将收件人地址的IP加入并设为mailhost

mailx -s subject 收件人地址 (可不用启动sendmail进程)

 

21.忘记了root口令

STOP-A
ok>boot cdrom -s
#TERM=SUN
#export TERM
#vi /etc/passwd (把root那一行的x清空)
#vi /etc/shadow (把root那一行的口令加密字清空)
#reboot

 

22.改hostid

方法一: 改NVRAM

方法二: 在启动license管理工具之前运行下面这个C程序

/*
* hid2.c - placed in the public domain by the author - Mark Henderson
* mch@squirrel.com
* mch@squirrel.com
*
* changes hw_serial via direct writes to /dev/kmem
* see the file INSTRUCTIONS for more detailed usage instructions
* must generally run as root (at least with rw permission to /dev/kmem)
* compile with
* gcc -o hid2 hid2.c -lelf
* hid2 without any parameters simply reads hw_serial
* hid2 80808080 changes hw_serial so that hostid appears to be 0x80808080
*
* June 1996
*/

#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/uio.h>
#include <nlist.h>

struct nlist nl[2];

main(argc,argv)
int argc;
char *argv[];
{
int kmem;
off_t where;
char *s;
unsigned int new_hostid;
unsigned char hw_serial[12];
unsigned char new_hw_serial[12];
if ((kmem = open("/dev/kmem", O_RDWR)) < 0) {
fprintf(stderr, "cannot open /dev/kmem\n");
exit(1);
}
nl[0].n_name="hw_serial";
nl[1].n_name = NULL;
if (nlist("/dev/ksyms", nl) < 0) {
fprintf(stderr, "cannot read namelist out of /dev/ksyms\n");
exit(1);
}
if ((where = nl[0].n_value) == 0) {
fprintf(stderr, "unknown kernel variable hw_serial\n");
exit(1);
}
if (lseek(kmem, where, SEEK_SET) == (-1)) {
fprintf(stderr, "lseek on /dev/kmem failed\n");
exit(1);
}
if (read(kmem, (char *)&hw_serial[0], 12) < 12) {
fprintf(stderr, "read from /dev/kmem failed\n");
exit(1);
}
if (lseek(kmem, where, SEEK_SET) == (-1)) {
fprintf(stderr, "lseek on /dev/kmem failed\n");
exit(1);
}
printf("current hostid is 0x%08x\n", strtoul(hw_serial,NULL,10));
if (argc > 1) {
if (lseek(kmem, where, SEEK_SET) == (-1)) {
fprintf(stderr, "lseek on /dev/kmem failed\n");
exit(1);
}
new_hostid = strtoul(argv[1], NULL, 16);
printf("setting hostid to 0x%08x\n", new_hostid);
sprintf((char *)&new_hw_serial, "%u", new_hostid);
if (write(kmem, (char *)&new_hw_serial[0], strlen(new_hw_serial)+1)
< strlen(new_hw_serial) + 1) {
fprintf(stderr, "write to /dev/kmem failed\n");
exit(1);
}
}

close(kmem);
return(0);
}


23.看当前系统的内核参数(最大共享内存、信号量等参数)

#sysdef

 

查看maxphys等参数:

#adb -k

maxphys/D

^D

 

24.发一封有附件的mail

在/etc/hosts文件中加入收件人的主机IP及域名,并加上mailhost:

 

202.202.202.202 solaris.com.cn mailhost

 

执行:

 

mailx -s hello overtime@solaris.com.cn

~< ! uuencode filename filename

.

EOT

 

注意,第二个filename是文件名(可以通过对第一个filename执行basename命令得到),而第一个可能是带绝对路径的文件名。



25.查看一个文件被哪些进程引用(在删除一个文件前最好用这个命令看看)

#fuser -fu hello.world

hello.world: 16648o(oracle) 13974o(oracle) 13631o(oracle)

 

如果看一个文件系统的:

#fuser -cu /filesystem

 

用户名可能是打开这个文件的进程的父进程的用户名,进程号后的字母意义是指这个进程把这个文件作为什么来使用:

 

o: 打开的文件

c: 当前的目录

r: 根目录

t: text文件

 

我用的结果好象是执行文件后为tm

 

26.查看一个执行文件和库文件的动态链接情况

#ldd oracle

libskgxp8.so => /app/oracle/product/8.1.6/lib/libskgxp8.so
libjox8.so => /app/oracle/product/8.1.6/lib/libjox8.so
libobk.so => /app/oracle/product/8.1.6/lib/libobk.so
libnsl.so.1 => /usr/lib/libnsl.so.1
libsocket.so.1 => /usr/lib/libsocket.so.1
libdl.so.1 => /usr/lib/libdl.so.1
libsched.so.1 => /usr/lib/libsched.so.1
libc.so.1 => /usr/lib/libc.so.1
libaio.so.1 => /usr/lib/libaio.so.1
libposix4.so.1 => /usr/lib/libposix4.so.1
libkstat.so.1 => /usr/lib/libkstat.so.1
libm.so.1 => /usr/lib/libm.so.1
libkvm.so.1 => /usr/lib/libkvm.so.1
libelf.so.1 => /usr/lib/libelf.so.1
libmp.so.2 => /usr/lib/libmp.so.2
/usr/platform/SUNW,Ultra-Enterprise/lib/libc_psr.so.1


27.用vmstat和sar -r 的freemem看系统的可用内存很少

这个参数指示了freelist的大小,这是由page daemon标记为free的内存。freelist会根据需要收缩到lotsfree指定的大小,而且会保持这个大小。这个值并不能真正指出到底有多少 空闲的内存,因为可能有大量的仍要被page daemon回收(reclaim)的内存,而page daemon并没有回收它们的必要。

检查内存短缺的方法:

vmstat 中的sr列或sar -g 中的pagescan。它指出了page daemon是多么频繁的来找没有用的内存,并回收给需要的进程(以每秒的page数为单位)。当新启动一个进程时,可能会增加,但马上会恢复为0。

 

28.如何把sar -d和iostat中的sd值转换为cxtxdx值

/etc/path_to_inst文件有对应的类似

/sbus@3,0/SUNW,fas@3,8800000/sd@5,5

的名字,到/dev/dsk下用ls -l 找吧。

另:用iostat的-n参数可以显示为cxtxdx。

 

29.如果出现fsck也搞不定的坏块怎么办

这种情况,一般是说这个block已经物理损坏了,只能把这个block映射到系统不会用到的地方,以免以后又使用这个block,提示出错信息。

先从控制台或/var/adm/messages中找出block的号

# format -> 选disk -> repair -> 输入 block 号 -> 确认(如果没有损坏,会有提示)


30.如何增加一个进程可以打开的文件数

ulimit -n 1024 for /bin/sh and /bin/ksh users

limit descriptors 1024 for csh users

 

/etc/system

set rlim_fd_cur = 128

set rlim_fd_max = 2048

 

http://sunsolve.上的文章

 

31./etc/rc?.d下的几个主要文件的作用

用于snmp

/etc/rc3.d/S76snmpdx

/etc/rc3.d/s76snmpdx

 

用于 nfs server

/etc/rc3.d/S15nfs.server

 

用于从nfs server 上mount文件系统

/etc/rc2.d/S73nfs.client

 

用于使用 cachefs

/etc/rc2.d/S73cachefs.daemon

/etc/rc2.d/S93cacheos.finish

 

用 ntp 来执行时间同步

/etc/rc2.d/S74xntpd

 

用于 Ultra 10000

/etc/rc2.d/S99tsquantum

 

使用 automounter (generally NIS, NIS+ use this)

/etc/rc2.d/S72autoinstall

 

sendmail

/etc/rc2.d/S88sendmail

 

打印或发送打印任务

/etc/rc2.d/S80spc

/etc/rc2.d/S80lp

 

自动启动CDE login画面

/etc/rc2.d/S99dtlogin

 

卷管理,自动mount cdrom

/etc/rc2.d/S92volmgt

 

32.关于syslog几个问题

 

Q:用"ps -ef"看到syslogd有" -n -z 14 "的参数,但用/etc/rc2.d/S74syslog来启动则没有这个参数?

A:当对syslogd一个HUP信号(kill -1)时,它会修改它的参数。所以当root的crontab在每个星期日的3:10am运行/usr/lib/newsyslog时,syslogd变成"syslogd -n -z 14"。其中:

"-n"  表示no fork

"-z 14" 告诉syslogd /dev/log的文件描述符已经打开了

 

33.显示文件系统的备份superblock

#newfs -N /dev/dsk/c0t0d0s0

然后就可以用fsck -F ufs -o b=block_number /dev/dsk/c0t0d0s0 来完成fsck

 

34.在Solaris2.6下显示磁盘的转速

#iostat -nE

 

c0t1d0 Soft Errors: 0 Hard Errors: 0 Transport Errors: 0
Vendor: SEAGATE Product: ST34371W SUN4.2G Revision: 7462 Serial No: 9805V87451
RPM: 7200 Heads: 16 Size: 4.29GB <4292075520 bytes>
Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0
Illegal Request: 0 Predictive Failure Analysis: 0



35.显示文件系统Mkfs的参数

#mkfs -m /dev/dsk/c1t0d0s6
mkfs -F ufs -o nsect=135,ntrack=16,bsize=8192,fragsize=1024,cgsize=16,free=9,rps=60,nbpi=2052,opt=t,apc=0,gap=0,nrpos=8,maxcontig=16 /dev/dsk/c1t0d0s6 1367280

 

磁盘阵列及Volume Manager的使用

 

1.VxVM软件的安装,不封装root区来创建rootdg

#vxconfigd -m disable

#vxdctl init

#vxdg init rootdg

# vxdctl add disk c0t0d0s5 type=simple (在该slice上要有一定的空间,这个slice要在系统安装过程中预留下来,这一步可能出现警告,可不理会)

#vxdisk -f init c0t0d0s5 type=simple

#vxdg adddisk c0t0d0s5

#vxdctl enable

#rm /etc/vx/reconfig.d/state.d/install-db

#reboot ( sync is needed)

 

2.为什么用VxVM的GUI工具会有2种不同的界面(2.6 for Solaris 2.6)

是由于2执行路径不同造成,VM 2.6有2个GUI,一个是Java 的 , 一个是旧的风格的

执行Java的GUI时要用 xhost +来关闭访问控制

 

3.SSA和Axx00系统的磁盘阵列的管理命令

SSA:

ssaadm disp cn (cn为控制器号)

Axx00:

luxadm probe -------> 查出所连接的Axx00的名字

luxadm display name -------> 显示磁盘的详细信息

 

4.在命令行获得VxVM的信息

$pkginfo -l SUNWvxvm

 

5.在命令行获得volume的信息

$vxprint -ht

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多