linux 下制作可启动 img/iso 文件
来源: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