一、镜像文件(.iso)与光盘(CD/DVD)的关系

  • 镜像文件用于存储文件与数据
  • 光盘是一种存储设备,需要将镜像文件进行刻录,将数据刻录到光盘
  • 光盘刻录的步骤:
    • 第一步:使用mkisofs命令将数据创建成为一个镜像文件(iso)
    • 第二步:使用cdrecord、wodim命令将镜像文件刻录到CD/DVD

二、mkisofs:建立镜像文件

  • 命令格式
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(很重要):有嫁接和移植的意思,下面会介绍
  • 重要参数介绍以及注意事项
    • -r:光盘的格式一般称为iso9660,这种格式一般仅支持旧版的DOS文件名,亦即文件名只能以8.3(文件名8个字符,扩展名3个字符)的方式存在。如果加上了这个选项,那么文件信息能够被记录的比较完整,可包括UID/GID与权限等
  • -graft-point这个参数很重要,介绍如下
    • 如果不加这个选项,默认情况下,所有待备份的文件都会被放到镜像文件的根目录下,因为是放在镜像文件的根目录下,所以如果有相同文件名时,镜像文件的创建就会失败。例如:我们想把Linux下的/root与/home两个目录建立成为一个镜像文件,那么/root与/home两个目录下的内容就都会在镜像文件的根目录下(即放在同一个路径下)。这样对于文件分类管理不易,且如果/root与/home目录下有同名文件时,则镜像文件就会创建失败(因为有同名文件,系统不给你创建iso文件)
    • 如果加上了这个参数,后面就需要接:镜像文件路径=Linux系统路径(这样就可以显示的将Linux下的文件放置在镜像文件的某路径下)

创建镜像文件(不使用-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选项,所以所有文件直接放在镜像文件的根目录下,没有分类

创建镜像文件(使用-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目录内容。可以看到就是我们想要的格式

制作/修改可启动光盘镜像文件

  • 我们可以通过修改原版的光盘镜像文件,改成可以自动加载某些程序的流程,让光盘房主主机光驱后,只要开机利用光盘来启动,那就直接安装系统,等于自动挂处理,这个比较麻烦,需要用到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进行光盘的刻录
  • 命令格式:
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的格式

检测你的刻录机所在位置

  • 要刻录首先要找到刻录机才行。由于早期的刻录机都使用SCSI接口,因此查询刻录机的方法就要配合着SCSI接口的标识来处理。查询刻录机的命令如下(/dev/sr0是Linux光驱的名称)
wodim --devices dev=/dev/sr0

  • 可以看到光驱的名称为:VMware SATA CD01
  • 注意:如果你查询到的是'QEMU DVD=ROM'之类的,这个是虚拟机内的虚拟光驱,无法插入真正的光盘

开始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

  • 我是小董,V公众点击"笔记白嫖"解锁更多【Linux入门基础】资料内容。

Logo

更多推荐