CentOS 丛
目录 — 系统管理 — 网络服务 — 应用部署
内容提要
了解光盘种类和光盘刻录的特点1.
掌握 mkisofs 和 cdrecord 命令使用2.
掌握 growisofs 命令直接刻录 DVD 的方法3.
光盘刻录的特点
光盘刻录是另一种常用的备份方法。使用光盘存储备份数据具有如下
优点
与顺序存储的磁带备份相比,光盘使用随机的数据存储方式,具有更好的恢复灵活性
光盘的存储寿命相对较长
缺点
存储容量有限:CD 大约 700MB;DVD 大约 4.7 GB。
数据光盘的类型
CD
CD-R — 一次写入多次读取的 CD 盘片
CD-RW — 多次写入多次读取的 CD 盘片
DVD
DVD-R — 一次写入多次读取的 DVD 盘片
DVD-RW — 多次写入多次读取的 DVD 盘片,可以被覆写大约 1000 次。
DVD+RW — 实际上是 DVD-R 和 DVD-RW 的复合片。
DVD-RAM — 无限词读写的 DVD 盘片,可以被看作一种可移动硬盘。性能优越,但是价格昂贵。
光盘刻录工具
Linux 下光盘刻录工具主要由如下三个软件包提供:
cdrecord-2.01-10
dvd+rw-tools-7.0-0.el5.3
mkisofs-2.01-10
核心工具是:mkisofs [http://www.proxyserve.net/index.php?q=aHR0cDovL21hbi5 jeC 9ta2 lzb2Zz]、cdrecord [http://www.proxyserve.net
/index.php?q=aHR0cDovL21hbi5 jeC 9jZHJlY29yZA %3D%3D]、growisofs [http://www.proxyserve.net
/index.php?q=aHR0cDovL21hbi5 jeC 9ncm93aXNvZnM%3D]。
当然,在 Linux 的图形环境下还有一些图形工具可用,通常是上述工具的前端。本节主要介绍字符工具的使用。
刻录设备检测
当光盘刻录机安装好之后可以使用如下的命令对刻录设备进行检测:
# cdrecord -scanbus # 用于 SCSI 光驱
# cdrecord -scanbus dev=ATAPI # 用于 ATAPI 光驱
Cdrecord-Clone 2.01 (cpu-pc-linux-gnu) Copyright (C) 1995-2004 Jörg Schilling
Note: This version is an unofficial (modified) version with DVD support
Note: and therefore may have bugs that are not present in the original.
Note: Please send bug reports or support requests to http://bugzilla.redhat.com/bugzilla
Note: The author of cdrecord should not be bothered with problems in this version.
scsidev: 'ATAPI'
devname: 'ATAPI'
scsibus: -2 target: -2 lun: -2
Use of ATA is preferred over ATAPI.
Warning: Using ATA Packet interface.
Warning: The related Linux kernel interface code seems to be unmaintained.
Warning: There is absolutely NO DMA, operations thus are slow.
Using libscg version 'schily-0.8'.
scsibus0:
0,0,0 0) '' '' '' NON CCS Disk
0,1,0 1) 'ASUS ' 'DRW-1612BL ' '1.06' 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) *
SmarTraining 工作室 » Linux 下的光盘刻录 http://www.proxyserve.net/index.php?q=aHR0cDovL3NtYXJ0cmFp...
第1页 共5页 2008-10-17 16:56
光盘刻录机在 Linux 中被识别为 SCSI 设备,即使该设备实际上是 IDE 设备。注意在检测结果中收集光盘刻录机的 SCSI 设备识别号(SCSI总线号scsibus,设备ID号
target,逻辑单元号lun),以便在刻录光盘的命令中使用。
您可以使用如下命令检测您的驱动器是否支持 DVD 刻录(执行前需要取出光盘):
# cdrecord -prcap -dev=/dev/cdrom
刻录设备检测正确后即可进行刻录工作。刻录工作分为两步进行:生成ISO文件、刻录光盘。
使用 mkisofs 生成 ISO 文件
在 Linux 环境下可以使用 mkisofs 工具程序创建能够被刻写到 CD-R(W) 的 ISO9660 映像文件。mkisofs 创建的映像可以由各种类型的文件组成,可以把任何系统中的
文件或目录制作为 ISO 文件。mkisofs 命令的格式为:
# mkisofs [其他选项] -o
<备份路径名>
其中:
— 是要生成的 ISO 文件名
<备份路径名> — 是 ISO 文件中包含的目录内容
其他常用选项包括:
-J — 能启用用于 Microsoft 系统的 Joliet 扩展
-R — 能启用 Rock Ridge 扩展一般的 UNIX 系统
-hfs — 能用来创建用于 Mac OS (R) 系统的 HFS 文件系统
-r — 在生成 ISO 文件时将所有文件的权限设置为公开可读并在必要时添加可执行权限(主要用于发型光盘)
-x <被剔除的路径名> — 不包括任何紧跟在这个选项之后的目录(该选项可以被重复使用)
-A <应用程序 ID> — 将会被写入到映像文件卷头的文本字串,它有助于判定光盘上的内容(<128字符)
-V <文件卷 ID> — 指定卷标(<32字符)
-v — 设置执行时的详细反馈,有助于在映像被制作时查看它的状态
例如:将 /home 下的内容(除了 www 和 samba 子目录)生成一个名为 myhome.iso 的 ISO 文件存在 /tmp 目录下
# mkisofs -R -J -x /home/www -x /home/samba -o /tmp/myhome.iso /home
INFO: UTF-8 character encoding detected by locale settings.
Assuming UTF-8 encoded filenames on source filesystem,
use -input-charset to override.
Using PINYI000.;1 for /home/osmond/.scim/pinyin/pinyin_phrase_lib (pinyin_phrase_index)
Total translation table size: 0
Total rockridge attributes bytes: 18820
Total directory bytes: 114688
Path table size(bytes): 816
Max brk space used 21000
645 extents written (1 MB)
ISO 文件创建之后,可以使用 isovfy [http://www.proxyserve.net/index.php?q=aHR0cDovL21hbi5 jeC 9pc292Znk%3D] 命令对其进行校验,例如:
# isovfy /tmp/myhome.iso
要查看 ISO 文件,可以:
使用 isoinfo [http://www.proxyserve.net/index.php?q=aHR0cDovL21hbi5 jeC 9pc29pbmZv] 命令查看卷标、文件列等1.
使用 mount -o loop 命令挂装后查看2.
使用 cdrecord 刻录光盘
在 Linux 环境下可以使用 cdrecord 命令把 ISO 文件刻录为光盘。cdrecord命令的格式为:
# cdrecord -v -eject -data
其中:
-v — 将处理过程显示在屏幕上
-eject — 刻录完毕弹出光盘
例如:将 /tmp/myhome.iso 刻录为光盘,可以使用如下命令:
# cdrecord -v -eject speed=8 dev=0,1,0 -data /tmp/myhome.iso # SCSI CD
# cdrecord -v -eject speed=8 dev=/dev/cdrom -data /tmp/myhome.iso # ATAPI CD
由于 cdrecord 会自动识别 CDR 和 DVDR 介质,不要额外的考虑他们的区别,直接用上述的命令即可。当然您也可以使用 dvdrecord 命令刻录 DVD 光盘。
您可以使用 cdrecord 命令来清空 CD-RW 以便重新利用。命令如下:
# cdrecord --dev=0,1,0 --blank=fast # 快速格式化 CD-RW
# cdrecord --dev=0,1,0 --blank=all # 格式化 CD-RW
cdrecord 命令会自动检测并格式化 DVD+RW 盘。在未格式化的 DVD+RW 上写入数据之前也可用如下命令进行格式化:
# dvd+rw-format /dev/cdrom
SmarTraining 工作室 » Linux 下的光盘刻录 http://www.proxyserve.net/index.php?q=aHR0cDovL3NtYXJ0cmFp...
第2页 共5页 2008-10-17 16:56
不要多次格式化 DVD-RW 介质,否则无法使用。
使用 growisofs 直接刻录
growisofs 命令工具是 mkisofs 的前端,它会调用 mkisofs 创建文件系统布局,完成到 DVD 上的刻录。 这意味着您不需要在刻录之前创建数据映像。growisofs 命令格
式如下:
# growisofs [-dry-run] [-dvd-compat] [-overburn] [-speed=N] -[Z|M] /dev/dvd
其中:
-dry-run — 实施模拟刻录,即不真正进行刻录
-dvd-compat — 刻录后结束光盘,使其成为不可附加的光盘。这会提供更多的和 DVD-ROM 驱动器的介质兼容性。
-overburn — 支持刻录超过的 4.377 GiB 或 4482 MiB 盘片,但刻录的盘片兼容性较差。
-speed=N — 刻录的速度可以被检测到并自动进行调整,根据介质和驱动器的使用情况。此选项用于强制改变速度。
-Z /dev/dvd — 对 DVD 设备进行初始刻录会话(不管多会话与否)。/dev/dvd,必须依照您的配置做出改变。
-M /dev/dvd — 将数据追加到以前的 DVD+RW 设备上。/dev/dvd,必须依照您的配置做出改变。
— 传递给 mkisofs 处理的选项。
例1:将 /home 目录的数据刻录到 DVD+R 或者 DVD-R 上
# growisofs -dvd-compat -Z /dev/cdrom -J -R /home
其中 -J -R 选项传递给 mkisofs 用于文件系统创建(表示创建带有 joliet 和 Rock Ridge 扩展的 ISO 9660 文件系统)。
例2:将 /www 目录的数据追加刻录到 DVD+RW 上
# growisofs -M /dev/cdrom -J -R /www
下面的脚本来自 http://wiki.splitbrain.org/burn.sh [http://www.proxyserve.net/index.php?q=aHR0cDovL3dpa2kuc3BsaXRicmFpbi5vcmcvYnV ybi5zaA % 3D
%3D],它集成了 mkisofs、cdrecord、growisofs 三个工具并提供了文件名检测和模拟刻录功能。
#!/bin/bash
# FROM: http://wiki.splitbrain.org/burn.sh
# set up CD writer options
CD_DEVICE="1,0,0"
CD_SPEED=16
CD_OPTS="burnproof"
# set up DVD writer options
DVD_DEVICE="/dev/scd0"
DVD_SPEED=4
# do not touch
TOTAL=0
ERROR=0
################# FUNCTIONS ##########################
function showhelp(){
cat <] path [path [path [...]]]
DESCRIPTION
burn.sh is a frontend to mkisofs, cdrecord and growisofs. It accepts
multiple files and directories as arguments which should be burned
to a CD or DVD. burn.sh does some filesystem limitation checks and
decides on its own if a CD or a DVD is created.
OPTIONS
-s
Call the burning process in simulation mode
-n
Specifies the Joliet name for the new disk if none is given
the current date is used
EOF
}
function checkfiles(){
for file in "$@"
do
# check filename
length=`basename "$file"|wc -c|awk '{print $1}'`
if [ "$length" -gt "64" ]
then
echo " ERROR $file: filename too long ($length>64chars)"
ERROR=1
fi
# check filesize
if [ -f $file ]
then
size=`du -k "$file"|awk '{print $1}'`;
if [ "$size" -gt "2097152" ]
then
SmarTraining 工作室 » Linux 下的光盘刻录 http://www.proxyserve.net/index.php?q=aHR0cDovL3NtYXJ0cmFp...
第3页 共5页 2008-10-17 16:56
echo " ERROR $file: file too big (>2GB)"
ERROR=1
fi
let "TOTAL = TOTAL + size"
fi
# recurse directories
if [ -d $file ]
then
checkfiles `find "$file" -maxdepth 1 -mindepth 1`
fi
done
}
function burn_dvd(){
if [ "$SIMULATE" == "1" ]
then
SIM="-dry-run"
fi
growisofs $SIM -dvd-compat -speed=$DVD_SPEED -Z $DVD_DEVICE -r -J -V "$NAME" $@
}
function burn_cd(){
if [ "$SIMULATE" == "1" ]
then
SIM="-dummy"
fi
echo -n "mkisofs -V '$NAME' -r -J $@ | cdrecord -v -ignsize $SIM speed=$CD_SPEED "
echo "driveropts='$CD_OPTS' -eject dev=$CD_DEVICE -data -"
mkisofs -V "$NAME" -r -J $@ | cdrecord -v -ignsize $SIM speed=$CD_SPEED \
driveropts="$CD_OPTS" -eject dev=$CD_DEVICE -data -
}
################# MAIN ##########################
# get parameters
while getopts "n:s" OPTION
do
case $OPTION in
n ) NAME=$OPTARG;;
s ) SIMULATE=1;;
esac
done
shift $(($OPTIND - 1))
# set name if not set
if [ -z "$NAME" ]
then
NAME=`date '+%Y%m%d-%H%M'`
fi
# check for at least one argument
if [ -z $1 ]
then
showhelp
exit 1
fi
# check files
echo "checking files please wait..."
checkfiles "$@"
# abort on error
if [ "$ERROR" == "1" ]
then
echo "An error occured. Please fix and try again"
exit 1
fi
echo
echo "A toal of $TOTAL kilobytes needs to be written"
if [ "$SIMULATE" == "1" ]
then
echo "Simulation - using name '$NAME'"
else
echo "Real Write - using name '$NAME'"
fi
echo
if [ "$TOTAL" -lt "716800" ]
then
echo "I think it should fit on a 700MB CD-R"
echo "Insert media and hit enter when ready"
read foo
MEDIA="cd"
else
echo "This does not fit on a CD-R - We'll use a DVD-R"
echo "Insert media and hit enter when ready"
read foo
MEDIA="dvd"
fi
if [ "$MEDIA" == "cd" ]
then
if dvd+rw-mediainfo $DVD_DEVICE >/dev/null 2>/dev/null
then
echo "CD-R would suffice but DVD Media detected - Using DVD-R"
MEDIA="dvd"
fi
fi
echo "------------------------------------------------------------"
if [ "$MEDIA" == "cd" ]
then
burn_cd "$@"
SmarTraining 工作室 » Linux 下的光盘刻录 http://www.proxyserve.net/index.php?q=aHR0cDovL3NtYXJ0cmFp...
第4页 共5页 2008-10-17 16:56
else
burn_dvd "$@"
fi
参考
http://cnsnap.cn.freebsd.org/doc/zh_CN.GB2312/books/handbook/creating-cds.html [http://www.proxyserve.net
/index.php?q=aHR0cDovL2Nuc25hcC 5jbi5mcmV lYnNkLm9yZy9kb2MvemhfQ 04uR0IyMzEyL2Jvb2tzL2hhbmRib29rL2NyZWF0aW5nLWNkcy5odG1s ]
http://cnsnap.cn.freebsd.org/doc/zh_CN.GB2312/books/handbook/creating-dvds.html [http://www.proxyserve.net
/index.php?q=aHR0cDovL2Nuc25hcC 5jbi5mcmV lYnNkLm9yZy9kb2MvemhfQ 04uR0IyMzEyL2Jvb2tzL2hhbmRib29rL2NyZWF0aW5nLWR2ZHMuaHRtbA
%3D%3D]
http://cdrecord.berlios.de/private/cdrecord.html [http://www.proxyserve.net
/index.php?q=aHR0cDovL2NkcmV jb3JkLmJlcmxpb3MuZGUvcHJpdmF0ZS9jZHJlY29yZC 5odG1s ]
http://crashrecovery.org/oss-dvd.html [http://www.proxyserve.net/index.php?q=aHR0cDovL2NyYXNocmV jb3Zlcnkub3JnL29zcy1kdmQ uaHRtbA
%3D%3D]
http://crashrecovery.org/oss-dvd/HOWTO-ossdvd.html [http://www.proxyserve.net
/index.php?q=aHR0cDovL2NyYXNocmV jb3Zlcnkub3JnL29zcy1kdmQ vSE9XV E8tb3NzZHZkLmh0bWw%3D]
显示源文件
登录
SmarTraining 工作室 » Linux 下的光盘刻录 http://www.proxyserve.net/index.php?q=aHR0cDovL3NtYXJ0cmFp...
第5页 共5页 2008-10-17 16:56