分类: BSD
2007-10-30 14:10:46
1. 历史介绍
随着 Redhat 公司的 Cygwin 日益流行,我们可以把 mkisofs 编译成为 。
以下资料主要根据原版 mkisofs.c 的文件头翻译而成,并参考了一些水木清华的资料。
1) 最早的创始人是 (1993)
2) 现在是德国的 负责维护 (1999-Now)
3) 其中, 提供了 Apple HFS 格式支持 (2000)
4) 由于 mkisofs 不支持中文的文件名,网上出现几个方法,有人甚至修改内核。
其中,水木清华的 的解决方案最流行。2000 Apr, 1.12b5 +gbk
5) 由于 mkisofs 不支持类似于微软的 cdimage 的 MD5 空间优化,使用不方便。
所以,水木清华的 提出了解决方案。2000 Oct, 1.12b5 +gbk +md5
6) 水木清华的 在前人的研究基础上,成功推出 1.15a23 +gbk 以及
1.15a29 +gbk +md5 完美版,修正原有补丁的 gbk 引起 lowercase 错误,并且
纠正 md5 数值不准确等问题。目前最新版是 1.15a40 +gbk +md5 完美版。
7) 最近在 申请了项目空间,加盟,请看, 最新。
成立项目组的宗旨,是希望发挥广大镜象制作爱好者的集体智慧,完善这个工具。
2.
1) 为了让大家充分了解 的功能,我们把它跟另三个很有名的工具进行对比。
软件功能\软件名称 |
cd everywhere |
winiso |
cdimage |
mkisofs |
ISO9660(DOS/Unix) | YES | YES | YES | YES |
Joliet (MS Win32) | YES | YES | YES | YES |
Rock Ridge (Unix) | YES | NO | NO | YES |
Apple HFS (MacOS) | YES | NO | NO | YES |
GBK Code Support | YES | YES | YES | YES |
MD5 Optimization | NO | NO | YES | YES |
Show MD5 Process | NO | NO | NO | YES |
MD5 Before Write | NO | NO | NO | YES |
Make Bootable CD | NO | YES | YES | YES |
Work in Pure GUI | YES | YES | NO (Console) | NO (Console) |
GUI Applications | (NO Need) | (NO Need) | Active ISO | ISO Maker |
Have Source Code | NO | NO | NO | YES |
2) 要做 Unix/Linux 下的数据盘或者开机启动盘,必须使用 Unix Rock Ridge 格式。
3) 使用 MD5 Optimization 功能,可以利用 MD5 发散序列技术作为身份鉴定,辨别
出内容相同的文件(文件名、文件时间不一定相同),然后把这些“相同的文件”
利用 ISO 文件的定位表技术,让目录区域里不同位置的文件指向同一个内容区域,
从而节省对应存储空间。该技术的典型应用,是做 Win2k、WinXp 的多合一光盘。
4) 使用 MD5 Optimization 功能,如果文件很多就会让机器的屏幕长期发呆,用户
可能会以为系统死机。Show MD5 Process 就是在计算 MD5 值的时候显示文件名。
5) 使用 MD5 Optimization 功能,如果硬盘空间只剩下 1G,而优化前的文件为 3G,
优化后为 650M,采用 MD5 Before Write 就可以顺利执行,否则会告警空间不足。
6) 开放源码的最大好处,是每个人都可以学习、修改、发布这个软件,从而发挥了
集体智慧的优点。而 Linux/OpenSource 的盈利模式是技术支持,也逐渐被认可。
3.
1) 考虑到 mkisofs 是一个 Console Program(命令行程序),它在 Unix/Linux 下只
能在命令行运行,而在 Win2K/WinXp 下支持命令行以及使用外挂程序 。
2) 我们简单解释一下一些常见的用法,具体那些比较复杂的请用 mkisofs --help 来
查看,或者到 Google 去查找关键词“mkisofs usage”。请大家阅读下面的表格。
序号\项目 | 开关名称(Option) | 英文含义(English) | 中文含义(Chinese) |
01 | -o | Set output file name | 设置输出文件名 |
02 | -no-emul-boot |
Boot image is 'no emulation' image |
非模拟模式启动 |
03 | -eltorito-boot | Set El Torito boot image name | 设置EL启动文件 |
04 | -hide-rr-moved | Rename RR_MOVED to .rr_moved in Rock Ridge tree | 隐藏 Unix RR 目录 |
05 | -hide | Hide ISO9660/RR file | 隐藏 ISO9660 文件 |
06 | -hide-joliet | Hide Joliet file | 隐藏 Joliet 文件 |
07 | -V | Set Volume ID | 设置文件卷标信息 |
08 | -copyright | Set Copyright filename | 设置文件版本信息 |
09 | -J |
Generate Joliet directory information |
支持 Joliet 格式 |
10 | -O | Optimize for iso space(md5 technology) | 采用 MD5 空间优化 |
11 | -R | Generate Rock Ridge directory information | 支持Rock Ridge格式 |
12 | -N | Omit version number from ISO9660 filename (violates ISO9660) |
忽略版本号(如果使用DiskEmu必须选用) |
13 | -l | Allow full 31 character filenames for ISO9660 names | 允许长文件名 |
14 | -relaxed-filenames | Allow 7 bit ASCII except lower case characters (violates ISO9660) | 扩展的文件名 |
15 | -gbk4dos-filenames | Allow 8 bit ASCII GBK standard code characters (violates ISO9660) | DOS下支持中文 |
16 | -gbk4win-filenames | Allow 8 bit ASCII GBK standard code characters (violates ISO9660) | WIN下支持中文 |
3) 下面是屏幕文本,在命令行下运行一个脚本(Script)或者说是批处理(Bat, Cmd)
开头是版本信息,其次是命令的正文,ISO9660 告警可以不用管,然后开始扫描。
GNU Released by Joerg Schilling, Modified by Wwashington.
Thanks to dfbb, COMMAN at smth.edu.cn for the great help.
mkisofs 1.15a40 +gbk +md5 (i686-pc-cygwin)
mkisofs -o /cdr/dsk3.iso -no-emul-boot -eltorito-boot loader.bin -hide-rr-moved
-hide loader.bin -hide-joliet loader.bin -hide boot.catalog -hide-joliet boot.ca
talog -V "WinXPPro" -copyright "Microsoft China" -J -O -R -N -l -relaxed-filenam
es -gbk4dos-filenames -gbk4win-filenames /cdr/boot /cdr/root /cdr/dsk1 /cdr/dsk2
/cdr/dsk3
Warning: creating filesystem that does not conform to ISO-9660.
Start actual directory scan, this may take a while.
4) 下面是屏幕抓图,告诉大家怎样用 来更方便地生成 mkisofs 的脚本。
Step A. 首先你要定义需要扫描的目录,这里面 /cdr, /cdr/boot, /cdr/root
是必须定义的。其中 /cdr 是输出 ISO 的目录,/cdr/boot 是可引导光盘镜象
的系统文件专用目录,/cdr/root 是整个光盘的基本文件结构。其余三个 dsk
是可选的。如果你的文件因为空间不够而分散在不同的逻辑盘、或者为了便于
管理而分散在不同目录,就可以把这些目录映射(或者叫设备安装 mount)到
/cdr/dsk1, /cdr/dsk2, /cdr/dsk3 中,并选中 ISO Options 里的 MD5 优化。
Step B. 做好以上准备,直接按 Run 键就可以得到目标文件了。当然,在这个
界面里,你可以把常用的资料保存起来,下次可以调用相同方案,即 Profile。
4. 源码维护
1) 首先你必须下载最新版的 ,并懂得用 Cygwin 编译,否则就谈不上维护。
2) 下载一份包含了 +gbk +md5 补丁源代码的 mkisofs,然后用版本管理软件研究新 旧代码的异同。目前来说,在 Win32 下比较常用的有 Araxis Merge 和 WinCVS。 当你能够编译发行版并且自己写补丁的时候,就具备了维护最新的发行版的能力。
3) 读懂了新旧代码的差异,你可以动手编译上述补丁,它已经证实可以稳定运行。 当然,你也可以先编译原版和 md5 完美版(按下列步骤进行),再来研究异同点。 补丁分成两部分,是为了更容易理解和维护两个独立的功能,即 +gbk 和 +md5。
4) 其实定制 mkisofs 补丁最辛苦的是第一次接触。我学习、修正 1.12b5 的补丁并且 移植到 1.15a29 上,当时花了大约十五小时,现在维护代码 1.15a40 只需一小时。 关键问题在于理解,理解之后就要认真的修改,编译好了还要反复测试,严格把关。 5) 由于工作的关系,我的空闲时间日益减少,对于有兴趣、有能力维护 代码 的朋友,欢迎和我联系,我们可以把最新补丁放到 或 上面。 6) 最后需要说明的是,就 +gbk +md5 补丁问题,我和德国原作者 Joerg 交换过看法。 Joerg 认为 +gbk 仅仅解决中文问题,他将来会写一个全新的功能来支持国际语言, 此外,他答应了考虑把 +md5 功能纳入 mkisofs 的发行版,目前还没有明确的答复。 5. 举例 将磁盘上的文件做成iso # mkisofs -o /usr/src/atyu30.iso -R /data/log -o: 指定输出文件名 -R: 支持长文件名(如果/data/log下有中文,-R 务必加上) |