[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 編程技術 > C/C++ > 正文
Unix編程/應用問答中文版 ---5.塊設備相關問題
本文出自:http://www.nsfocus.com 維護:小四 (2002-10-23 06:02:00)
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 <dclarke@blastwave.com> 

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 <logan@cs.utexas.edu> 

   $ 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 <dma@wwa.com> 

   檢查是否打了如下Solaris 7內核補丁106541-13和 -14。這兩個補丁有問題。解 
   決辦法是禁止vold,手工mount光驅。 

A: rschicht@my-deja.com <rschicht@my-deja.com> 

   試試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 <mmerfi@home.com> 

下面的操作或許有所幫助 

1) 終止卷管理器 
   # /etc/init.d/volmgt stop 

2) unmount光驅,手動eject 

3) 重啟卷管理器 
   # /etc/init.d/volmgt start 

D: plane@smth.org 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 <sree@broadcom.com> 

   正確的用法就在錯誤提示信息裡,你應該使用另外的超級塊進行恢復工作,32僅 
   僅是常用備份超級塊之一。 

   fsck -F ufs -o b=32 device_name 

   此外如果想知道還有哪些備份超級塊可用,執行 

   newfs -Nv device_name 

   先用df等命令確認原始device_name。 

D: scz <scz@nsfocus.com> 2001-10-12 17:01 修訂 

   SPARC/Solaris的硬盤損壞多半是文件系統根區被破壞,並不需要拆卸硬盤到其他 
   機器上mountfsck,找一張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 <opsmaster@yahoo.com> 

   啟動時按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 <phil+s3@bolthole.no-bots.com> 

   使用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: Sen Boran <sean@boran.com> 

如果希望對第二塊物理硬盤的分區與第一塊物理硬盤一樣,考慮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: paranoid@bbs.tsinghua.edu.cn 

   在安裝盤裡有一個tools目錄,進去有一個命令叫做installboot 

A: melonm@bbs.tsinghua.edu.cn 

   比如 
   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 <mmayer@iname.com> 

查看/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: 小四 <cloudsky@263.net> 

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 <dan@drydog.com> 

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/<mount_point> 

D: 小四 <scz@nsfocus.com> 

注意,Solaris的slice概念和FreeBSD的slice概念不同,FreeBSD的slice概念就是MS 
的partition概念,而Solaris的slice概念類似MS擴展分區上的邏輯驅動器概念。 
(http://www.fanqiang.com)
    進入【UNIX論壇

相關文章
Unix編程/應用問答中文版 ---4.系統資源相關問題 (2002-10-22 06:02:00)
Unix編程/應用問答中文版 ---3.-lelf、-lkvm、-lkstat相關問題 (2002-10-21 06:02:01)
Unix編程/應用問答中文版 ---2.堆棧相關問題 (2002-10-18 06:02:00)
Unix編程/應用問答中文版 ---1.系統管理配置問題 (2002-10-17 06:02:00)
Unix編程/應用問答中文版 ---0.簡介 Unix/C傳奇問題 (2002-10-16 06:02:01)
 

★  樊強制作 歡迎分享  ★