linux 光盘刻录
虽然现在DVD/CD越来越少了,基本被大容量usb移动硬盘取代了。
但是在遇到使用DVD/CD的场合,也要知道如何创建iso镜像文件,以及怎么将iso镜像文件刻录到DVD/CD。
针对DVD/CD光盘,通常有如下的操作:
利用mkisofs指令创建光盘镜像文件iso;
利用cdrecord指令将镜像文件刻录到DVD/CD光盘。
我们从centos官网下载下来的linux镜像文件,需要刻录到DVD/CD光盘中才能使用。
根据光盘是否用于开机启动,iso镜像文件也分为可开机镜像文件和不可开机镜像文件,
这两种镜像文件的制作有些差异。
mkisofs命令用于制作DVD/CD光盘镜像文件,mkisofs常用命令格式如下所示:
默认情况下,所有要被加到镜像文件中的文件都会被放置到镜像文件的根目录中, 可能会造成刻录后的文件不易分类的情况。 可以使用-graft-point选项,利用如下的方法来定义位于镜像文件中的目录, 例如:
镜像文件中的目录=实际Linux文件系统的目录
/movies/=/srv/movies/ (在Linux的/srv/movies内的文件,加至镜像文件中的/movies/目录)
/linux/etc=/etc (将Linux中的/etc/内的所有数据备份到镜像文件中的/linux/etc/目录中)
例如想要将/root, /home, /etc等目录内的数据刻录到光盘, 先制作镜像文件,先不使用-graft-point选项来处理这个镜像文件:
mkisofs无法建立ISO文件了!
可以先将/root/crontab重命名为/root/crontabbak,再执行一次mkisofs:
测试完毕后卸载光盘镜像:
此时使用-graft-point选项指定存放目录:
如果你想要将实际的数据直接倒进ISO文件中,那就得要使用这个-graft-point来处理比较妥当! 不然没有分第一层目录, 后面的数据管理实在是很麻烦。如果你是有自己要制作的数据内容,其实最简单的方法, 就是将所有的数据预先处理到某一个目录中, 再刻录该目录即可! 例如上述的/etc, /root, /home先全部复制到/srv/cdrom当中,然后跑到 /srv/cdrom 当中, 再使用如下的方式处理即可:
在的研究室中,学生常被要求要制作『一键安装』的安装光盘!也就是说,得要修改原版的光盘
镜像文件,改成可以自动加载某些程序的流程, 让这片光盘放入主机光驱后,只要开机利用光盘片
来开机,那就直接安装系统,不再需要询问管理员一些有的没有的!等于是自动化处理啦! 那些流
程比较麻烦,因为得要知道 kickstart 的相关技术等,那个我们先不谈,
这里要谈的是,那如何让这片光盘的内容被修改之后, 还可以刻录成为可开机的模样呢?因为这部测试机的容量比较小,又仅是测试而已啊,因此选择
CentOS-7-x86_64-Minimal-1503-01.iso 这个最小安装光盘镜像文件来测试给各位瞧瞧! 假设你已经
到昆山科大 http://ftp.ksu.edu.tw/FTP/CentOS/7/isos/x86_64/ 取得了最小安装的 Image 文件,而且放在
/home 下面~之后我们要将里头的数据进行修改,假设新的镜像文件目录放置于 /srv/newcd 里面,那你应该要这样做:
1. 先观察一下这片光盘里面有啥东西?是否是我们需要的光盘系统!
3. 假设已经处理完毕你在 /srv/newcd 里面所要进行的各项修改行为,准备建立 ISO 文件!
新版的CentOS 7可以使用wodim命令刻录镜像文件。为了兼容旧版的cdrecord指令, 因此wodim也有连结到cdrecord就是了!
因此,还是可以使用 cdrecord指令。不过,建议还是改用wodim比较干脆!
这个指令常见的选项有下面数个:
相对图形界面模式所见即所得的!文本模式的刻录相对比较麻烦,需要先找到刻录机!
由于早期的刻录机都是使用SCSI接口,因此查询刻录机的方法就得要配合着SCSI接口的认定来处理了。
查询刻录机的方式为:
因此在这里与下面的wodim用法,只能使用另一部Demo机器测试给大家看了!
因为上面那部机器是虚拟机内的虚拟光驱 (QEMU DVD-ROM),那个无法塞入真正的光盘片啦! 所以只好找另一部实体 CentOS 7 的主机系统来测试。 因此你可以看到下面那部使用的就是正统的 ASUS 光驱了! 注意喔,一定要有 dev=/dev/xxx 那一段,不然系统会告诉你找不到光盘! 不过,反正我们知道光驱的文件名为 /dev/sr0 之类的,直接带入即可。
好了,那么现在要如何将 /tmp/system.img 刻录到 CD/DVD 里面去呢?因为要节省空间与避免浪费,
拿之前多买的可重复读写的 DVD 四倍数 DVD 片来操作! 因为是可抹除的 DVD,因此可能得要在刻录前先抹除 DVD 片里面的数据才行喔!
0. 先抹除光盘的原始内容:(非可重复读写则可略过此步骤)
1. 开始刻录:
2. 刻录完毕后,测试挂载一下,检验内容:
如果你的Linux是用来做为服务器之用的话,那么无时无刻的去想如何备份重要数据是相当重要的! 关于备份我们会在第五篇再仔细的谈一谈,这里你要会使用这些工具即可!
针对DVD/CD光盘,通常有如下的操作:
利用mkisofs指令创建光盘镜像文件iso;
利用cdrecord指令将镜像文件刻录到DVD/CD光盘。
mkisofs创建iso镜像文件
回到顶部制作一般数据光盘镜像文件
回到顶部[root@initroot ~]# mkisofs [-o 镜像文件] [-Jrv] [-V vol] [-m file] 待备份文件... \ > -graft-point isodir=systemdir ...选项与参数:
-o :后面接生成的镜像文件名。mkisofs有非常的选项可以选择,如果只是想要制作数据光盘的话,上述的选项也就够用了。 光盘的格式一般称为iso9660,这种格式一般仅支持旧版的DOS文件名, 即文件名只能以8.3(文件名8个字符,扩展名3个字符)的方式存在。 -r选项可以使文件信息能够被记录的比较完整,包括UID/GID与权限等等! 所以最好加上-r选项。
-J :产生较兼容于windows机器的文件名结构,可增加文件名长度到64个unicode字符
-r :透过Rock Ridge产生支持Unix/Linux的文件数据,可记录较多的信息(如UID/GID等);
-v :显示创建ISO文件的过程
-V vol :建立Volume,有点像Windows在文件总管内看到的CD title;
-m file :-m为排除(exclude)文件的意思,后面的文件不备份到镜像文件中,可使用*通配符;
-graft-point :graft有转嫁或移植的意思,相关资料在下面文章内说明。
默认情况下,所有要被加到镜像文件中的文件都会被放置到镜像文件的根目录中, 可能会造成刻录后的文件不易分类的情况。 可以使用-graft-point选项,利用如下的方法来定义位于镜像文件中的目录, 例如:
镜像文件中的目录=实际Linux文件系统的目录
/movies/=/srv/movies/ (在Linux的/srv/movies内的文件,加至镜像文件中的/movies/目录)
/linux/etc=/etc (将Linux中的/etc/内的所有数据备份到镜像文件中的/linux/etc/目录中)
例如想要将/root, /home, /etc等目录内的数据刻录到光盘, 先制作镜像文件,先不使用-graft-point选项来处理这个镜像文件:
[root@initroot ~]# mkisofs -r -v -o /tmp/system.img /root /home /etc I: -input-charset not specified, using utf-8 (detected in locale settings) genisoimage 1.1.11 (Linux) Scanning /root Scanning /root/.local Scanning /root/.local/share ...省略... Scanning /etc/fonts/conf.avail Scanning /etc/fonts/conf.d Scanning /etc/python3 Using SYSTE000.;1 for /system-release-cpe (system-release) # 被改名子了! Using CENTO000.;1 for /centos-release-upstream (centos-release) # 被改名子了! Using CRONT000.;1 for /crontab (crontab) genisoimage: Error: '/etc/crontab' and '/root/crontab' have the same Rock Ridge name 'crontab'. # 文件名不可一样啊! Unable to sort directory NOTE: multiple source directories have been specified and merged into the root of the filesystem. Check your program arguments. genisoimage is not tar.上面/etc/和/root/目录下有一个同名文件crontab,由于我们没有加-graft-point选项, 所以这两个文件都会被存放在镜像文件的根目录下,这样在镜像文件根目录下就会有两个同名文件了,这肯定是不行的。 所以上面mkisofs就是报错提示'/etc/crontab' and '/root/crontab' have the same Rock Ridge name 'crontab'.
mkisofs无法建立ISO文件了!
可以先将/root/crontab重命名为/root/crontabbak,再执行一次mkisofs:
[root@initroot ~]# mv /root/crontab /root/crontabbak [root@initroot ~]# mkisofs -r -v -o /tmp/system.img /root /home /etc ...省略... Using 20_UN005.CON;1 for /etc/fonts/conf.d/20-unhint-small-dejavu-lgc-serif.conf (20-unhint-small-dejavu-lgc-sans.conf) Using 66_LO008.CON;1 for /etc/fonts/conf.d/66-lohit-bengali.conf (66-lohit-odia.conf) Using 89_TL002.CON;1 for /etc/fonts/conf.d/89-tlwg-kinnari-synthetic.conf (89-tlwg-laksaman-synthetic.conf) Writing: Initial Padblock Start Block 0 Done with: Initial Padblock Block(s) 16 Writing: Primary Volume Descriptor Start Block 16 Done with: Primary Volume Descriptor Block(s) 1 Writing: End Volume Descriptor Start Block 17 Done with: End Volume Descriptor Block(s) 1 Writing: Version block Start Block 18 Done with: Version block Block(s) 1 Writing: Path table Start Block 19 Done with: Path table Block(s) 412 Writing: Directory tree Start Block 431 Done with: Directory tree Block(s) 41189 Writing: Directory tree cleanup Start Block 41620 Done with: Directory tree cleanup Block(s) 0 Writing: Extension record Start Block 41620 Done with: Extension record Block(s) 1 Writing: The File(s) Start Block 41621 4.08% done, estimate finish Mon Feb 10 20:18:50 2020 4.54% done, estimate finish Mon Feb 10 20:20:06 2020 4.99% done, estimate finish Mon Feb 10 20:23:28 2020 5.45% done, estimate finish Mon Feb 10 20:27:30 2020 ...省略... 99.38% done, estimate finish Mon Feb 10 20:42:49 2020 99.83% done, estimate finish Mon Feb 10 20:42:50 2020 Total translation table size: 0 Total rockridge attributes bytes: 19787839 Total directory bytes: 77238272 Path table size(bytes): 419042 Done with: The File(s) Block(s) 1060094 Writing: Ending Padblock Start Block 1101715 Done with: Ending Padblock Block(s) 150 Max brk space used c3df000 1101865 extents written (2152 MB)用mount将该镜像文件挂载在/mnt目录,然后用df和ls观察该镜像文件信息:
[root@initroot ~]# ls -lh /tmp/system.img -rw-r--r-- 1 root root 2.2G Feb 10 20:42 /tmp/system.img [root@initroot ~]# mount -o loop /tmp/system.img /mnt [root@initroot ~]# df -h /mnt/ Filesystem Size Used Avail Use% Mounted on /dev/loop0 2.2G 2.2G 0 100% /mnt [root@initroot ~]# ls /mnt/ 2 calendar dpkg hddtemp.db libao.conf modules pnm2ppa.conf rsyslog.conf thermald acpi casper.conf drirc hdparm.conf libaudit.conf modules-load.d polkit-1 rsyslog.d thunderbird adduser.conf chatscripts emacs host.conf libblockdev mono postfix samba timezone通过上面的观察可以看到原本在linux不同目录下的文件都被放在镜像文件的根目录下了.一堆数据都放置在一起!包括有的没有的目录与文件等等!
测试完毕后卸载光盘镜像:
[root@initroot ~]# umount /mnt上面我们发现三个目录/root, /home, /etc中的数据都被放置到了镜像文件的最顶层目录中! 这显然是不合理的。
此时使用-graft-point选项指定存放目录:
[root@initroot ~]# mkisofs -r -V 'linux_file' -o /tmp/system.img \ > -m /root/etc -graft-point /root=/root /home=/home /etc=/etc [root@initroot ~]# ls -lh /tmp/system.img -rw-r--r-- 1 root root 2.2G Feb 10 21:26 /tmp/system.img上面会建立一个大文件,-graft-point后面接的就是我们要备份的数据,等号左边是在镜像文件内的目录,右侧则是linux中的实际的数据。
[root@initroot ~]# mount -o loop /tmp/system.img /mnt [root@initroot ~]# ls -al /mnt total 546 dr-xr-xr-x 5 root root 2048 Feb 10 21:01 . drwxr-xr-x 23 root root 4096 Oct 8 19:23 .. dr-xr-xr-x 152 root root 34816 Feb 8 22:42 etc dr-xr-xr-x 5 root root 4096 Feb 8 21:20 home dr-xr-xr-x 15 root root 4096 Feb 10 20:15 root dr-xr-xr-x 3890 root root 514048 Feb 10 21:01 rr_moved [root@initroot ~]# umount /mnt上面可以看出数据分门别类存放在各个目录中了。
如果你想要将实际的数据直接倒进ISO文件中,那就得要使用这个-graft-point来处理比较妥当! 不然没有分第一层目录, 后面的数据管理实在是很麻烦。如果你是有自己要制作的数据内容,其实最简单的方法, 就是将所有的数据预先处理到某一个目录中, 再刻录该目录即可! 例如上述的/etc, /root, /home先全部复制到/srv/cdrom当中,然后跑到 /srv/cdrom 当中, 再使用如下的方式处理即可:
mkisofs -r -v -o /tmp/system.img .
制作可开机光盘镜像文件
回到顶部1. 先观察一下这片光盘里面有啥东西?是否是我们需要的光盘系统!
[root@initroot ~]# isoinfo -d -i /home/CentOS-7-x86_64-Minimal-1503-01.iso CD-ROM is in ISO 9660 format System id: LINUX Volume id: CentOS 7 x86_64 Volume set id: Publisher id: Data preparer id: Application id: GENISOIMAGE ISO 9660/HFS FILESYSTEM CREATOR (C) 1993 E.YOUNGDALE (C) ... Copyright File id: .....(中间省略)..... Eltorito defaultboot header: Bootid 88 (bootable) Boot media 0 (No Emulation Boot) Load segment 0 Sys type 0 Nsect 42. 开始挂载这片光盘到/mnt,并且将所有数据完整复制到/srv/newcd目录:
[root@initroot ~]# mount /home/CentOS-7-x86_64-Minimal-1503-01.iso /mnt [root@initroot ~]# mkdir /srv/newcd [root@initroot ~]# rsync -a /mnt/ /srv/newcd [root@initroot ~]# ll /srv/newcd/ -rw-r--r--. 1 root root 16 Apr 1 07:11 CentOS_BuildTag drwxr-xr-x. 3 root root 33 Mar 28 06:34 EFI -rw-r--r--. 1 root root 215 Mar 28 06:36 EULA -rw-r--r--. 1 root root 18009 Mar 28 06:36 GPL drwxr-xr-x. 3 root root 54 Mar 28 06:34 images drwxr-xr-x. 2 root root 4096 Mar 28 06:34 isolinux drwxr-xr-x. 2 root root 41 Mar 28 06:34 LiveOS drwxr-xr-x. 2 root root 20480 Apr 1 07:11 Packages drwxr-xr-x. 2 root root 4096 Apr 1 07:11 repodata -rw-r--r--. 1 root root 1690 Mar 28 06:36 RPM-GPG-KEY-CentOS-7 -rw-r--r--. 1 root root 1690 Mar 28 06:36 RPM-GPG-KEY-CentOS-Testing-7 -r--r--r--. 1 root root 2883 Apr 1 07:15 TRANS.TBL# rsync 可以完整的复制所有的权限属性等数据,也能够进行镜像处理!相当好用的指令喔! # 这里先了解一下即可。现在newcd/目录内已经是完整的镜像文件内容!
3. 假设已经处理完毕你在 /srv/newcd 里面所要进行的各项修改行为,准备建立 ISO 文件!
[root@initroot ~]# ll /srv/newcd/isolinux/ -r--r--r--. 1 root root 2048 Apr 1 07:15 boot.cat # 开机的型号数据等等 -rw-r--r--. 1 root root 84 Mar 28 06:34 boot.msg -rw-r--r--. 1 root root 281 Mar 28 06:34 grub.conf -rw-r--r--. 1 root root 35745476 Mar 28 06:31 initrd.img -rw-r--r--. 1 root root 24576 Mar 28 06:38 isolinux.bin # 相当于开机管理程序 -rw-r--r--. 1 root root 3032 Mar 28 06:34 isolinux.cfg -rw-r--r--. 1 root root 176500 Sep 11 2014 memtest -rw-r--r--. 1 root root 186 Jul 2 2014 splash.png -r--r--r--. 1 root root 2438 Apr 1 07:15 TRANS.TBL -rw-r--r--. 1 root root 33997348 Mar 28 06:33 upgrade.img -rw-r--r--. 1 root root 153104 Mar 6 13:46 vesamenu.c32 -rwxr-xr-x. 1 root root 5029136 Mar 6 19:45 vmlinuz # Linux 核心文件 [root@initroot ~]# cd /srv/newcd [root@initroot newcd]# mkisofs -o /custom.iso -b isolinux/isolinux.bin -c isolinux/boot.cat \ > -no-emul-boot -V 'CentOS 7 x86_64' -boot-load-size 4 -boot-info-table -R -J -v -T .此时你就有一个/custom.img文件存在,可以将该光盘刻录出来啰!就这么简单!
wodim/cdrecord命令刻录光盘
回到顶部这个指令常见的选项有下面数个:
[root@initroot ~]# wodim --devices dev=/dev/sr0... #查询刻录机的 BUS 位置 [root@initroot ~]# wodim -v dev=/dev/sr0 blank=[fast|all] #抹除重复读写片 [root@initroot ~]# wodim -v dev=/dev/sr0 -format #格式化 DVD+RW [root@initroot ~]# wodim -v dev=/dev/sr0 [可用选项功能] file.iso选项与参数:
--devices :用在扫瞄磁盘总线并找出可用的刻录机,后续的装置为 ATA 接口
-v :在 cdrecord 运作的过程中,显示过程而已。
dev=/dev/sr0 :可以找出此光驱的 bus 地址,非常重要!
blank=[fast|all]:blank 为抹除可重复写入的 CD/DVD-RW,使用 fast 较快,all 较完整
-format :对光盘片进行格式化,但是仅针对 DVD+RW 这种格式的 DVD 而已;
[可用选项功能] 主要是写入 CD/DVD 时可使用的选项,常见的选项包括有: -data :指定后面的文件以数据格式写入,不是以 CD 音轨(-audio)方式写入!
speed=X :指定刻录速度,例如 CD 可用 speed=40 为 40 倍数,DVD 则可用 speed=4 之类
-eject :指定刻录完毕后自动退出光盘
fs=Ym :指定多少缓冲存储器,可用在将镜像文件先暂存至缓冲存储器。预设为 4m, 一般建议可增加到 8m ,不过,还是得视你的刻录机而定。 针对 DVD 的选项功能: driveropts=burnfree :打开 Buffer Underrun Free 模式的写入功能 -sao :支持 DVD-RW 的格式
检测刻录机所在位置
回到顶部[root@initroot ~]# ll /dev/sr0 brw-rw----+ 1 root cdrom 11, 0 Jun 26 22:14 /dev/sr0 # 一般 Linux 光驱文件名! [root@initroot ~]# wodim --devices dev=/dev/sr0 ------------------------------------------------------------------------- 0 dev='/dev/sr0' rwrw-- : 'QEMU' 'QEMU DVD-ROM' ------------------------------------------------------------------------- [root@demo ~]# wodim --devices dev=/dev/sr0 wodim: Overview of accessible drives (1 found) : ------------------------------------------------------------------------- 0 dev='/dev/sr0' rwrw-- : 'ASUS' 'DRW-24D1ST' -------------------------------------------------------------------------可以发现到其实做了两个测试!上面的那部主机系统是虚拟机,当然光驱也是仿真的,没法用。
因此在这里与下面的wodim用法,只能使用另一部Demo机器测试给大家看了!
因为上面那部机器是虚拟机内的虚拟光驱 (QEMU DVD-ROM),那个无法塞入真正的光盘片啦! 所以只好找另一部实体 CentOS 7 的主机系统来测试。 因此你可以看到下面那部使用的就是正统的 ASUS 光驱了! 注意喔,一定要有 dev=/dev/xxx 那一段,不然系统会告诉你找不到光盘! 不过,反正我们知道光驱的文件名为 /dev/sr0 之类的,直接带入即可。
刻录CD/DVD
回到顶部0. 先抹除光盘的原始内容:(非可重复读写则可略过此步骤)
[root@demo ~]# wodim -v dev=/dev/sr0 blank=fast# 中间会跑出一堆讯息告诉你抹除的进度,而且会有 10 秒钟的时间等待你的取消!
1. 开始刻录:
[root@demo ~]# wodim -v dev=/dev/sr0 speed=4 -dummy -eject /tmp/system.img ....(前面省略).... Waiting for reader process to fill input buffer ... input buffer ready. Starting new track at sector: 0 Track 01: 86 of 86 MB written (fifo 100%) [buf 97%] 4.0x. # 这里有流程时间! Track 01: Total bytes read/written: 90937344/90937344 (44403 sectors). Writing time: # 写入的总时间 38.337s Average write speed # 换算下来的写入时间 1.7x. Min drive buffer fill was 97% Fixating... Fixating time: 120.943s wodim: fifo had 1433 puts and 1433 gets. wodim: fifo was 0 times empty and 777 times full, min fill was 89%.# 因为有加上 -eject 这个选项的缘故,因此刻录完成后,DVD 会被退出光驱喔!记得推回去!
2. 刻录完毕后,测试挂载一下,检验内容:
[root@demo ~]# mount /dev/sr0/mnt [root@demo ~]# df -h /mnt Filesystem Filesystem /dev/sr0 Size Size Used Avail Use% Mounted on Used Avail Use% Mounted on 87M 87M 0 100% /mnt [root@demo ~]# ll /mnt dr-xr-xr-x. 135 root root 36864 Jun 30 04:00 etc dr-xr-xr-x. 19 root root [root@demo ~]# umount /mnt 8192 Jul 2 13:16 root基本上,光盘刻录的指令越来越简单,虽然有很多的参数可以使用,不过上面的语法就很足够了! 一般来说,如果有刻录的需求,大多还是使用图形界面的软件来处理比较方便 使用文字界面的刻录,真的大部分都是刻录数据光盘较多。因此,上面的语法已经足够工程师的使用了!
如果你的Linux是用来做为服务器之用的话,那么无时无刻的去想如何备份重要数据是相当重要的! 关于备份我们会在第五篇再仔细的谈一谈,这里你要会使用这些工具即可!
initroot编辑整理,转载请注明www.initroot.com
100次点赞
100次阅读