2007年11月8日 星期四

掛載SCSI磁帶機到HP DL380(RHEL3)上

狀況:Server主機無法使用磁帶機!
機器:HP ProLiant DL 380 G4 安裝RHEL3(Update4)
裝置:HP storgeworks DAT72(SCSI介面)
目的:如何正確掛載磁帶機上去,好正常運作!進行備份作業。

經查詢一些網路文件後,說是HP這款機器,
若是裝Linux Kernel 2.4的話,
會有cciss controller(SCSI陣列控制器)找不到磁帶機設備的問題,
必須在開機後,手動載入。

http://www.cpqlinux.com/cciss-tape.html
這篇文章可以參考一下!

一般Rad Hat的設備配置,
磁帶機設備會是/dev/st0甚至是/dev/st1。

也就是說,當我們用磁帶機命令查詢狀況時,
[root@dbsrv root]#mt -f /dev/st0 status
應該會有一些訊息出現!
可是在没有正確載入磁帶機設備的情形下,
我看到的結果是...

[root@dbsrv root]# mt -f /dev/st0 status
/dev/st0: No such device

哇哩咧!没有這個設備...天啊!那我的磁帶機不就...
磁帶機可是備份機制不可或缺的角色耶,
當然要趕緊讓它能正常運作!OK!

先檢查一下磁帶機設備要用得到的module有没有。
#lsmod | grep st

要是没有的話,可以用modprobe指令手動載入。
#modprobe st

好,有了支援的模組,
接下來重新註冊scsi設備到cciss controller裡頭。

[root@dbsrv root]# ls -l /proc/driver/cciss
total 0
-rw-r--r-- 1 root root 0 Nov 9 12:12 cciss0

看到控制器的文件了!註冊吧。
[root@dbsrv root]#echo "engage scsi" > /proc/driver/cciss/cciss0

若是你的機器控制器文件不至一個,
可以用迴圈處理,不必笨笨的一個一個echo。

#for x in /proc/driver/cciss/cciss[0-9]*
#do
#echo "engage scsi" > $x
#done

在那個echo "engage scsi"指令之後,會在/proc/scsi目錄下產生和cciss0有關的文件。

讓我們再一次檢查硬體資訊。用dmesg。
[root@dbsrv root]# dmesg | grep st0
Attached scsi tape st0 at scsi1, channel 0, id 0, lun 0

好像有抓到st0裝置了哦!再下一次磁帶機指令確認狀況!
[root@dbsrv root]# mt -f /dev/st0 status
SCSI 2 tape drive:
File number=-1, block number=-1, partition=0.
Tape block size 0 bytes. Density code 0x0 (default).
Soft error count since last status=0
General status bits on (50000):
DR_OPEN IM_REP_EN

哈!哈!哈!任務完成!
磁帶機終於能用了。

附帶說明,網路上看到的文件是說,若還是抓不到,
還有兩個指令可強制掃描磁帶機設備。
#echo "rescan" > /proc/scsi/cciss0/1
或是
#echo "rescan" > /proc/driver/cciss/cciss0
不過由於我的狀況是只要echo "engage scsi"就可以把裝置抓到,所以不知道以上那兩個指令有没有差啦。
大家針酌用囉。

OK!狀況好像解除,但是...
只要重新開機,那個echo "engage scsi"都要手動做一次,不是很煩嗎?
所以我當然要能夠讓echo "engage scsi"可以在開機時自動執行才對。

把之前那個迴圈拿來好好運用吧。
vi一個命令稿scsiengage存到/etc/init.d/路徑下。
內容:
#!/bin/sh
# chkconfig: 345 99 01
# description: engage scsi devices to cciss controller
# /etc/rc.d/init.d/scsiengage
# This script file is created by WuKuoHoung 2007/11/09

modprobe st

for x in /proc/driver/cciss/cciss[0-9]*
do
echo "engage scsi" > $x
done

編輯好後,用chkconfig管理!
別忘了加上可執行的檔案屬性。
[root@dbsrv root]# chmod u+x /etc/init.d/scsiengage
[root@dbsrv root]#chkconfig --add scsiengage
[root@dbsrv root]#chkconfig --list scsiengage
scsiengage 0:off 1:off 2:off 3:on 4:on 5:on 6:off
[root@dbsrv bk]# find /etc/ -type l | grep scsiengage
/etc/rc.d/rc0.d/K01scsiengage
/etc/rc.d/rc1.d/K01scsiengage
/etc/rc.d/rc2.d/K01scsiengage
/etc/rc.d/rc3.d/S99scsiengage
/etc/rc.d/rc4.d/S99scsiengage
/etc/rc.d/rc5.d/S99scsiengage
/etc/rc.d/rc6.d/K01scsiengage

好了!chkconfig自動幫我們建好在開關機自動執行的link了。
要注意的是,用echo "engage scsi"之後,註冊好的scsi裝置,是不能再卸除的。除非關機!
所以這個scsiengage命令稿並没有像其他在/etc/init.d/的命令稿,
有著start|stop|restart|reload|status等啓動參數可用。因為没必要!了乎。

1 則留言:

宗諭 提到...

幸好有看到你這一篇教學 解決我這幾天在Debain上抓不到scsi磁帶機的問題

搜尋此網誌

本站大事記

這個部落格(網站)內容以分享LINUX和延伸出的技術文章為主!
特別是為了工作和進修需要,搜集了不少網站連結。
希望對來這裡觀文的朋友們,有提供一些有用的資訊或文章。
但這裡的文章中,也包含個人的心情扎記和隨興言談……
若是當中沒有對上你的口味,請多包涵!

原「琳娜絲與希斯寇的邂逅」,改名為「愛上琳娜絲」!

原「琳娜絲與希斯寇的邂逅」,改名為「愛上琳娜絲」!
--原序文--
就是當LINUX遇上CISCO啦!他們的結合還能作什麼事…不就是讓這個世界的網路,串…串起來啊…不然你們那能上這網站看部落格!