史萊姆論壇

返回   史萊姆論壇 > 專業主討論區 > 網路疑難應用技術研討區
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


發文 回覆
 
主題工具 顯示模式
舊 2005-02-13, 10:35 PM   #1
飛鳥
協調管理員
 
飛鳥 的頭像
榮譽勳章
UID - 23073
在線等級: 級別:72 | 在線時長:5513小時 | 升級還需:108小時級別:72 | 在線時長:5513小時 | 升級還需:108小時
註冊日期: 2003-01-07
VIP期限: 無限期
住址: 史萊姆團隊
文章: 7199
精華: 11
現金: 837 金幣
資產: 260029 金幣
預設 在 Linux 上燒錄CD

作者:zhchhui 發表於:2003-08-01 08:30:06


在 Linux 上燒錄 CD

Linux SCSI 仿真冒險
創建 .iso 文件
燒錄盤
複製盤
多段刻錄
結束語

相關內容:

Knoppix 提供了一個可引導的、容量為一張光碟的 Linux
Basic tasks for new Linux developers


命令行上的 mkisofs 和 cdrecord 使這一切成為可能

Carla Schroder(dworks@bratgrrl.com)
負責人,Tux Computing
2003 年 7 月

Linux 為創建 CD 提供了功能強大且靈活的工具。您可以創建在幾乎任何平臺上都可讀的盤,還可以創建 .iso 文件以供下載和分發。
在任何平臺上從命令行燒錄 CD 都是一件令人費解且煩躁的事情,Linux 當然也不例外。不過,由於在各平臺上所用到的命令和術語都十分相似,因此學習一下如何在 Linux 上刻錄 CD 還是十分有用的。許多 Linux 軟體都是通過 .iso 映射分發的,因此如果您知道如何燒錄 CD,就可以下載 .iso 來創建您自己的安裝盤。

Linux 和 Windows 都有可錄 CD 的程式可用,但 Linux 版本比起 Windows 版本來功能更強大通用性也更好。在本文中,我們將研究 Linux CD 刻錄命令中的兩個主力:mkisofs 和 cdrecord。mkisofs 創建預先錄製的映射,來生成 ISO9660/JOLIET/HFS 混合檔系統。它同時創建和填充檔系統。與其他資料存儲介質(如硬碟驅動器和軟碟驅動器)不同,CD 上的檔系統並不是先創建後填充資料的。CD-R 只有一次機會:首先格式化將會創建一個帶有空檔系統的盤。cdrecord 命令在橙皮書(Orange Book) CD-R/RW 上刻錄資料,這差不多就是其全部工作了。

由於採用了諸如 CD 刻錄之類的新興技術,最好使用這些程式的較新版本。mkisofs 和 cdrecord 的版本都應該至少已經達到了 1.10。cdrecord 的最新版本 V2.0 已經被重命名為 cdrtools。要查明機器上所安裝的版本,請輸入:

$ cdrecord --version


$ mkisofs --version
對於那些剛接觸可刻錄 CD 的人而言,在我們繼續之前,有幾樣東西是值得先瞭解一下的:

CD-R:可刻錄 CD(CD-Recordable)。它們是 WORM(寫一次,讀多次,Write Once, Read Many)。
CD-RW:可重寫 CD(CD-Rewritable)。它們是 WMRM(寫多次,讀多次,Write Many, Read Many)。
CD-R 的使用很廣泛,在任何 CD-ROM 驅動器上都應該可讀。
CD-RW 在所有現代驅動器上都應該可讀。驅動器必須是“多格式讀取的(multiread)”,以便能夠讀取 CD-R 和 CD-RW 盤。較老的驅動器會出問題。扔掉那個 4 倍速的舊驅動器,買個新的;用不著發火。
商用 CD 不是用鐳射燒錄成的,而是壓制而成的。
哪一種 CD-R/RW 驅動器最好呢?隨便請教普通的硬體評論員,讓他們給您一些建議。
下面是與文件格式有關的一些術語:

黃皮書(Yellow Book):資料 CD 的物理格式
橙皮書:可刻錄 CD 的物理格式:
第一部分:CD-MO(磁-光,Magneto-Optical)
第二部分:CD-WO(寫一次,Write-Once;包括 PhotoCD 的“混合”規範)
第三部分:CD-RW(可重寫,Re-writable)
ISO-9660:舊的檔佈局標準,它只允許 8.3 格式的檔案名
Rock Ridge:是對 ISO-9660 的擴展,它允許長檔案名和 UNIX 樣式的符號鏈結;保留了所有檔屬性,如所有權和許可權。在 Windows 系統上讀盤時,不會顯示 UNIX 檔的屬性。
Joliet:Microsoft 對 ISO 9660 檔系統的擴展,它允許在檔案名中使用 Unicode 字元,同樣也允許長檔案名。為了與 MS-DOS 相容,它還創建截斷的檔案名(這些看起來怪怪的樣子:FILENA~1.TXT)。它允許檔案名長達 64 個字元(包括空格),Windows 95 或更高版本以及運行 Joliet 卷訪問(Joliet Volume Access)擴展的 Macintosh 電腦都可以讀取它。Macs 不會讀取長度超過 31 個字元的 Joliet 檔案名。
El Torito:可引導 CD-ROM(Bootable CD-ROM)格式規範
HFS(分層檔系統,Hierarchical File System):Macintosh 使用的本機檔系統
多段刻錄(Multisession):允許多次添加檔,而不是只允許在單個段中添加檔。要使盤可讀,就必須“關閉”段。但是,這卻導致不能向盤中添加更多檔。多段刻錄將單個段鏈結起來,然後更新盤的目錄,使得它好象一個目錄一樣。
CD-UDF(通用盤格式,Universal Disk Format):業界標準遞增包寫檔系統(incremental packet-writing filesystem)
對 UDF 的一點簡單說明:UDF 意味著能夠直接將檔放入盤。目前,這是在軟體級別上完成的。讀取該盤需要用來創建該盤的軟體。計畫將 UDF 添加到 Linux 內核(可能是 2.6)。要實現這一點,CD 驅動器需要具有 CD-MRW 電路(“CD Mount Rainier ReWrite”;不要問我他們為什麼取這麼個名字),因此它將是新型驅動器的一項功能。當這一點得到實現時,向 CD-R/RW 中複製檔將和向軟碟中複製檔一樣容易,而且這些盤將普遍可讀。而且,它還被吹捧為古老的 3.5" 軟碟的另一種替代品。我們將拭目以待。(請參閱參考資料以獲取到更多有關 Mount Rainier 的資訊的鏈結。)

Linux SCSI 仿真冒險
如果可以的話,請使用 IDE/ATAPI 或 SCSI CD 燒錄機。並口介面是一種會給您添麻煩的棘手玩意兒,而 USB 驅動器則很慢。在 Linux 中它們都得不到很好的支持(雖然對於較新的 USB 2.0 驅動器,您的運氣可能會好一些)。

IDE/ATAPI 驅動器最為常見,但使用起來卻需要做些調整。那麼,如果 cdrecord 顯示沒有配置任何驅動器,會發生什麼事情呢?要想檢查是否配置有驅動器,請輸入以下命令:

$ cdrecord -scanbus
如果命令顯示了 CD-RW 驅動器(請參閱後面的燒錄盤),那麼您可以跳過這一節的大部分,儘管您可能還是都想流覽一下這些內容,以便有所瞭解。

Linux 使用 SCSI 仿真子系統,因此 IDE/ATAPI CD 燒錄機需要相容性驅動程式。如果同一台 PC 上既有 CD-ROM 也有 CD-R/RW,那麼二者都需要 ide-scsi 偽設備驅動程式來支援盤的複製。在 CD-ROM 上使用 SCSI 仿真沒有什麼不利之處;它同樣能工作;只是名稱會改變。驅動器的名稱將會隨 Linux 的具體分發版而有所不同,其名稱可以是 /dev/cdrom0、/dev/hdc 或 /dev/scd0(要獲得 IDE/ATAPI 設備名列表,請參閱表 1)。

表 1. IDE/ATAPI 設備名名稱 設備
hda IDE 匯流排連接器 0 主設備
hdb IDE 匯流排連接器 0 從屬設備
hdc IDE 匯流排連接器 1 主設備
hdd IDE 匯流排連接器 1 從屬設備


要找到系統上的驅動器,請輸入:

$ dmesg | grep '^hd.:'

hda: IBM-DTLA-305020, ATA DISK drive
hdb: TOSHIBA DVD-ROM SD-M1202, ATAPI CD/DVD-ROM drive
hdc: LITE-ON LTR-24102B, ATAPI CD/DVD-ROM drive
hda: 40188960 sectors (20577 MB) w/380KiB Cache, CHS=2501/255/63, UDMA(66)
大多數現代 Linux 都包含了已編譯進內核的 SCSI 仿真:

$ locate ide-scsi.o

/lib/modules/2.4.19/kernel/drivers/scsi/ide-scsi.o
如果您的系統不是這樣的,那麼您就必須將它編譯到您的內核中。對於這篇篇幅有限的文章來說,那是一個過大的主題,因此請參閱參考資料(當您知道如何做時,您會發現它並不難)。

您需要編輯兩個文字檔案來配置系統,讓它使用 ide-scsi 驅動程式。第一個是 /etc/modules.conf(在 Debian 中是 /etc/modules)。我的系統有一個 CD-ROM 和一個 CD-R/RW 驅動器,設備分別是 hdb 和 hdc。使用適合於您系統的值,將這兩行添加到 /etc/modules.conf(或 /etc/modules):

ide-cd ignore=\"hdb hdc\"
ide-scsi
缺省情況下,IDE 子系統將所有的 ATA 設備聲明為它自己的設備,因此 ignore 這一行使得 SCSI 子系統既能抓取 CD-R/RW 也能抓取 CD-ROM。

接下來,為您的引導裝載程式(GRUB 或 LILO)編輯配置檔。對於 LILO 用戶,請將下面兩行添加到 lilo.conf 的末尾:

append="hdb=ide-scsi"
append="hdc=ide-scsi"
對於 GRUB 用戶,請將下面這行添加到 /etc/grub.conf(或者 Debian 中的 /boot/grub/menu.lst)中 kernel 這行的末尾:

hdb=scsi hdc=scsi
現在重新引導,並驗證它是否已裝入:

$ lsmod
這條命令將返回一個長列表;請查找 ide-scsi。

創建 .iso 文件
一旦選擇了您想複製的檔,對 CD 進行刻錄就只有兩步:用 mkisofs 創建 .iso,然後用 cdrecord 將這些檔燒錄進盤中。使用以下命令來創建 .iso 文件:

$ mkisofs -o test.iso -Jrv -V test_disk /home/carla/
在上面的示例中:

-o 為新的 .iso 映射檔命名(test.iso)
-J 為了與 Windows 相容而使用 Joliet 命名記錄
-r 為了與 UNIX/Linux 相容而使用 Rock Ridge 命名約定,它使所有檔都公共可讀
-v 設置詳細模式,以便在創建映射時獲得運行注釋
-V 提供了卷標識(test_disk);該標識就是出現在 Windows 資源管理器中的盤名
列表中的最後一項是選擇要打包到 .iso 中的文件(都在 /home/carla/ 中)
現在,掛裝 .iso 來進行驗證;我喜歡創建一個測試目錄:

$ mkdir /test_iso
$ mount -t iso9660 -o ro,loop=/dev/loop0 test.iso /test_iso
查看目錄的內容;所有的檔都應該在那堙A並且都可讀。否則,就是映射壞掉了,如果您將它燒錄到盤上,那麼您最終將得到一個刻錄失敗的光碟。

燒錄盤
將映射寫到盤中再簡單不過了。首先,找到 CD-R/RW 的 SCSI 地址:

$ cdrecord -scanbus

Cdrecord 1.10 (i686-pc-linux-gnu) Copyright (C) 1995-2001 Jrg Schilling
Linux sg driver version: 3.1.24
Using libscg version 'schily-0.5'
scsibus0:
0,0,0 0) 'TOSHIBA ' 'DVD-ROM SD-M1202' '1020' Removable CD-ROM
0,1,0 1) 'LITE-ON ' 'LTR-24102B ' '5S54' Removable CD-ROM
0,2,0 2) *
0,3,0 3) *
0,4,0 4) *
0,5,0 5) *
0,6,0 6) *
0,7,0 7) *

每一項的前三個數位分別指 SCSI 匯流排、設備標識和 LUN(邏輯單元號,Logical Unit Number)。(第四個數位也是設備標識。)cdrecord 需要這三個數位。在上面的示例中,CD 燒錄機是 0,1,0。SCSI 匯流排 0 上的設備都可以縮寫為 1,0,即省去頭一個 0。這是一個公共約定。如果有其他匯流排的話,則必須指定 — 沒有快捷方式。

現在向盤中寫內容:

$ cdrecord -v -eject speed=8 dev=0,1,0 test.iso
在上面的示例中:

-v 指詳細方式
-eject 在完成寫任務後彈出盤
-speed 指定寫速度(8)
-dev 是從 cdrecord -scanbus 獲得的設備號(0,1,0)
最後一個是所燒錄的映射的名稱(test.iso)
對於創建用於公用分發的盤,這是一種簡單且可用的方法,因為它創建了可以在任何 Windows 或 Linux 系統上讀取的盤。mkisofs 本身就非常適合於創建供下載的 .iso,而且 mkisofs 可以為許多平臺創建檔系統。請參閱 mkisofs 聯機幫助頁以獲取更多資訊。

在一台運行速度極快且記憶體很大的機器上,您可以在刻錄期間從容地處理非 CPU 密集型任務,但是在燒錄盤期間最好別做別的事情。雷射器不能先停下來,然後從停下來的地方重新開始,所以任何中斷都是致命的。

cdrecord 將試圖以最快速度運行燒錄機,因此不必指定速度,但是,應該根據經驗來判斷如何做。指定較慢的速度對於糾正錯誤和緩衝區欠載運行很有用。採用“burn-proof”技術的新型驅動器(開發這項技術的初衷與它現在的名字正好相反;同樣,誰取的這些名稱呢?)不會有老式驅動器那樣的緩衝區欠載運行煩惱。

複製盤
要直接將內容從源盤複製到可刻錄盤,請使用下面的命令:

$ cdrecord -v dev=0,1,0 speed=4 -isosize /dev/scd0
這條命令直接將 CD-ROM 即 /dev/scd0 的內容“流”入 CD 燒錄機 dev=0,1,0。不要在速度慢的舊機器上這麼做。直接複製速度很快,但卻更容易出錯。更好的做法是:先將源盤的內容複製到硬碟驅動器,再從硬碟驅動器複製到 CD 燒錄機:

$ mount /cdrom
$ dd if=/dev/scd0 of=/tmp/diskfile.iso
$ cdrecord dev=0,1,0 speed=8 fs=8m -v -eject -dummy /tmp/diskfile.iso
請注意兩個新選項 fs=8m 和 -dummy。fs=8m 定義了環形緩衝區的大小:在一定程度上,越大越好。記住,中斷是致命的;如果什麼東西讓資料傳送慢下來了,那麼 fs=8m 將創建一個足夠大的緩衝區來讓燒錄機保持運行。如果 8 MB 還不夠,那麼您可能需要一台更好的 PC。另一方面,超過 8 MB 也不一定更好,因為作業系統重新裝入 MMU(記憶體管理單元,Memory Management Unit)表時會浪費時間。缺省值是 4 MB。

-dummy 是一個了不起的選項,可以用它來先進行一次“排練”,然後在實際的盤上冒險。燒錄機執行一切操作,但是不打開鐳射頭,這使用戶有機會在將內容提交到盤上之前捕獲錯誤。

多段刻錄
CD 由段構建而成,而段由磁軌構成。只有一個段的盤上有一個導入點、一個 TOC(目錄,table of content)、資料和一個導出點,導出點標記著這張盤的終點,並阻止在這張盤上進行進一步的刻錄。mkisofs 將單獨段鏈結在一起。用 GUI 程式(如 X-CD-Roast 或 KonCD)創建多段刻錄盤可能要更容易一些,但這媞t示的是如何用命令行工具完成這一任務。

第一次在盤上刻錄一個段時,請在 cdrecord 中使用 -multi 開關:

$ cdrecord -v -eject speed=8 dev=0,1,0 -multi test.iso
盤將會以某種方式被固定下來,使得盤可讀,也可以添加更多資料。要向這張盤中添加更多段,mkisofs 需要知道起始磁區號和結束磁區號,可以象下面這樣來找到這些號碼:

$ cdrecord dev=0,1,0 -msinfo
0,27139
確保把要添加資料的盤放入了 CD 燒錄機。然後,添加兩個新開關 -C 和 -M:

$ mkisofs -o test2.iso -Jr -V Session2 -C 0,27139 -M 0,1,0 /files/path/
或者更好的辦法是,讓命令 shell 完成這項工作:

$ mkisofs -o test2.iso -Jr -V Session2 -C `cdrecord dev=0,1,0 -msinfo` -M 0,1,0 /files/path/
多段刻錄 CD 驅動器讀取已寫入的最後一個段。上面的命令從最後一個段獲取 TOC,然後將它組合進新 TOC 中。在刻錄盤上的最後一個段時,請省略 -multi 選項。

結束語
Linux 中的 CD 刻錄功能強大且全面。CD 燒錄機可以跨越網路共用,還可用於自動備份;mkisofs 和 cdrecord 也能用於 DVD。雖然有許多優秀的圖形前端程式,但是完整的功能在命令行程式上
__________________
http://flybird017.googlepages.com/quok.gif http://flybird020.googlepages.com/new321.gif
寶貝你我的地球
, 請 少開電器,減少溫室氣體排放外,多種植植物,減少列印, 多用背面,丟棄時做垃圾分類。

http://netgames123.googlepages.com/tobikeways.jpg

飛鳥 目前離線  
送花文章: 11706, 收花文章: 3363 篇, 收花: 16453 次
回覆時引用此帖
舊 2005-02-16, 10:03 PM   #2 (permalink)
luka
榮譽勳章

勳章總數
UID -
在線等級:
文章: n/a
精華:
預設

~"~
看了頭好痛.....
可能是因為被K3b給養壞了吧......
不過這算是基本功還是要好好學學才行...Orz
 
送花文章: 0, 收花文章: 0 篇, 收花: 0 次
回覆時引用此帖
發文 回覆



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 02:21 AM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2025, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1