linux学习(20) 光盘写入工具mkisofs,mkisofs

2023-11-02 13:48

本文主要是介绍linux学习(20) 光盘写入工具mkisofs,mkisofs,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

光盘写入工具

某些时刻你可能会希望将系统上最重要的数据给他备份出来,虽然目前闪盘已经有够便宜,你可以使用这玩意儿来备份。不过某些重要的、需要重复备份的数据(可能具有时间特性),你可能会需要使用类似 DVD 之类的储存媒体来备份出来!举例来说,你的系统配置档或者是讨论区的数据库文件(变动性非常的频繁)。虽然 Linux 图形介面已经有不少的烧录软件可用,但有时如果你希望系统自动在某些时刻帮你主动的进行烧录时,那么文字介面的烧录行为就有帮助啦!

那么文字模式的烧录行为要怎么处理呢?通常的作法是这样的:

  • 先将所需要备份的数据建置成为一个映像档(iso),利用 mkisofs 命令来处理;
  • 将该映像档烧录至光盘或 DVD 当中,利用 cdrecord 命令来处理。

底下我们就分别来谈谈这两个命令的用法吧!


mkisofs:创建映像档

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

[root@www ~]# mkisofs [-o 映像档] [-rv] [-m file] 待备份文件.. [-V vol] \
>  -graft-point isodir=systemdir ...
选项与参数:
-o :后面接你想要产生的那个映像档档名。
-r :透过 Rock Ridge 产生支持 Unix/Linux 的文件数据,可记录较多的资讯;
-v :显示建置 ISO 文件的过程
-m file :-m 为排除文件 (exclude) 的意思,后面的文件不备份到映像档中
-V vol  :创建 Volume,有点像 Windows 在文件总管内看到的 CD title 的东西
-graft-point:graft有转嫁或移植的意思,相关数据在底下文章内说明。

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

此外,一般默认的情况下,所有要被加到映像档中的文件都会被放置到映象档中的根目录,如此一来可能会造成烧录后的文件分类不易的情况。所以,你可以使用 -graft-point 这个选项,当你使用这个选项之后,可以利用如下的方法来定义位於映像档中的目录,例如:

  • 映像档中的目录所在=实际 Linux 文件系统的目录所在
  • /movies/=/srv/movies/ (在 Linux 的 /srv/movies 内的文件,加至映像档中的 /movies/ 目录)
  • /linux/etc=/etc (将 Linux 中的 /etc/ 内的所有数据备份到映像档中的 /linux/etc/ 目录中)

我们透过一个简单的范例来说明一下吧。如果你想要将 /root, /home, /etc 等目录内的数据通通烧录起来的话,先得要处理一下映像档,我们先不使用 -graft-point 的选项来处理这个映像档试看看:

[root@www ~]# mkisofs -r -v -o /tmp/system.img /root /home /etc
INFO:   ISO-8859-1 character encoding detected by locale settings.Assuming ISO-8859-1 encoded filenames on source filesystem,use -input-charset to override.
mkisofs 2.01 (cpu-pc-linux-gnu)
Scanning /root
Scanning /root/test4
....中间省略....97.01% done, estimate finish Tue Dec 16 17:07:14 2008  <==显示百分比98.69% done, estimate finish Tue Dec 16 17:07:15 2008
Total translation table size: 0
Total rockridge attributes bytes: 9840   <==额外记录属性所耗用之容量
Total directory bytes: 55296             <==目录占用容量
Path table size(bytes): 406
Done with: The File(s)              Block(s)    298728
Writing:   Ending Padblock          Start Block 298782
Done with: Ending Padblock          Block(s)    150
Max brk space used 0
298932 extents written (583 MB)[root@www ~]# ll -h /tmp/system.img
-rw-r--r-- 1 root root 584M Dec 16 17:07 /tmp/system.img
[root@www ~]# mount -o loop /tmp/system.img /mnt
[root@www ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/tmp/system.img       584M  584M     0 100% /mnt  <==就是这玩意儿!
[root@www ~]# ls /mnt
alex             crontab2               etc.tar.gz          system.tar.bz2
anaconda-ks.cfg  etc                    install.log         test1
arod             etc.and.root.tar.bz2   install.log.syslog  test2
boot.dump        etc.dump               loopdev             test3
# 看吧!一堆数据都放置在一起!包括有的没有的目录与文件等等![root@www ~]# umount /mnt

由上面的范例我们可以看到,三个目录 (/root, /home, /etc) 的数据通通放置到了映像档的最顶层目录中!真是不方便~尤其由於 /root/etc 的存在,导致那个 /etc 的数据似乎没有被包含进来的样子!真不合理~而且还有 lost+found 的目录存在!真是超不喜欢的!此时我们可以使用 -graft-point 来处理罗!

[root@www ~]# mkisofs -r -V 'linux_file' -o /tmp/system.img \
>  -m /home/lost+found -graft-point /root=/root /home=/home /etc=/etc
[root@www ~]# ll -h /tmp/system.img
-rw-r--r-- 1 root root 689M Dec 17 11:41 /tmp/system.img
# 上面的命令会创建一个大文件,期中 -graft-point 后面接的就是我们要备份的数据。
# 必须要注意的是那个等号的两边,等号左边是在映像档内的目录,右侧则是实际的数据。[root@www ~]# mount -o loop /tmp/system.img /mnt
[root@www ~]# ll /mnt
dr-xr-xr-x 105 root root 32768 Dec 17 11:40 etc
dr-xr-xr-x   5 root root  2048 Dec 17 11:40 home
dr-xr-xr-x   7 root root  4096 Dec 17 11:40 root
# 瞧!数据是分门别类的在各个目录中喔这样了解乎?最后将数据卸载一下:[root@www ~]# umount /mnt

其实鸟哥一直觉得很奇怪,怎么我的数据会这么大(600多MB)?原来是 /home 里面在第八章的时候,练习时多了一个 /home/loopdev 的大文件!所以在重新制作一次 iso 档,并多加一个『 -m /home/loopdev 』来排除该文件的备份,最终的文件则仅有 176MB 罗!还好还好! ^_^!接下来让我们处理烧录的动作了吧!


小标题的图示 cdrecord:光盘烧录工具

我们是透过 cdrecord 这个命令来进行文字介面的烧录行为,这个命令常见的选项有底下数个:

[root@www ~]# cdrecord -scanbus dev=ATA                  <==查询烧录机位置
[root@www ~]# cdrecord -v dev=ATA:x,y,z blank=[fast|all] <==抹除重复读写片
[root@www ~]# cdrecord -v dev=ATA:x,y,z -format          <==格式化DVD+RW
[root@www ~]# cdrecord -v dev=ATA:x,y,z [可用选项功能] file.iso
选项与参数:
-scanbus        :用在扫瞄磁碟汇流排并找出可用的烧录机,后续的装置为 ATA 介面
-v              :在 cdrecord 运行的过程中,显示过程而已。
dev=ATA:x,y,z   :后续的 x, y, z 为你系统上烧录机所在的位置,非常重要!
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 的格式

  • 侦测你的烧录机所在位置:

文字模式的烧录确实是比较麻烦的,因为没有所见即所得的环境嘛!要烧录首先就得要找到烧录机才行!而由於早期的烧录机都是使用 SCSI 介面,因此查询烧录机的方法就得要配合著 SCSI 介面的认定来处理了。查询烧录机的方式为:

[root@www ~]# cdrecord -scanbus dev=ATA
Cdrecord-Clone 2.01 (cpu-pc-linux-gnu) Copyright (C) 1995-2004 J?rg Schilling
....中间省略....
scsibus1:1,0,0   100) *
        1,1,0   101) 'ASUS    ' 'DRW-2014S1      ' '1.01' Removable CD-ROM1,2,0   102) *1,3,0   103) *1,4,0   104) *1,5,0   105) *1,6,0   106) *1,7,0   107) *

利用 cdrecord -scanbus 就能够找到正确的烧录机!由於目前个人计算机上最常使用的磁碟机介面为 IDE 与 SATA ,这两种介面都能够使用 dev=ATA 这种模式来查询,因此上述的命令得要背一下啦!另外,在查询的结果当中可以发现有一台烧录机,其中也显示出这台烧录机的型号,而最重要的就是上表中有底线的那三个数字!那三个数字就是代表这台烧录机的位置!以上表的例子中,这部烧录机的位置在『 ATA:1,1,0 』这个地方喔

好了,那么现在要如何将 /tmp/system.img 烧录到 CD/DVD 里面去呢?鸟哥这里先以 CD 为例,鸟哥用的是 CD-RW(可重复读写) 的光盘片,说实在话,虽然 CD-RW 或 DVD-RW 比较贵一点,不过至少可以重复利用,对环境的冲击比较小啦!建议大家使用可重复读写的片子。由於 CD-RW 可能要先进行抹除的工作(将原本里面的数据删除)然后才能写入,因此,底下我们先来看看如何抹除一片 CD/DVD 的方法,然后直接写入光盘吧!

Tips:
由於 CD/DVD 都是使用 cdrecord 这个命令,因此不论是 CD 还是 DVD 片,下达命令的方法都差不多!不过,DVD 的写入需要额外的 driveropts=burnfree 或 -dao 等选项的辅助才行。另外,CD 片有 CD-R(一次写入) 与 CD-RW(重复写入),至於 DVD 则主要有两种格式,分别是 DVD-R 及 DVD+R 两种格式。如果是可重复读写的则为: DVD-RW, DVD+RW 。除了 DVD+RW 的抹除方法可能不太一样之外,其他写入的方式则是一样的。
鸟哥的图示

  • 进行 CD 的烧录动作:
# 0. 先抹除光盘的原始内容:(非可重复读写则可略过此步骤)
[root@www ~]# cdrecord -v dev=ATA:1,1,0 blank=fast
# 中间会跑出一堆信息告诉你抹除的进度,而且会有 10 秒钟的时间等待你的取消!
# 可以避免『手滑』的情况!^_^# 1. 开始烧录:
[root@www ~]# cdrecord -v dev=ATA:1,1,0 fs=8m -dummy -data \
>  /tmp/system.img
....中间省略....
Track 01:  168 of  176 MB written (fifo 100%) [buf 100%]  10.5x. <==显示百分比
# 上面会显示进度,还有 10.5x 代表目前的烧录速度!
cdrecord: fifo had 2919 puts and 2919 gets.
cdrecord: fifo was 0 times empty and 2776 times full, min fill was 97%.# 2. 烧录完毕后,测试挂载一下,检验内容:
[root@www ~]# mount -t iso9660 /dev/cdrom /mnt
[root@www ~]# df -h /mnt
Filesystem            Size  Used Avail Use% Mounted on
/dev/hdd              177M  177M     0 100% /mnt      <==瞧!确实是光盘内容![root@www ~]# ll /mnt
dr-xr-xr-x 105 root root 32768 Dec 17 11:54 etc
dr-xr-xr-x   5 root root  2048 Dec 17 11:54 home
dr-xr-xr-x   7 root root  4096 Dec 17 11:54 root[root@www ~]# umount /mnt    <==不要忘了卸载

事实上如果你忘记抹除可写入光盘时,其实 cdrecord 很聪明的会主动的帮你抹除啦!因此上面的资讯你只要记得烧录的功能即可。特别注意 -data 那个选项!因为如果没有加上 -data 的选项时,默认数据会以音轨格式写入光盘中,所以最好能够加上 -data 这个选项罗!上述的功能是针对 CD ,底下我们使用一片可重复读写的 DVD-RW 来测试一下写入的功能!


  • 进行 DVD-RW 的烧录动作:
# 0. 同样的,先来抹除一下原本的内容:
[root@www ~]# cdrecord -v dev=ATA:1,1,0 blank=fast# 1. 开始写入 DVD ,请注意,有些选项与 CD 并不相同了喔!
[root@www ~]# cdrecord -v dev=ATA:1,1,0 fs=8m -data -sao \
>  driveropts=burnfree /tmp/system.img# 2. 同样的,来给他测试测试!
[root@www ~]# mount /dev/cdrom /mnt
[root@www ~]# df -h /mnt
Filesystem            Size  Used Avail Use% Mounted on
/dev/hdd              177M  177M     0 100% /mnt
[root@www ~]# umount /mnt

整体命令没有差很多啦!只是 CD-RW 会自动抹除,但 DVD-RW 似乎得要自己手动某除才行!并不会主动进入自动抹除的功能!害鸟哥重新测试过好几次~伤脑筋~ ^_^!好啦!现在你就知道如何将你的数据烧录出来啦!

如果你的 Linux 是用来做为服务器之用的话,那么无时无刻的去想『如何备份重要数据』是相当重要的!关於备份我们会在第五篇再仔细的谈一谈,这里你要会使用这些工具即可!


没有光盘没有练习。。。。。

这篇关于linux学习(20) 光盘写入工具mkisofs,mkisofs的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/331012

相关文章

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

Python使用FFmpeg实现高效音频格式转换工具

《Python使用FFmpeg实现高效音频格式转换工具》在数字音频处理领域,音频格式转换是一项基础但至关重要的功能,本文主要为大家介绍了Python如何使用FFmpeg实现强大功能的图形化音频转换工具... 目录概述功能详解软件效果展示主界面布局转换过程截图完成提示开发步骤详解1. 环境准备2. 项目功能结

Linux CPU飙升排查五步法解读

《LinuxCPU飙升排查五步法解读》:本文主要介绍LinuxCPU飙升排查五步法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录排查思路-五步法1. top命令定位应用进程pid2.php top-Hp[pid]定位应用进程对应的线程tid3. printf"%

Linux下安装Anaconda3全过程

《Linux下安装Anaconda3全过程》:本文主要介绍Linux下安装Anaconda3全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录简介环境下载安装一、找到下载好的文件名为Anaconda3-2018.12-linux-x86_64的安装包二、或者通

Linux系统之stress-ng测压工具的使用

《Linux系统之stress-ng测压工具的使用》:本文主要介绍Linux系统之stress-ng测压工具的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、理论1.stress工具简介与安装2.语法及参数3.具体安装二、实验1.运行8 cpu, 4 fo

Maven项目中集成数据库文档生成工具的操作步骤

《Maven项目中集成数据库文档生成工具的操作步骤》在Maven项目中,可以通过集成数据库文档生成工具来自动生成数据库文档,本文为大家整理了使用screw-maven-plugin(推荐)的完... 目录1. 添加插件配置到 pom.XML2. 配置数据库信息3. 执行生成命令4. 高级配置选项5. 注意事

Linux lvm实例之如何创建一个专用于MySQL数据存储的LVM卷组

《Linuxlvm实例之如何创建一个专用于MySQL数据存储的LVM卷组》:本文主要介绍使用Linux创建一个专用于MySQL数据存储的LVM卷组的实例,具有很好的参考价值,希望对大家有所帮助,... 目录在Centos 7上创建卷China编程组并配置mysql数据目录1. 检查现有磁盘2. 创建物理卷3. 创

Linux查看系统盘和SSD盘的容量、型号及挂载信息的方法

《Linux查看系统盘和SSD盘的容量、型号及挂载信息的方法》在Linux系统中,管理磁盘设备和分区是日常运维工作的重要部分,而lsblk命令是一个强大的工具,它用于列出系统中的块设备(blockde... 目录1. 查看所有磁盘的物理信息方法 1:使用 lsblk(推荐)方法 2:使用 fdisk -l(

Linux中的more 和 less区别对比分析

《Linux中的more和less区别对比分析》在Linux/Unix系统中,more和less都是用于分页查看文本文件的命令,但less是more的增强版,功能更强大,:本文主要介绍Linu... 目录1. 基础功能对比2. 常用操作对比less 的操作3. 实际使用示例4. 为什么推荐 less?5.

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析