虽然很少使用,不过,某些特别的情况下,没有这东西又不行~因此,我们还是来介绍一下创建光盘镜像文件以及烧录软件吧! 否则,偶而需要用到时,找不到软件数据还挺伤脑筋的!文字模式的烧录行为要怎么处理呢?通常的作法是这样的:

    • 先将所需要备份的数据创建成为一个镜像文件(iso),利用 mkisofs 指令来处理;
    • 将该镜像文件烧录至光盘或 DVD 当中,利用 cdrecord 指令来处理。
      下面我们就分别来谈谈这两个指令的用法吧!

    烧录可开机与不可开机的光盘,使用的方法不太一样喔 !

    • 制作一般数据光盘镜像文件
      我们从 FTP 站捉下来的 Linux 镜像文件 (不管是 CD 还是 DVD) 都得要继续烧录成为实体的光盘/DVD 后, 才能够进一步的使用,包括安装或更新你的 Linux 啦!同样的道理,你想要利用烧录机将你的数据烧录到 DVD 时, 也得要先将你的数据包成一个镜像文件,这样才能够写入DVD片中。而将你的数据包成一个镜像文件的方式就通过 mkisofs 这个指令即可。 mkisofs 的使用方式如下:

    其实 mkisofs 有非常多好用的选项可以选择,不过如果我们只是想要制作“数据光盘”时,上述的选项也就够用了。 光盘的格式一般称为 iso9660 ,这种格式一般仅支持旧版的 DOS 文件名,亦即文件名只能以 8.3 (文件名8个字符,扩展名3个字符) 的方式存在。如果加上 -r 的选项之后,那么文件信息能够被记录的比较完整,可包括UID/GID与权限等等! 所以,记得加这个 -r 的选项。

    • 镜像文件中的目录所在=实际 Linux 文件系统的目录所在
    • /movies/=/srv/movies/ (在 Linux 的 /srv/movies 内的文件,加至镜像文件中的 /movies/ 目录)
    • /linux/etc=/etc (将 Linux 中的 /etc/ 内的所有数据备份到镜像文件中的 /linux/etc/ 目录中)
      我们通过一个简单的范例来说明一下吧。如果你想要将 /root, /home, /etc 等目录内的数据通通烧录起来的话, 先得要处理一下镜像文件,我们先不使用 -graft-point 的选项来处理这个镜像文件试看看:
    1. I: -input-charset not specified, using utf-8 detected in locale settings
    2. genisoimage 1.1.11 Linux
    3. Scanning /root
    4. .....(中间省略).....
    5. Scanning /etc/scl/prefixes
    6. Using SYSTE000.;1 for /system-release-cpe system-release # 被改名子了!
    7. Using CENTO000.;1 for /centos-release-upstream centos-release # 被改名子了!
    8. Using CRONT000.;1 for /crontab crontab
    9. genisoimage: Error: '/etc/crontab' and '/root/crontab' have the same Rock Ridge name 'crontab'.
    10. Unable to sort directory # 文件名不可一样啊!
    11. NOTE: multiple source directories have been specified and merged into the root
    12. of the filesystem. Check your program arguments. genisoimage is not tar.
    13. # 看到没?因为文件名一模一样,所以就不给你创建 ISO 档了啦!
    14. # 请先删除 /root/crontab 这个文件,然后再重复执行一次 mkisofs 吧!
    15. [root@study ~]# rm /root/crontab
    16. [root@study ~]# mkisofs -r -v -o /tmp/system.img /root /home /etc
    17. .....(前面省略).....
    18. 83.91% done, estimate finish Thu Jul 2 18:48:04 2015
    19. 92.29% done, estimate finish Thu Jul 2 18:48:04 2015
    20. Total translation table size: 0
    21. Total rockridge attributes Bytes: 600251
    22. Total directory Bytes: 2150400
    23. Path table sizeBytes): 12598
    24. Done with: The Files Blocks 58329
    25. Writing: Ending Padblock Start Block 59449
    26. Done with: Ending Padblock Blocks 150
    27. Max brk space used 548000
    28. 59599 extents written 116 MB
    29. [root@study ~]# ll -h /tmp/system.img
    30. -rw-r--r--. 1 root root 117M Jul 2 18:48 /tmp/system.img
    31. [root@study ~]# df -h /mnt
    32. Filesystem Size Used Avail Use% Mounted on
    33. /dev/loop0 117M 117M 0 100% /mnt
    34. abrt festival mail.rc rsyncd.conf
    35. adjtime filesystems makedumpfile.conf.sample rsyslog.conf
    36. alex firewalld man_db.conf rsyslog.d
    37. # 看吧!一堆数据都放置在一起!包括有的没有的目录与文件等等!
    38. [root@study ~]# umount /mnt
    39. # 测试完毕要记得卸载!

    由上面的范例我们可以看到,三个目录 (/root, /home, /etc) 的数据通通放置到了镜像文件的最顶层目录中! 真是不方便~尤其由于 /root/etc 的存在,导致那个 /etc 的数据似乎没有被包含进来的样子!真不合理~ 此时我们可以使用 -graft-point 来处理啰!

    如果你想要将实际的数据直接倒进 ISO 档中,那就得要使用这个 -graft-point 来处理处理比较妥当!不然没有分第一层目录, 后面的数据管理实在是很麻烦。如果你是有自己要制作的数据内容,其实最简单的方法,就是将所有的数据预先处理到某一个目录中, 再烧录该目录即可!例如上述的 /etc, /root, /home 先全部复制到 /srv/cdrom 当中,然后跑到 /srv/cdrom 当中, 再使用类似“ mkisofs -r -v -o /tmp/system.img . ”的方式来处理即可!这样也比较单纯~

    • 制作/修改可开机光盘图像挡
      在鸟哥的研究室中,学生常被要求要制作“一键安装”的安装光盘!也就是说,得要修改原版的光盘镜像文件,改成可以自动载入某些程序的流程, 让这片光盘放入主机光驱后,只要开机利用光盘片来开机,那就直接安装系统,不再需要询问管理员一些有的没有的!等于是自动化处理啦! 那些流程比较麻烦,因为得要知道 kickstart 的相关技术等,那个我们先不谈,这里要谈的是,那如何让这片光盘的内容被修改之后, 还可以烧录成为可开机的模样呢?

    因为鸟哥这部测试机的容量比较小,又仅是测试而已啊,因此鸟哥选择 CentOS-7-x86_64-Minimal-1503-01.iso 这个最小安装光盘镜像文件来测试给各位瞧瞧! 假设你已经到昆山科大 取得了最小安装的 Image 档,而且放在 /home 下面~之后我们要将里头的数据进行修改,假设新的镜像文件目录放置于 /srv/newcd 里面,那你应该要这样做:

    1. # 1\. 先观察一下这片光盘里面有啥东西?是否是我们需要的光盘系统!
    2. [root@study ~]# isoinfo -d -i /home/CentOS-7-x86_64-Minimal-1503-01.iso
    3. CD-ROM is in ISO 9660 format
    4. System id: LINUX
    5. Volume id: CentOS 7 x86_64
    6. Volume set id:
    7. Publisher id:
    8. Data preparer id:
    9. Application id: GENISOIMAGE ISO 9660/HFS FILESYSTEM CREATOR C 1993 E.YOUNGDALE C ...
    10. Copyright File id:
    11. .....(中间省略).....
    12. Eltorito defaultboot header:
    13. Bootid 88 bootable
    14. Boot media 0 No Emulation Boot
    15. Load segment 0
    16. Sys type 0
    17. Nsect 4
    18. # 2\. 开始挂载这片光盘到 /mnt ,并且将所有数据完整复制到 /srv/newcd 目录去喔
    19. [root@study ~]# mount /home/CentOS-7-x86_64-Minimal-1503-01.iso /mnt
    20. [root@study ~]# mkdir /srv/newcd
    21. [root@study ~]# rsync -a /mnt/ /srv/newcd
    22. [root@study ~]# ll /srv/newcd/
    23. -rw-r--r--. 1 root root 16 Apr 1 07:11 CentOS_BuildTag
    24. drwxr-xr-x. 3 root root 33 Mar 28 06:34 EFI
    25. -rw-r--r--. 1 root root 215 Mar 28 06:36 EULA
    26. -rw-r--r--. 1 root root 18009 Mar 28 06:36 GPL
    27. drwxr-xr-x. 3 root root 54 Mar 28 06:34 images
    28. drwxr-xr-x. 2 root root 4096 Mar 28 06:34 isolinux
    29. drwxr-xr-x. 2 root root 20480 Apr 1 07:11 Packages
    30. -rw-r--r--. 1 root root 1690 Mar 28 06:36 RPM-GPG-KEY-CentOS-7
    31. -rw-r--r--. 1 root root 1690 Mar 28 06:36 RPM-GPG-KEY-CentOS-Testing-7
    32. -r--r--r--. 1 root root 2883 Apr 1 07:15 TRANS.TBL
    33. # rsync 可以完整的复制所有的权限属性等数据,也能够进行镜像处理!相当好用的指令喔!
    34. # 这里先了解一下即可。现在 newcd/ 目录内已经是完整的镜像文件内容!
    35. # 3\. 假设已经处理完毕你在 /srv/newcd 里面所要进行的各项修改行为,准备创建 ISO 档!
    36. [root@study ~]# ll /srv/newcd/isolinux/
    37. -r--r--r--. 1 root root 2048 Apr 1 07:15 boot.cat # 开机的型号数据等等
    38. -rw-r--r--. 1 root root 84 Mar 28 06:34 boot.msg
    39. -rw-r--r--. 1 root root 281 Mar 28 06:34 grub.conf
    40. -rw-r--r--. 1 root root 35745476 Mar 28 06:31 initrd.img
    41. -rw-r--r--. 1 root root 24576 Mar 28 06:38 isolinux.bin # 相当于开机管理程序
    42. -rw-r--r--. 1 root root 3032 Mar 28 06:34 isolinux.cfg
    43. -rw-r--r--. 1 root root 176500 Sep 11 2014 memtest
    44. -rw-r--r--. 1 root root 186 Jul 2 2014 splash.png
    45. -r--r--r--. 1 root root 2438 Apr 1 07:15 TRANS.TBL
    46. -rw-r--r--. 1 root root 33997348 Mar 28 06:33 upgrade.img
    47. -rw-r--r--. 1 root root 153104 Mar 6 13:46 vesamenu.c32
    48. -rwxr-xr-x. 1 root root 5029136 Mar 6 19:45 vmlinuz # Linux 核心文件
    49. [root@study ~]# cd /srv/newcd
    50. [root@study newcd]# mkisofs -o /custom.iso -b isolinux/isolinux.bin -c isolinux/boot.cat \
    51. > -no-emul-boot -V 'CentOS 7 x86_64' -boot-load-size 4 -boot-info-table -R -J -v -T .

    8.5.2 cdrecord:光盘烧录工具

    新版的 CentOS 7 使用的是 wodim 这个文字界面指令来进行烧录的行为。不过为了相容于旧版的 cdrecord 这个指令, 因此 wodim 也有链接到 cdrecord 就是了!因此,你还是可以使用 cdrecord 这个指令。不过,鸟哥建议还是改用 wodim 比较干脆! 这个指令常见的选项有下面数个:

    • 侦测你的烧录机所在位置:
      文字模式的烧录确实是比较麻烦的,因为没有所见即所得的环境嘛!要烧录首先就得要找到烧录机才行! 而由于早期的烧录机都是使用 SCSI 接口,因此查询烧录机的方法就得要配合着 SCSI 接口的认定来处理了。 查询烧录机的方式为:
    1. [root@study ~]# ll /dev/sr0
    2. brw-rw----+ 1 root cdrom 11, 0 Jun 26 22:14 /dev/sr0 # 一般 Linux 光驱文件名!
    3. [root@study ~]# wodim --devices dev=/dev/sr0
    4. -------------------------------------------------------------------------
    5. 0 dev='/dev/sr0' rwrw-- : 'QEMU' 'QEMU DVD-ROM'
    6. -------------------------------------------------------------------------
    7. [root@demo ~]# wodim --devices dev=/dev/sr0
    8. wodim: Overview of accessible drives 1 found :
    9. -------------------------------------------------------------------------
    10. 0 dev='/dev/sr0' rwrw-- : 'ASUS' 'DRW-24D1ST'
    11. -------------------------------------------------------------------------
    12. # 你可以发现到其实鸟哥做了两个测试!上面的那部主机系统是虚拟机,当然光驱也是仿真的,没法用。

    因为上面那部机器是虚拟机内的虚拟光驱 (QEMU DVD-ROM),那个无法塞入真正的光盘片啦!真讨厌~所以鸟哥只好找另一部实体 CentOS 7 的主机系统来测试。 因此你可以看到下面那部使用的就是正统的 ASUS 光驱了!这样会查阅了吗?注意喔,一定要有 dev=/dev/xxx 那一段,不然系统会告诉你找不到光盘! 这真的是很奇怪!不过,反正我们知道光驱的文件名为 /dev/sr0 之类的,直接带入即可。

    基本上,光盘烧录的指令越来越简单,虽然有很多的参数可以使用,不过,鸟哥认为,学习上面的语法就很足够了! 一般来说,如果有烧录的需求,大多还是使用图形界面的软件来处理比较妥当~使用文字界面的烧录,真的大部分都是烧录数据光盘较多。 因此,上面的语法已经足够工程师的使用啰!