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 |
|
来自: CharlseLib > 《技术文章》