在 Linux 上燒錄 CD
2024-07-21 02:35:28
供稿:網友
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
查看目錄的內容;所有的文件都應該在那里,并且都可讀。
否則,就是映像壞掉了,假如您將它燒錄到盤上,那么您最終將得到一個刻錄失敗的光盤。
燒錄盤
將映像寫到盤中再簡單不過了。首先,找到 CD-R/RW