本著讓 Linux 精神發揚光大宗旨,我將部門原來的 Windows 2000 服務器 上所有的數據與提供的服務全部遷移到新建的Linux服務器上。在我即將要把這台老Windows 2000服務器扔到一個陰暗的小角落的時候,眼前一亮,忽然發現這台破機器上還有一個Sony光盤刻錄機。
本著讓
Linux精神發揚光大宗旨,我將部門原來的
Windows2000
服務器上所有的數據與提供的服務全部遷移到新建的Linux服務器上。在我即將要把這台老Windows2000服務器扔到一個陰暗的小角落的時候,眼前一亮,忽然發現這台破機器上還有一個Sony光盤刻錄機。我一向有取它人所棄,變廢為寶的習慣,所以自然不能放過這個好東東。
如何在Linux下使用刻錄機呢?我搜遍網上資料庫,也沒有能找到一個比較有效及全面的教材。無奈之下,只能閉關一個人瞎琢磨一番,當我抽完第7根香煙的時候,一個為su
clearcase/" target="_blank" >ccess的字符串終於出現屏幕上。我驚喜不已,大聲尖叫一下,嚇得身邊正在美食的老兄,手指一抖,一塊好大的肥肉落在地上。此兄心痛不已,對我龇牙咧嘴下止,並向上天發誓:三日內必取我的項上人頭,決不失言,否則……。此及後話,我就不再多言,進入我們的主題吧。
硬件環境: cpu: Inter Pentium2 400
mem: 384MB
cdrom: ASUS
cdr: SONY
軟件環境: os: Redhat 7.0
kernel: 2.2.16
在Linux下實現光盤刻錄的軟件最著名的工具是cdrecord。實際上它是一個工具包,其中包括cdreocrd, mkisofs, cdda2wav。dda2wav是針對於刻錄Audio CD的,不在這篇文章的說明范圍之內。我們重點是說明cdrecord,mkisofs的用法,以用如何配置SCSI與IDE設備。許多圖形界面的光盤刻錄軟件其實在底層調用的就是cdrecord,這些軟件我們可以在www.
linuxbyte
.net中找到,並且
下載使用它們。在
Linux系統中,cdrecord是與SCSI通用設備一起工作的,我想大部份讀者用的都是IDE光盤刻錄機,所以配置的關鍵就是將IDE設備摸擬成SCSI設備。要想將IDE設備摸擬成SCSI設備,系統內核就必須支持ATAPI-SCSI emulation或SCSI host adapter emulation,如果你的系統內核現在還不是這樣配置的,那麼你就需要重新編譯內核並且升級它。幸好,我手中上使用的這個Linux版本就已經默認支持了。
第一步,我們應該知道我們的光驅與刻錄機對應是IDE哪一個通道,在Linux下是使用哪一個設備名。因為我們要在系統引導時讓系統內核知道哪些設備需要模擬成SCSI設備,我們就得傳遞一些參數給系統內核,具體做法如下:
編輯lilo.conf文件,給Linux引導模塊增加一行參數。
append = "hdb=ide-scsi hdd=ide-scsi"
執行lilo命令,進行回寫操作。
hdx是指光驅或刻錄機在Linux下對應的IDE設備名。如果你打算進行光盤數據直接刻錄時就需要如上的兩個字段,因為cdrecord在讀寫數據時要求兩個設備都為SCSI接口的。但是如果你只是通過先生成ISO中間文件,然後再刻錄這種形式的話,就只要指定其中一個字段就行了。如下:
append = "hdd=ide-scsi"
第二步,當重新引導系統完畢後,我們現在需要做得是將sg與ide-scsi這兩個內核驅動模塊加載到系統內核裡去,並為它們設定SCSI設備名。sg是指SCSI設備驅動模塊,ide-scsi是指IDE設備摸擬SCSI設備驅動模塊。操作如下:
modprobe sg
modprobe ide-scsi
執行這兩個操作後,我們執行lsmod命令,查詢系統內核已加載模塊信息,對我們操作的結果進行驗證,顯示信息如下:
Module Size Used by
ide-scsi 7336 0 (autoclean)
sg 15704 0 (unused)
vfat 9404 0 (autoclean) (unused)
fat 30688 0 (autoclean) [vfat]
soundcore 2596 0 (autoclean) (unused)
autofs 9124 1 (autoclean)
lockd 31176 1 (autoclean)
sunrpc 52964 1 (autoclean) [lockd]
3c59x 19844 1 (autoclean)
agpgart 18600 0 (unused)
usb-uhci 19052 0 (unused)
usbcore 42088 1 [usb-uhci]
執行上面的操作後,我們就可以察看內核數據映像文件,得到設備更詳細的資料,最重要的是IDE模擬設備對應SCSI設備的id號。
cat /proc/scsi/scsi
-------------------------------------------------------------------
Attached devices:
Host: scsi0 Channel: 00 Id: 00 Lun: 00
Vendor: ASUS Model: CD-S400/A Rev: 2.0S
Type: CD-ROM ANSI SCSI revision: 02
Host: scsi0 Channel: 00 Id: 01 Lun: 00
Vendor: SONY Model: CD-RW CRX100E Rev: 1.0m
Type: CD-ROM ANSI SCSI revision: 02
當然,你的顯示內容可能有所不同,但形式應是一樣的。
系統即然已經認出來了我們模擬的SCSI設備,但是我們還是要提供SCSI設備名映射它們,以便能讓刻錄軟件能夠使用。現好內核系統在加載sg時,就自動將/dev/sg0,/dev/sg1與我們的設備建立的對應關系。
現在你可以使用scsi_info這個命令察看得到SCSI設備信息。
scsi_info /dev/sg0
---------------------------------------------------------------
SCSI_ID="0,0,0"
MODEL="ASUS CD-S400/A"
FW_REV="2.0S"
scsi_info /dev/hdd
---------------------------------------------------------------
SCSI_ID="0,1,0"
MODEL="SONY CD-RW CRX100E"
FW_REV="1.0m"
這時我們已經正確地加載了這些設備。
第三步,如果你是使用圖形界面的操作軟件,以下的內容你就不必再繼續往下看了,你只要按照軟件的提示,填入一些相應的參數,就可以執行操作了。我們在這裡重點講得是如何在命令行模式下進行操作。不管是你是想選擇文件進行刻錄,還是直接進行光盤數據刻錄,我們都需要生成一個中間ISO文件。生成ISO文件的任務就接給mkisofs這個命令來完成了,請輸入如下命令:
mkisofs -r -o temp/aaa.iso data/
具體參數解釋如下:
-r 支持長文件名
-o 指定輸出目標文件
目標目錄最後在新生成光盤中做為根目錄存在,裡面存放的是你需要刻錄的數據。這個目標目錄最好是新建的,千萬不用選擇/tmp或用戶主目錄,因為這些目錄內會有一些臨時文件或隱含文件存在。我剛開始不知道,最後才發現新刻錄的光盤裡根目錄下有一些莫名其妙的文件。如果你是從光盤直接生成ISO文件,就需要用到dd這個命令了。請鍵入如下命令:
dd if=/dev/cdrom of=temp/aaa.iso
具體參數解釋如下:
if 接定數據源設備
of 接定目錄文件
生成的ISO文件,隨時通過以下的命令進行驗證,查看結果是否是我們所想要的。
mount aaa.iso -r -o loop /mnt/test
可寫光盤的容量都是有限的,所以我們必須提前知道我們生成ISO文件的大小,否則會在刻盤時發生錯誤,到時候後悔也來不及了。直接察看ISO文件大小是可以的,但是我們要生成以後才知道,在這裡我來告訴大家一個小技巧,如何察看一個目錄,以及這個目錄下所有的子目錄中的文件大小的總和:
du -m
最後一行數據就行了,數據單位是MB。
第四步,就也是最後一步了,我們只需要用cdrecord命令進行光盤刻錄就行了。請鍵入如下命令:
cdrecord -v speed =2 dev=0.1.0 test/aaa.iso
具體參數解釋如下:
-v 進行數據校驗
speed 指定刻錄機寫盤的速度
dev 指定刻錄機的SCSI設備的ID號。
-dummy 虛擬操作。