本著讓Linux精神發揚光大宗旨,我將部門原來的Windows2000服務器上所有的數據與提供的服務全部遷移到新建的Linux服務器上。在我即將要把這台老Windows2000服務器扔到一個陰暗的小角落的時候,眼前一亮,忽然發現這台破機器上還有一個Sony光盤刻錄機。我一向有取它人所棄,變廢為寶的習慣,所以自然不能放過這個好東東。 如何在Linux下使用刻錄機呢?我搜遍網上資料庫,也沒有能找到一個比較有效及全面的教材。無奈之下,只能閉關一個人瞎琢磨一番,當我抽完第7根香煙的時候,一個為sUCcess的字符串終於出現屏幕上。我驚喜不已,大聲尖叫一下,嚇得身邊正在美食的老兄,手指一抖,一塊好大的肥肉落在地上。此兄心痛不已,對我龇牙咧嘴下止,並向上天發誓:三日內必取我的項上人頭,決不失言,否則……。此及後話,我就不再多言,進入我們的主題吧。
硬件環境: 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 虛擬操作。