linux 下制作可启动 img/iso 文件

Will0 2012-04-18

来源:http://hi.baidu.com/sxpspace/blog/item/840bbd0eda465ecd7bcbe183.html

总的来说,制作镜像文件有三种方法,cp,cat,dd和其它专用工具。cp,cat和dd都可以从设备复制文件来创建镜像。而dd命令更为强大,可以通过指定块大小,块多少来直接创建镜像。

IMG文件:

因为cp,cat只能从设备来制作镜像,但又没有专用工具来做IMG文件,故这里用dd命令来制作IMG文件。

1,制作

ddif=/dev/zeroof=fdimage.imgcount=2880

or

ddif=/dev/zeroof=fdimage.imgbs=1024count=1440

2,格式化

mkfs.msdosfdimage.img

3,修改

可以用下面的命令mount后,可直接修改

mount-oloop*.img/mnt

4,可启动

因为制作可启动镜像一定会用到虚拟机,推荐用Virtualbox,先到网上下个DOS启动盘来引导。用DOS的sys命令传递系统。推荐使用FreeDOS,属自由软件。也可用dd命令来传递引导引导信息,并复制启动启动时所需文件来做启动盘。以FreeDOS为例,传递启动信息用以下命令,其中下载的启动盘为balder10.img文件

ddif=balder10.imgof=fdimage.imgbs=512count=1conv=notrunc

多系统用grub4dos,

1),用grub.exe引导多系统

2),安装grub到MBR,用grldr来引导多系统。当然也可用同上面一样的办法用dd直接写入引导信息。

bootlace.com--floppy--chs0x00

注:才发现用dd命令只能从逻辑扇区开始copy,先前我想可否用dd来将grldr.mbr写入u盘,我用自己的U盘试了,结果不能打开了。因为我的U盘为fat16格式,逻辑扇区开始是OBR,接着是FAT表,结果把FAT1表给盖了,那时还没有想到还有FAT2呢,就格了,现在想起来郁闷啊,好多东西都没有了。

为什么软盘可以呢,因为它就没有前面的63个扇区,直接从逻辑0扇区开始的。

ISO文件:

因为文件系统的关系,就不能用dd来直接做ISO镜像了(当然,它还是可以从设备制作ISO镜像)。ISO文件的制作有专用工具,

1,制作

mkisofs-r-ocdimage.iso/home/XXX/cddir

2,格式化

用mkiso制作的iso已有文件系统iso9660

3,可启动

无论是引导单系统还是引导多系统都还是用mkisofs这个工具,只是加载到光盘的bootloader不一样而已。当然也可以将DOS的引导器(也就是它的引导扇区)或windows的引导器(XP系统的是ntldr)放入让光盘引导。下面只讨论grub4dos的使用

1),用grub.exe引导多系统

用DOS加载grub.exe引导多系统

2),将grub安装到光盘MBR

在制作时可用下面的命令直接生成可启动镜像,其中grldr,menu.lst要放在cddir目录下,也就是在cd根目录。

mkisofs-R-bgrldr-no-emul-boot-boot-load-seg0x1000-ocdimage.isocddir

mkisofs-R-bgrldr-no-emul-boot-boot-load-size4-ocdimage.isocddir

PS,下面给出dd命令和mkisofs参数说明

dd(convertandcopyfiles)

dd是Linux/UNIX下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

dd的主要选项:

指定数字的地方若以下列字符结尾乘以相应的数字:

b=512,c=1,k=1024,w=2,xm=numberm

if=file

输入文件名,缺省为标准输入。

of=file

输出文件名,缺省为标准输出。

ibs=bytes

一次读入bytes个字节(即一个块大小为bytes个字节)。

obs=bytes

一次写bytes个字节(即一个块大小为bytes个字节)。

bs=bytes

同时设置读写块的大小为bytes,可代替ibs和obs。

cbs=bytes

一次转换bytes个字节,即转换缓冲区大小。

skip=blocks

从输入文件开头跳过blocks个块后再开始复制。

seek=blocks

从输出文件开头跳过blocks个块后再开始复制。(通常只有当输出文件是磁盘或磁带时才有效)

count=blocks

仅拷贝blocks个块,块大小等于ibs指定的字节数。

conv=conversion[,conversion...]

用指定的参数转换文件。

转换参数:

ascii转换EBCDIC为ASCII。

ebcdic转换ASCII为EBCDIC。

ibm转换ASCII为alternateEBCDIC.

block把每一行转换为长度为cbs的记录,不足部分用空格填充。

unblock

使每一行的长度都为cbs,不足部分用空格填充。

lcase把大写字符转换为小写字符。

ucase把小写字符转换为大写字符。

swab交换输入的每对字节。Unlikethe

Unixdd,thisworkswhenanoddnumberof

bytesareread.Iftheinputfilecontains

anoddnumberofbytes,thelastbyteis

simplycopied(sincethereisnothingto

swapitwith).

noerror

出错时不停止。

notrunc

不截短输出文件。

sync把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。

由于dd命令允许二进制方式读写,所以特别适合在原始物理设备上进行输入/输出。例如可以用下面的命令为软盘建立镜像文件:

ddif=/dev/fd0of=disk.imgbs=1440k

有趣的是,这个镜像文件能被HD-Copy,Winimage等工具软件读出。再如把第一个硬盘的前512个字节存为一个文件:

ddif=/dev/hdaof=disk.mbrbs=512count=1

mkisofs(makeisofilesystem)

功能说明:建立ISO9660映像文件。

语  法:mkisofs[-adDfhJlLNrRTvz][-print-size][-quiet][-A<应用程序ID>][-abstract<摘要文件>][-b<开机映像文件>][-biblio][-c<开机文件名称>][-C<盘区编号,磁区编号>][-copyright<版权信息文件>][-hide<目录或文件名>][-hide-joliet<文件或目录名>][-log-file<记录文件>][-m<目录或文件名>][-M<开机映像文件>][-o<映像文件>][-p<数据处理人>][-P<光盘发行人>][-sysid<系统ID>][-V<光盘ID>][-volset<卷册集ID>][-volset-size<光盘总数>][-volset-seqno<卷册序号>][-x<目录>][目录或文件]

补充说明:mkisofs可将指定的目录与文件做成ISO9660格式的映像文件,以供刻录光盘。

参  数:

-a或--allmkisofs通常不处理备份文件。使用此参数可以把备份文件加到映像文件中。

-A<应用程序ID>或-appid<应用程序ID>指定光盘的应用程序ID。

-abstract<摘要文件>指定摘要文件的文件名。

-b<开机映像文件>或-eltorito-boot<开机映像文件>指定在制作可开机光盘时所需的开机映像文件。

-biblio指定ISBN文件的文件名,ISBN文件位于光盘根目录下,记录光盘的ISBN。

-c<开机文件名称>制作可开机光盘时,mkisofs会将开机映像文件中的全-eltorito-catalog<开机文件名称>全部内容作成一个文件。

-C<盘区编号,盘区编号>将许多节区合成一个映像文件时,必须使用此参数。

-copyright<版权信息文件>指定版权信息文件的文件名。

-d或-omit-period省略文件后的句号。

-D或-disable-deep-relocationISO9660最多只能处理8层的目录,超过8层的部分,RRIP会自动将它们设置成ISO9660兼容的格式。使用-D参数可关闭此功能。

-f或-follow-links忽略符号连接。

-h显示帮助。

-hide<目录或文件名>使指定的目录或文件在ISO9660或RockRidgeExtensions的系统中隐藏。

-hide-joliet<目录或文件名>使指定的目录或文件在Joliet系统中隐藏。

-J或-joliet使用Joliet格式的目录与文件名称。

-l或-full-iso9660-filenames使用ISO966032字符长度的文件名。

-L或-allow-leading-dots允许文件名的第一个字符为句号。

-log-file<记录文件>在执行过程中若有错误信息,预设会显示在屏幕上。

-m<目录或文件名>或-exclude<目录或文件名>指定的目录或文件名将不会房入映像文件中。

-M<映像文件>或-prev-session<映像文件>与指定的映像文件合并。

-N或-omit-version-number省略ISO9660文件中的版本信息。

-o<映像文件>或-output<映像文件>指定映像文件的名称。

-p<数据处理人>或-preparer<数据处理人>记录光盘的数据处理人。

-print-size显示预估的文件系统大小。

-quiet执行时不显示任何信息。

-r或-rational-rock使用RockRidgeExtensions,并开放全部文件的读取权限。

-R或-rock使用RockRidgeExtensions。

-sysid<系统ID>指定光盘的系统ID。

-T或-translation-table建立文件名的转换表,适用于不支持RockRidgeExtensions的系统上。

-v或-verbose执行时显示详细的信息。

-V<光盘ID

相关推荐