Gih's Blog

只言片语
Archive for July 2011

修改HMC的用户密码

2011-07-19 by gihnius, tagged as aix

使用ssh登录到 HMC:

hscroot@hmc> chhmcusr -u hscroot -t passwd
Enter the new password:
Retype the new password: 

AIX非交互式修改用户密码

2011-07-19 by gihnius, tagged as aix

AIX提供一个非交互式修改密码的命令: chpasswd

# echo "user:password" | chpasswd 
这在脚本中应用会非常方便, 但不爽的是 AIX 的这个功能默认非root用户不能使用! 普通用户改自己的密码有什么问题呀!?其它系统Linux/FreeBSD也有类似的方法:比如FreeBSD可以通过 pw来修改:
# echo "newpassword" | pw mod user USER_NAME -h 0 
要批量添加用户时, 把上面的 "mod" 改为 "add" 就可以了.

更改AIX用户名长度限制

2011-07-19 by gihnius, tagged as aix

在AIX 5.2及之前版本,用户名长度不能超过8个字符. 从AIX 5.3 开始, 这个限制改为允许最长 255 个字符. 可以使用getconf确认当前设置的值:

# getconf LOGIN_NAME_MAX
12 
或是查看系统属性:
# lsattr -El sys0 -a max_logname
max_logname 12 Maximum login name length at boot time   True
在AIX 5.3及之后的版本, 要修改这个值,可以通过chdev设置 max_logname 参数:
# chdev -l sys0 -a max_logname=129
sys0 changed

# getconf LOGIN_NAME_MAX
128
上面的命令是要设置用户名的长度最大为 128 个字符. 因为 max_logname 还包含一个字符串结束符, 所以执行chdev时要多加 1 : max_logname=129.

AIX中重命名设备

2011-07-18 by gihnius, tagged as aix

从AIX 6.1 TL6开始, 系统提供了一个简单的重命名设备的命令rendev.

例如:

 # rendev -l hdisk1 -n hdisk2 
而此前版本可要花一翻周折:
 # odmget -q"name=hdisk1" CuDv
CuDv:
name = "hdisk1"
status = 1
chgstatus = 0
ddins = "scdisk"
location = "10-60-00-5,0"
parent = "scsi0"
connwhere = "5,0"
PdDvLn = "disk/scsi/scsd"

 # rmdev -l hdisk1 -d
hdisk1 deleted

 # mkdev -l hdisk2 -c disk -s scsi -t scsd -p scsi0 -w 5,0
hdisk2 Available 
...

创建以内存为介质的文件系统

2011-07-13 by gihnius, tagged as linux, unix

有时要测试一些程序的IO等性能, 需要摆脱磁盘IO的影响. 也为了使某些程序运行得更快, 提供一个临时的文件系统给程序使用. UNIX系统都提供了类似的功能: ram disk(memory disk) and ramfs(memory filesystem).

FreeBSD:在FreeBSD上建立内存文件系统,有几种可选的方法. 使用mdconfig 或 mdmfs. 两者都是使用 md 驱动实现 (memory disk driver).在FreeBSD上推荐使用 mdmfs.下面命令创建一个 100m 的内存文件系统:

# mdmfs -s 100m md1 /mnt/mfs
这样, 就创建了基于md1的md设备的文件系统.如果你需要的是设备而不是文件系统,可以使用 mdconfig:
# mdconfig -a -t swap -s 100m -u 1 
-u 1是新创建的设备号, 不能与已有的冲突,
ls /dev/md* 
看看已经建立了哪些md设备.这里使用mdconfig创建了设备 md1, 如果需要文件系统, 可以对md1进行创建文件系统然后挂载等操作.
# newfs -U md1
在md1上创建 ufs文件系统. 然后挂载:
# mount /dev/md1 /mnt/mfs
使用mdconfig时,上面指定了使用-t swap, 其实还可以使用 malloc, 但是手册里不推荐这么做.说是容易导致系统 panic!FreeBSD系统中的 tmpmfs 就是使用 md设备 (mdmfs) 来建立的.注意, 上面指的是 tmpmfs, 不是tmpfs. 前者来自 FreeBSD5, 后者到FreeBSD7才出现.tmpfs是另外一种 memory disk, 它基于VM(虚拟内存,以swap为后端存储, 使用系统空闲的物理内存和空闲的swap). 现在好像还在测试阶段.当不再使用内存文件系统时, 使用 mdconfig释放 md设备占用的资源:
# mdconfig -d -u (md设备号)
AIX:AIX中类似的家伙叫做 ramdisk. 使用 mkramdisk 创建.mkramdisk 命令作为 bos.rte.filesystems 的一部分提供,它允许用户创建一个 RAM 盘。与FreeBSD的mdconfig类似, mkramdisk 也在/dev创建一个设备特殊文件 /dev/ramdiskX X是设备号.要设置一个大小为 100 MB 的 RAM 磁盘并在其上创建一个 JFS 文件系统,请输入以下命令:
# mkramdisk 100M
# ls -l /dev | grep ram
# mkfs -V jfs /dev/ramdiskx
# mkdir /ramdisk0
# mount -V jfs -o nointegrity /dev/ramdiskx /ramdiskx 
Linux:Linux上的操作比以上两个都简单:
# mount -t ramfs -o size=100m ramfs /mnt/mfs 
Linux上的ramfs是可以动态增长的, tmpfs不能. 


tmpfs 一般都是基于 VM 的.ramfs 严格意义上只使用物理内存.

博客界面改为透明的...

2011-07-11 by gihnius, tagged as web

昨天更新了博客的界面, 把界面变成透明的, 我觉得这样看着眼睛舒服. 但问题也来了, 我使用的是 css 的透明方法, 很多其它网站是偏向使用 png 透明背景图片. 这样, 在网页的第一层透明了, 所有在这层上面的层都会继承这个透明的属性, 而且是唯一确定的, 更改不了了. 比如我把菜单栏透明了, 那么在菜单栏上的所有层都透明了, 包括在菜单上放置图片, 图片也会变透明. 为什么不允许取消继承或者重新设置属性值 (测试过不行) ? 

css 设计得也太粗劣了吧! 而且个各浏览器有各自的设置方法,

    filter:alpha(opacity=65); <!-- for ie 7- -->
    -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=65)"; <!-- for ie 8+ -->
    -moz-opacity:0.65; <!-- for firefox -->
    opacity:0.65; <!-- common (opera, safari ) --> 
好像还有个 kHtml, 应该是 kde 那类浏览器的, 还要 webkit 的, 各自独立, 自成门派, 有点让人不爽.原本以为这样够简单, 设个属性就行了, 又不想使用png图片, 只能以后不直接在博客上放图片, 因为把图片透明了会加大浏览器的负担. 还是不用吧.

用locate建立用户的文件索引数据库

2011-07-04 by gihnius, tagged as linux, unix

locate是常规的unix/linux系统自带工具, 用于快速查找文件. 与find不同, find是实时查找而且功能强大, 通常用在脚本中, 但对于桌面用户, 日常查找一些文件, 用find 就有些"大材小用"了, 你不觉得平时find $HOME -xxx yyy时要耗费很多时间吗?

locate就不一样, 它是通过事先建立索引再进行搜索的, 建立索引时就是使用find这个工具. 而平时用得较多的就是用户在自己的HOME目录下查找文件(假设用户都把自己的数据放到$HOME目录下,除此之外就是系统文件). 可以配置locate$HOME目录建立索引. 下面是我在 FreeBSD下的操作:

## shell profile
export LOCATE_CONFIG=$HOME/.locate.rc
alias updatedb='/usr/libexec/locate.updatedb'
alias locate='locate -d ~/.locate.db' 
copy /etc/locate.rc $HOME/.locate.rc 并修改以下几个选项:
## locate profile
# temp directory
TMPDIR="/tmp"

# the actual database
FCODES="$HOME/.locate.db"

# directories to be put in the database
SEARCHPATHS="$HOME/" 
通过 man updatedb 可以看到 LOCATE_CONFIG 这个变量是用于设置 updatedb 的配置文件位置的.之后就是按照自己的需要更新索引了. 可以在crontab 里设置:
15 12 * * *     $HOME/bin/cronsh.sh /usr/libexec/locate.updatedb > /dev/null 2>&1
...
cronsh.sh 是我为crontab设置环境变量而增加的.locate 的功能很强大, 支持正则表达式搜索.

bootlist: Multiple boot logical volumes found

2011-07-01 by gihnius, tagged as aix

运行bootlist出现下面报错:

 # bootlist -m normal hdisk1 hdisk2
0514-229 bootlist: Multiple boot logical volumes found on 'hdisk1'.
Use the 'blv' attribute to specify the one from which to boot. 
这是由于 hdisk1 上存在多个 boot logical volumes (BLV). 要避免这个错误, 需要清除磁盘的 BLV 的引导记录 再重新建立:
 # chpv -c hdisk1
# chpv -c hdisk2 
确认这两个盘都不能再用于启动:
 # ipl_varyon -i 
然后重新建立 Boot image 并写入 boot recorder:
# bosboot -ad /dev/hdisk1
bosboot: Boot image is 38224 512 byte blocks.
# bosboot -ad /dev/hdisk2
bosboot: Boot image is 38224 512 byte blocks 
再重新添加 bootlist:
 # bootlist -m normal hdisk1 hdisk2 
也可以采用临时方法避免这个报错, 就是指定boot lv:
 # bootlist -m normal hdisk1 blv=hd5 hdisk2 blv=hd5 
但以后运行还是会报.