本文出自:http://www.nsfocus.com 维护:小四
5. 块设备相关问题
5.1 CDROM设备究竟在哪里
5.2 如何弹出光驱
5.3 如何利用超级块进行恢复工作
5.4 Solaris Root口令忘记了
5.5 如何使用fmthard
5.6 如何从光盘恢复Solaris 7的引导扇区
5.7 Solaris支持类似微软autorun.inf文件的功能吗
5.8 如何修改/dev/null的属性
5.9
5.10 如何自己制作Solaris启动软盘
5.11 x86/Solaris如何访问FAT32分区
--------------------------------------------------------------------------
5. 块设备相关问题
5.1 CDROM设备究竟在哪里
Q: 为了mount光驱,需要哪些包
A: SUNWvolr SUNWcstl SUNWcstlx
D: Dennis Clarke
1) su - root
2) /etc/init.d/volmgt stop
3) ls -1 /dev/dsk/c*s2
4) mount -F hsfs -o ro /dev/dsk/c0t6d0s2 /cdrom
或者
1) /etc/init.d/volmgt stop
2) /etc/init.d/volmgt start
3) volcheck
4) eject
观察/etc/vold.conf
Q: 如何才能知道哪个设备文件对应CDROM(c0t2d0s0?)。如果有一张光盘在CDROM里,
可以用df命令看到对应的设备文件,但是没有光盘在光驱里的时候呢?
A: /dev/sr0 是一个指向最终设备文件的符号链接,仅对SPARC有效,不包括x86
A: Logan Shaw
$ uname -sri
SunOS 5.8 i86pc
$ ls -l /dev/sr*
lrwxrwxrwx /dev/sr0 -> dsk/c1t0d0s2
$
我想x86下是一样的
Q: E420R,Solaris 7 11/99,我从http://sunsolve.sun.com获得一些补丁并安装了,
结果现在我的光驱出问题了。似乎mount成功了,但是找不到文件,/etc/mnttab
中没有任何有关光驱的信息,插入一张光盘会弹出一个文件管理器窗口,但是没
有文件。
A: Danny Mann
检查是否打了如下Solaris 7内核补丁106541-13和 -14。这两个补丁有问题。解
决办法是禁止vold,手工mount光驱。
A: [email protected]
试试volrmmount -d命令。用patchadd -p检查是否安装了补丁106541-14,访问如
下链接
http://sunsolve.Sun.COM/pub-cgi/show.pl?target=patches/patch-access
获取补丁106541-14的说明,阅读NOTE 15。
A: 补丁106541-14的说明,NOTE 15
1. 首先禁止掉vold守护进程
# /etc/init.d/volmgt stop
2. 手工mount光驱(设备文件名可能不同)
# /etc/mount -F hsfs -o ro /dev/dsk/c0t2d0s0 /cdrom
查看/etc/vfstab、/dev/dsk确认光驱所在设备文件名。
5.2 如何弹出光驱
Q: 在安装Oracle 8i时,系统提示插入第二张光盘,但是此时无法成功eject第一张
光盘,终端挂起,杀掉Oracle 8i的安装进程也无济于事。唯一的办法是reset。
A: Sergey Kurganov
下面的操作或许有所帮助
1) 终止卷管理器
# /etc/init.d/volmgt stop
2) unmount光驱,手动eject
3) 重启卷管理器
# /etc/init.d/volmgt start
D: [email protected] 2002-02-26 01:03
装Oracle 9的时候,安装文档特意提醒要用绝对路径才能换盘。
5.3 如何利用超级块进行恢复工作
Q: Sun工作站在reboot时掉电了,用安装光盘启动进入单用户模式,执行fsck命令时
报错
Stop-A
ok boot cdrom -s
INIT: SINGLE USER MODE
# fsck -o b=32 /dev/rdsk/c0t5d0s*
Alternate super block location: 32.
** /dev/rdsk/c0t5d0s0
BAD SUPER BLOCK: MAGIC NUMBER WRONG
USE AN ALTERNATE SUPER-BLOCK TO SUPPLY NEEDED INFORMATION;
eg. fsck [-F ufs] -o b=# [special ...]
where # is the alternate super block. SEE fsck_ufs(1M).
Alternate super block location: 32.
** /dev/rdsk/c0t5d0s1
BAD SUPER BLOCK: MAGIC NUMBER WRONG
USE AN ALTERNATE SUPER-BLOCK TO SUPPLY NEEDED INFORMATION;
eg. fsck [-F ufs] -o b=# [special ...]
where # is the alternate super block. SEE fsck_ufs(1M).
Alternate super block location: 32.
** /dev/rdsk/c0t5d0s2
BAD SUPER BLOCK: MAGIC NUMBER WRONG
USE AN ALTERNATE SUPER-BLOCK TO SUPPLY NEEDED INFORMATION;
eg. fsck [-F ufs] -o b=# [special ...]
where # is the alternate super block. SEE fsck_ufs(1M).
Alternate super block location: 32.
A: Sree Mokkapati
正确的用法就在错误提示信息里,你应该使用另外的超级块进行恢复工作,32仅
仅是常用备份超级块之一。
fsck -F ufs -o b=32 device_name
此外如果想知道还有哪些备份超级块可用,执行
newfs -Nv device_name
先用df等命令确认原始device_name。
D: scz 2001-10-12 17:01 修订
SPARC/Solaris的硬盘损坏多半是文件系统根区被破坏,并不需要拆卸硬盘到其他
机器上mount后fsck,找一张Solaris安装光盘
Stop-A进入OBP状态,在ok提示符下输入
ok> boot cdrom -s
进入单用户模式。此时原有根文件系统并未mount上来,也不需要mount原有根文
件系统,直接
newfs -Nv /dev/rdsk/c0t0d0s0
找出原根文件系统所有备份超级块号
fsck -y -F ufs -o b=<任一备份超级块号> /dev/rdsk/c0t0d0s0
这里假设原根文件系统的原始设备名是/dev/rdsk/c0t0d0s0。其他文件系统的原
始设备名可以在系统完好时 df -k 获取,或者从/etc/vfstab中获取信息。比如
/dev/rdsk/c0t0d0s0 /
/dev/rdsk/c0t0d0s6 /usr
/dev/rdsk/c0t0d0s7 /export/home
vfstab(4)解释得很模糊,回头我上www.google.com去找找其他资料。
The fsck pass value of 2 means that the file system will be checked,
but not sequentially
5.4 Solaris Root口令忘记了
Q: 忘记了root口令,怎么办
A: Steve Menard
启动时按Stop-A进入ok提示符
ok boot cdrom -s (放入启动安装光盘)
mount /dev/dsk/c0t0d0s0 /mnt (这里指定原根区对应的原始设备名)
TERM=vt100;export TERM
vi /mnt/etc/shadow
删除root口令加密串,比如
root:WxzL460hohWsU:10724::::::
删除WxzL460hohWsU,确认你还有8个冒号,重启动
或者 /usr/sbin/reboot -- ""cdrom -s""
A: Philip Brown
使用vi有很多麻烦的地方,可以考虑sed
mount /dev/dsk/c0t0d0s0 /mnt
sed ''s/:WxzL460hohWsU:/::/'' /mnt/etc/shadow > s
mv s /mnt/etc/shadow
或者使用ed
mount /dev/dsk/c0t0d0s0 /mnt
ed /mnt/etc/shadow
1s/root:[^:]*:/root::/ (注意,前面是1,不是l)
w
q
5.5 如何使用fmthard
A: Seán Boran
如果希望对第二块物理硬盘的分区与第一块物理硬盘一样,考虑fmthard和prtvtoc的
结合使用,要比手工format快得多。比如,第一块物理硬盘是target 3,第二块物理
硬盘是target 1,我们希望第二块物理硬盘磁盘卷标是""mirror"",做如下操作:
/usr/sbin/prtvtoc /dev/rdsk/c0t3d0s2 | /usr/sbin/fmthard -n mirror -s - /dev/rds
k/c0t1d0s2
man -s 1M fmthard了解更多细节。
5.6 如何从光盘恢复Solaris 7的引导扇区
A: [email protected]
在安装盘里有一个tools目录,进去后有一个命令叫做installboot
A: [email protected]
比如
installboot /usr/platform/``uname -i``/lib/fs/ufs/bootblk /dev/rdsk/c0t1d0s0
5.7 Solaris支持类似微软autorun.inf文件的功能吗
Q: 我自己制作了一张光盘,同时用于Solaris和Windows。在Windows环境下,可以利
用autorun功能,当插入光盘的时候自动调用喜爱的浏览器打开一个文件。不知道
Solaris 7/8下是否存在类似功能。
A: hakteng
是的,从Solaris 8(CDE version 1.4)开始支持类似功能了
o 创建一个名为""volstart""的脚本文件,比如
--------------------------------------------------------------------------
#! /bin/ksh
#
# This is a CD volume start script. This start script is designed
# to be automatically run when the CD is inserted into a Solaris
# system''s CDrom drive.
#
# Note: not all Solaris systems have an auto volstart ability. If this
# CD is inserted into a CDrom drive of a Solaris system without the
# volstart ability, volstart can also be run manually by executing it
# from either the desktop''s file manager or from a Unix command line.
full_name=$0
dir_name=``/usr/bin/dirname $full_name``
if [[ -x /usr/dt/bin/dtaction ]]; then
# Run the CDrom''s installer program
/usr/dt/bin/dtaction Run $dir_name/installer
fi
--------------------------------------------------------------------------
o 将""volstart""文件放在光盘根目录下
o /usr/dt/bin/sdtvolcheck脚本中存在如下语句
if [[ -x $mountPt/volstart ]];then exec $mountPt/volstart;
于是,当插入光盘的时候volstart脚本被执行,对于上例,最终导致installer被
执行
5.8 如何修改/dev/null的属性
Q: /devices/pseudo/mm@0:null的属性是0620 root tty,我想
chmod 666 /devices/pseudo/mm@0:null ,但是几分钟后,属性被修改回
0620 root tty,怎么办
A: Markus Mayer
查看/etc/minor_perm文件,
# grep -s null /etc/minor_perm
mm:null 0620 root tty
修改该文件中的这一行成""mm:null 0666 root sys""即可。
5.10 如何自己制作Solaris启动软盘
Q: 我知道可以去
http://soldc.sun.com/support/drivers/dca_diskettes/
下载启动软盘的映象文件,可我还想知道它最初是如何制作出来的
A: 小四
1) 用fdformt格式化软盘
2) 用newfs在软盘上创建新的文件系统
3) 将软盘mount上来
4) 用cp命令复制the second-level disk booter(boot或者ufsboot)到软盘,比如
/platform/sun4u/ufsboot。参看installboot(1M)、boot(1M)手册页
5) 用installboot命令安装boot block到软盘,比如
installboot /usr/platform/``uname -i``/lib/fs/ufs/bootblk /dev/rdsk/c1t0d0s0
6) 用cp命令复制必要的工具文件到软盘
7) unmount软盘
8) 用eject命令弹出软盘
5.11 x86/Solaris如何访问FAT32分区
A: Dan Anderson
mount -F pcfs /dev/dsk/c0t0d0p0:1 /mnt/<...> # SCSI
mount -F pcfs /dev/dsk/c0d0p0:1 /mnt/<...> # ATAPI
c0 控制器ID
t0 SCSI ID (对于ATAPI省略)
d0 对于SCSI总是0,对于ATAPI是硬盘号
p0 p0对应第一个主分区表项
:1 对应逻辑驱动器(c - z 或 1 - 24)
有些报告说如果FAT32分区不对应第一个主分区表项,mount失败,感觉x86/Solaris
对pcfs支持混乱。
A: spp(低音炮)
在SPARC/Solaris 7上df -k
# df -k
/dev/dsk/c0t0d0s0 /
/dev/dsk/c0t0d0s6 /usr
/dev/dsk/c0t0d0s7 /export/home
在x86/Solaris 8上df -k
# df -k
/dev/dsk/c0d0s0 /
/dev/dsk/c0d0s7 /export/home
c 硬盘控制器的位置,比如主板第二个IDE接口上的第一个硬盘(主盘)对应c1d0
t 只SPARC有,SCSI ID
d 某一确定硬盘控制器(c参数决定)上硬盘位置
p 只x86有,对应MS系统的Partition概念
s slice号,Solaris系统的概念,不太好解释,如果和p一起出现,可以理解成类似
MS逻辑驱动器的概念
假设x86架构上某硬盘在主引导扇区有两个主分区表项,第一个为FAT32分区,第二个
为Solaris分区,Solaris分区上划分了两个slice,一个为根文件系统/、一个为swap
区,则分别表示为/dev/dsk/c1d0p0:1(FAT32)、/dev/dsk/c1d0p1s0(/)、
/dev/dsk/c1d0p1s1(swap)
在mount FAT32分区时应该用
mount -F pcfs /dev/dsk/c1d0p0:1 /mnt/
D: 小四
注意,Solaris的slice概念和FreeBSD的slice概念不同,FreeBSD的slice概念就是MS
的partition概念,而Solaris的slice概念类似于MS扩展分区上的逻辑驱动器概念。