Linux(入门基础):38---镜像文件的建立与光盘刻录(mkisofs、cdrecord、wodim)附:isoinfo,rsync
镜像文件(.iso)与光盘(CD/DVD)的联系
- 镜像文件用于存储文件与数据
- 光盘是一种存储设备,需要将镜像文件进行刻录,将数据刻录到光盘
光盘刻录的步骤
- 第一步:使用mkisofs命令将数据创建成为一个镜像文件(iso)
- 第二步:使用cdrecord、wodim命令将镜像文件刻录到CD/DVD
一、mkisofs:建立镜像文件
1.命令格式
- mkiso [-o 镜像文件] [-Jrv] [-V vol] [-m 排除文件] 待备份文件... [-graft-point isodir=systemdir]
选项与参数..
- -o:后面接想要产生的镜像文件
- -J:产生较兼容Windows的文件名结构,可增加文件名长度到64个Unicode字符
- -r:通过Rock Ridge产生支持Unix/Linux的文件数据,可记录较多的信息(如UID/GID等)
- -v:显示创建ISO文件的过程
- -V:建立Volume,有点像Windows在文件资源管理器内看到的CD卷标
- -m:后面接文件,表示后面的文件不备份到镜像文件中,也可以使用*通配符
- -graft-point(很重要):有嫁接和移植的意思,下面会介绍
2.重要参数介绍以及注意事项
- -r:光盘的格式一般称为iso9660,这种格式一般仅支持旧版的DOS文件名,亦即文件名只能以8.3(文件名8个字符,扩展名3个字符)的方式存在。如果加上了这个选项,那么文件信息能够被记录的比较完整,可包括UID/GID与权限等
-graft-point这个参数很重要,介绍如下
- 如果不加这个选项,默认情况下,所有待备份的文件都会被放到镜像文件的根目录下,因为是放在镜像文件的根目录下,所以如果有相同文件名时,镜像文件的创建就会失败。例如:我们想把Linux下的/root与/home两个目录建立成为一个镜像文件,那么/root与/home两个目录下的内容就都会在镜像文件的根目录下(即放在同一个路径下)。这样对于文件分类管理不易,且如果/root与/home目录下有同名文件时,则镜像文件就会创建失败(因为有同名文件,系统不给你创建iso文件)
- 如果加上了这个参数,后面就需要接:镜像文件路径=Linux系统路径(这样就可以显示的将Linux下的文件放置在镜像文件的某路径下)
3.创建镜像文件(不使用-graft-point选项)
例如:
- 第一步:我们把Linux下的/root与/home两个目录创建成一个镜像文件。镜像文件为system.img,放置在/tmp目录下
mkisofs -r -v -o /tmp/system.img /root /home
- 第二步:然后将system.img通过loop设备挂载到/mnt目录下
mount -o loop /tmp/system.img /mnt
- 第三步:挂载之后,查看/mnt目录内的内容。发现/mnt目录内的内容就是/root与/home目录内的内容,因为没有加-graft-point选项,所以所有文件直接放在镜像文件的根目录下,没有分类
4.创建镜像文件(使用-graft-point选项)
例如:
- 第一步:跟上面一样,我们扔把Linux下的/root与/home两个目录创建成一个镜像文件。镜像文件为system2.img,放置在/tmp目录下
- 同时,Linux的/root目录在镜像文件中的目录为/isoroot,Linux的/home在镜像文件中的目录为/isohome
mkisofs -r -V 'linux_file' -o /tmp/system2.img -graft-point /isoroot=/root /isohome=/home
- 第二步:将system2.img通过loop设备挂载到/data目录下
mount -o loop /tmp/system2.img /data
- 第三步:挂载之后,查看/data目录内容。可以看到就是我们想要的格式
5.制作/修改可启动光盘镜像文件
我们可以通过修改原版的光盘镜像文件,改成可以自动加载某些程序的流程,让光盘房主主机光驱后,只要开机利用光盘来启动,那就直接安装系统,等于自动挂处理,这个比较麻烦,需要用到kickstart技术。此处我们不谈这个,我们下面只介绍,如何让光盘的内容被修改之后,仍可以启动
我们有个光盘在/home下,名为ubuntu-14.04.5-desktop-amd64.iso
- 第一步:查看一下ubuntu-14.04.5-desktop-amd64.iso光盘的内容
isoinfo -d -i /home/ubuntu-14.04.5-desktop-amd64.iso
- 第二步:将这张光盘挂载到/mnt目录下
mount /home/ubuntu-14.04.5-desktop-amd64.iso /mnt
- 第三步:建立一个/srv/newcd目录,然后将光盘的所有数据都复制到/srv/newcd目录下(rsync可以完整的复制所有的权限属性等数据,也能够处理镜像文件)
mkdir /srv/newcd
rsync -a /mnt/ /srv/newcd
- 第四步:假设已经处理完毕你在/srv/newcd里面所要进行的操作,准备简历iso文件
列出/srv/newcd/isolinux/目录内的内容:ll /srv/newcd/isolinux/
进入到/srv/newcd目录内:cd /srv/newcd
输入命令:mkisofs -o /custom.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -V 'Ubuntu 14.04.5' -boot-load-size 4 -boot-info-table -R -J -v -T . (注意,最后是一个路径,我这里是个 '.' 代表当前路径)
此时在你的根目录下就会有一个/custom.iso文件存在,可以将该光盘刻录出来
二、光盘刻录(cdrecord、wodim)
旧版的刻录工具是cdrecord,不过现在使用的是wodim。你可以自己选择使用,下面我使用wodim进行光盘的刻录
1.命令格式
- wodim --devices dev=/dev/sr0 ==>查询刻录机的bus位置
- wodim -v dev=/dev/sr0 blank=[fast/all] ==>摸出重复读写盘
- wodim -v dev=/dev/sr0 -format ==>格式化DVD+RW
- wodim -v dev=/dev/sr0 [可用选项功能] file.iso ==>
相关选项与参数
- --devices :用在扫描磁盘总线并找出可用的刻录机,后续的设备为ATA接口
- -v:在cdreocrd运行的过程中显示过程
- dev=dev/sr0:可以找出此光驱的bus地址,非常重要
- blank=[fast/all] :blank为抹除可重复写入的CD/DVD-RW,使用fast较快,all较完整
- -format:对光盘进行格式化,但是只针对DVD+RW这种格式的DVD而已
可用选项功能:主要是写入CD/DVD时可使用的选项
- -data:指定后面的文件以数据格式写入,不是以CD音轨(-audio)方式写入
- speed=速度值:指定刻录的速度,例如CD可用speed=40倍数,DVD则可用speed=4等
- -eject:指定刻录完毕后自动推出光盘
- fs=Ym:指定缓冲内存大小,可用在镜像文件先暂存至缓冲内存,默认为4m,一般建议可增加到8m,不过,还是得视你的刻录机而定
- driveropts=burnfree:(仅针对DVD使用),打开Buffer Underrun Free模式的写入功能
- -sao:(仅针对DVD使用)支持DVD-RW的格式
2.检测你的刻录机所在位置
- 要刻录首先要找到刻录机才行。由于早期的刻录机都使用SCSI接口,因此查询刻录机的方法就要配合着SCSI接口的标识来处理
- 查询刻录机的命令如下(/dev/sr0是Linux光驱的名称)
wodim --devices dev=/dev/sr0
- 可以看到光驱的名称为:VMware SATA CD01
- 注意:如果你查询到的是'QEMU DVD=ROM'之类的,这个是虚拟机内的虚拟光驱,无法插入真正的光盘
3.开始CD/DVD的刻录操作
上面我们使用mkisofs在/tmp下面建立的system2.img镜像文件,我们下面开始对这个镜像文件进行刻录
- 第一步:先抹除光盘的原始内容(非可重复读写可省略此步骤)
wodim -v dev=/dev/sr0 blank=fast
此步会出现一堆信息告诉你抹除的速度,而且会有10秒钟的时间等待你的取消
- 第二步:开始刻录
woism -v dev=/dev/sr0 speed=4 -dummy -eject /tmp/system2.img
因为加上了-eject选项,所以刻录完成之后,DVD会自动推出光驱,记得推回去
- 第三步:刻录完成之后,挂载一下(挂载到/mnt目录下),看看一下里面的内容
挂载:mount /dev/sr0 /mnt
查看内容:ll /mnt