【Linux:存储媒介】

1. 挂载和卸载存储设备

Linux 桌面系统的最新进展已经使存储设备管理对于桌面用户来说极其容易。大多数情况下只要把设备连接到系统中,它就能工作。在过去(比如说2004年),这个工作必须手动完成。在非桌面系统中(例如,服务器中),这仍然是一个主要地手动过程,因为服务器经常有极端的存储需求和复杂的配置要求。管理存储设备的第一步是把设备连接到文件系统树中。这个叫做 “挂载” 的过程允许设备连接到操作系统中。类 Unix的操作系统,比如 Linux 在单一文件系统树中维护连接在各个节点的各种设备。这与其它操作系统形成对照,比如说 MS-DOS 和Windows 系统中,每个设备(例如 C:\,D:\,等)保持着单独的文件系统树。 有一个叫做/etc/fstab的文件可以列出系统启动时要挂载的设备(典型地,硬盘分区)。下面是来自于 Fedora 7 系统的/etc/fstab 文件实例:

LABEL=/12 / ext3 defaults 1 1
LABEL=/home /home ext3 defaults 1 2
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
LABEL=SWAP-sda3 /swap swap defaults 0 0

在这个实例中所列出的大多数文件系统是虚拟的,就前三个是应该注意的:

LABEL=/12 / ext3 defaults 1 1
LABEL=/home /home ext3 defaults 1 2
LABEL=/boot /boot ext3 defaults 1 2

这些是硬盘分区。每行由六个字段组成,如下所示:

字段 									内容 									说明

1 										设备名 									传统上,这个字段包含与物理设备相关
																				设备文件的实际名字,比如说/dev/hda1(第	
																				一个 IDE 通道上第一个主设备分区)。然而
																				今天的计算机,有很多热插拔设备(像 USB 
																				驱动设备),许多现代的 Linux 发行版用一
																				个文本标签和设备相关联。当这个设备连接到
																				系统中时,这个标签(当储存媒介格式化时,
																				这个标签会被添加到存储媒介中)会被操作系
																				统读取。那样的话,不管赋给实际物理设备哪
																				个设备文件,这个设备仍然能被系统正确地识
																				别


2 										挂载点 									设备所连接到的文件系统树的目录


3 										文件系统类型 							Linux 允许挂载许多文件系统类型。大多数本
																				地的Linux 文件系统是 ext3,但是也支持很
																				多其它的,比方说 FAT16 (msdos), FAT32 
																				(vfat)NTFS (ntfs),CD-ROM (iso9660),
																				等等


4 										选项 									文件系统可以通过各种各样的选项来挂载。有
																				可能,例如,挂载只读的文件系统,或者挂载
																				阻止执行任何程序的文件系统(一个有用的安
																				全特性,避免删除媒介)


5 										频率 									一位数字,指定是否和在什么时间用 dump 命
																				令来备份一个文件系统


6 										次序 									一位数字,指定 fsck 命令按照什么次序来检
																				查文件系统
																				

2. 查看挂载的文件系统列表

这个 mount 命令被用来挂载文件系统。执行这个不带参数的命令,将会显示一系列当前挂载的文件系统:

$ mount
/dev/sda2 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda5 on /home type ext3 (rw)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
fusectl on /sys/fs/fuse/connections type fusectl (rw)
/dev/sdd1 on /media/disk type vfat (rw,nosuid,nodev,noatime,uhelper=hal,uid=500,utf8,shortname=lower)
twin4:/musicbox on /misc/musicbox type nfs4 (rw,addr=192.168.1.4)

这个列表的格式是:设备 on 挂载点 type 文件系统类型(选项)。例如,第一行所示设备/ dev/sda2作为根文件系统被挂载,文件系统类型是 ext3,并且可读可写(这个“rw”选项)。在这个列表的底部有两个有趣的条目。倒数第二行显示了在读卡器中的一张 2G 的 SD 内存卡,挂载到了/media/disk上。最后一行是一个网络设备,挂载到了/misc/musicbox 上。 第一次实验将使用一张 CD-ROM。首先,在插入 CD-ROM之前看一下系统:

$ mount
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/hda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)

这个列表来自于 CentOS 5 系统,使用 LVM(逻辑卷管理器)来创建它的根文件系统。正如许多现在的 Linux发行版一样,这个系统试图自动挂载插入的 CD-ROM。插入光盘后,看看下面的输出:

$ mount
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/hda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/hdc on /media/live-1.0.10-8 type iso9660 (ro,noexec,nosuid,nodev,uid=500)

当插入光盘后,除了额外的一行之外,看到和原来一样的列表。在列表的末尾 CD-ROM已经挂载到了/media/live-1.0.10-8 上,它的文件类型是 iso9660(CD-ROM)

警告:在随后的实例中,至关重要的是要密切注意用系统中的实际设备名,并且不要使用此文本中使用的名字,还要注意音频 CD 和 CD-ROM 不一样。音频 CD 不包含文件系统,这样在通常意义上,它就不能被挂载了

现在拥有 CD-ROM 光盘的设备名字,卸载这张光盘,并把它重新挂载到文件系统树的另一个位置。需要超级用户身份(使用系统相应的命令)来进行操作,并且用 umount(注意这个命令的拼写)来卸载光盘:

$ su -
Password:
[root@linuxbox ~]# umount /dev/hdc

下一步是创建一个新的光盘挂载点。简单地说,一个挂载点就是文件系统树中的一个目录。它没有什么特殊的。它甚至不必是一个空目录,如果把设备挂载到了一个非空目录上,将不能看到这个目录中原来的内容,直到卸载这个设备。创建一个新目录:

# mkdir /mnt/cdrom

最后,把这个 CD-ROW 挂载到一个新的挂载点上。这个-t 选项用来指定文件系统类型:

# mount -t iso9660 /dev/hdc /mnt/cdrom

之后可以通过这个新挂载点来查看 CD-ROW 的内容:

# cd /mnt/cdrom
# ls

注意当试图卸载这个 CD-ROW 时,发生了什么事情

# umount /dev/hdc
umount: /mnt/cdrom: device is busy

这是怎么回事呢?原因是不能卸载一个设备,如果某个用户或进程正在使用这个设备的话。在这种情况下,把工作目录更改到了 CD-ROW的挂载点,这个挂载点导致设备忙碌。修复这个问题通过把工作目录改到其它目录而不是这个挂载点

# cd
# umount /dev/hdc

现在这个设备成功卸载了。 为什么卸载重要?
如果你看一下 free 命令的输出结果,这个命令用来显示关于内存使用情况的统计信息,你会看到一个统计值叫做”buffers“。计算机系统旨在尽可能快地运行。系统运行速度的一个阻碍是缓慢的设备。打印机是一个很好的例子。即使最快速的打印机相比于计算机标准也极其地缓慢。一台计算机确实会运行得非常慢,如果它要停下来等待一台打印机打印完一页。在早期的个人电脑时代(多任务之前),这真是个问题。如果你正在编辑电子表格或者是文本文档,每次你要打印文件时,计算机都会停下来而且变得不能使用。计算机能以打印机可接受的最快速度把数据发送给打印机,但由于打印机不能快速地打印,这个发送速度会非常慢。由于打印机缓存的出现,这个问题被解决了。打印机缓存是一个包含一些 RAM内存的设备,位于计算机和打印机之间。通过打印机缓存,计算机把要打印的结果发送到这个缓存区,数据会迅速地存储到这个 RAM中,这样计算机就能回去工作,而不用等待。 与此同时,打印机缓存将会以打印机可接受的速度把缓存中的数据缓慢地输出给打印机。缓存被广泛地应用于计算机中,使其运行得更快。别让偶尔地的读取或写入慢设备的需求阻碍了系统的运行速度。在真正与比较慢的设备交互之前,操作系统会尽可能多的读取或写入数据到内存中的存储设备里。以 Linux操作系统为例,你会注意到系统看似填充了多于它所需要的内存。这不意味着 Linux 正在使用所有的内存,它意味着 Linux正在利用所有可用的内存来作为缓存区。 这个缓存区允许非常快速地对存储设备进行写入,因为写入物理设备的操作被延迟到后面进行。同时,这些注定要传送到设备中的数据正在内存中堆积起来。时不时地,操作系统会把这些数据写入物理设备。卸载一个设备需要把所有剩余的数据写入这个设备,所以设备可以被安全地移除。如果没有卸载设备,就移除了它,就有可能没有把注定要发送到设备中的数据输送完毕。在某些情况下,这些数据可能包含重要的目录更新信息,这将导致文件系统损坏,这是发生在计算机中的最坏的事情之一

3. 确定设备名称

如果正在管理一台服务器或者是其它一些(这种自动挂载功能)不会发生的环境,又如何能查清设备名呢?

首先,看一下系统怎样来命名设备。如果列出目录/dev(所有设备的住所)的内容:

$ ls /dev

这个列表的内容揭示了一些设备命名的模式。这里有几个:

模式 																设备

/dev/fd* 															软盘驱动器

/dev/hd* 															老系统中的 IDE(PATA) 磁盘。典型的主板
																	包含两个 IDE连接器或者是通道,每个连接
																	器带有一根缆线,每根缆线上有两个硬盘驱
																	动器连接点。缆线上的第一个驱动器叫做主
																	设备,第二个叫做从设备。设备名称这样安
																	排,/dev/hda是指第一通道上的主设备名;
																	/dev/hdb 是第一通道上的从设备名;/dev/hdc
																	是第二通道上的主设备名,等等。末尾的数
																	字表示硬盘驱动器上的分区。例如,/dev/hda1
																	是指系统中第一硬盘驱动器上的第一个分区,
																	而 /dev/hda 则是指整个硬盘驱动器
																	
/dev/lp* 															打印机

/dev/sd* 															SCSI 磁盘。在最近的 Linux 系统中,内核把
																	所有类似于磁盘的设备(包括 PATA/SATA 硬盘,
																	闪存,和 USB 存储设备,比如说可移动的音乐
																	播放器和数码相机)看作 SCSI 磁盘。剩下的
																	命名系统类似于上述所描述的旧的/dev/hd* 命
																	名方案
																	
/dev/sr* 															光盘(CD/DVD 读取器和烧写器)

另外,经常看到符号链接比如说/dev/cdrom/dev/dvd/dev/floppy,它们指向实际的设备文件,提供这些链接是为了方便使用。如果工作的系统不能自动挂载可移动的设备,可以使用下面的技巧来决定当可移动设备连接后,它是怎样被命名的。首先,启动一个实时查看文件/var/log/messages(可能需要超级用户权限):

$ sudo tail -f /var/log/messages

这个文件的最后几行会被显示,然后停止。下一步插入这个可移动的设备。在这个例子里将使用一个 16MB闪存。瞬间,内核就会发现这个设备,并且探测它:

Jul 23 10:07:53 linuxbox kernel: usb 3-2: new full speed USB device
using uhci_hcd and address 2
Jul 23 10:07:53 linuxbox kernel: usb 3-2: configuration #1 chosen
from 1 choice
Jul 23 10:07:53 linuxbox kernel: scsi3 : SCSI emulation for USB Mass
Storage devices
Jul 23 10:07:58 linuxbox kernel: scsi scan: INQUIRY result too short
(5), using 36
Jul 23 10:07:58 linuxbox kernel: scsi 3:0:0:0: Direct-Access Easy
Disk 1.00 PQ: 0 ANSI: 2
Jul 23 10:07:59 linuxbox kernel: sd 3:0:0:0: [sdb] 31263 512-byte
hardware sectors (16 MB)
Jul 23 10:07:59 linuxbox kernel: sd 3:0:0:0: [sdb] Write Protect is
off
Jul 23 10:07:59 linuxbox kernel: sd 3:0:0:0: [sdb] Assuming drive
cache: write through
Jul 23 10:07:59 linuxbox kernel: sd 3:0:0:0: [sdb] 31263 512-byte
hardware sectors (16 MB)
Jul 23 10:07:59 linuxbox kernel: sd 3:0:0:0: [sdb] Write Protect is
off
Jul 23 10:07:59 linuxbox kernel: sd 3:0:0:0: [sdb] Assuming drive
cache: write through
Jul 23 10:07:59 linuxbox kernel: sdb: sdb1
Jul 23 10:07:59 linuxbox kernel: sd 3:0:0:0: [sdb] Attached SCSI
removable disk
Jul 23 10:07:59 linuxbox kernel: sd 3:0:0:0: Attached scsi generic
sg3 type 0

显示再次停止之后,输入 Ctrl-c,重新得到提示符。输出结果的有趣部分是一再提及“[sdb]”,这正好符和我们期望的 SCSI磁盘设备名称。知道这一点后,有两行输出变得颇具启发性:

Jul 23 10:07:59 linuxbox kernel: sdb: sdb1
Jul 23 10:07:59 linuxbox kernel: sd 3:0:0:0: [sdb] Attached SCSI
removable disk

这告诉我们这个设备名称是/dev/sdb 指整个设备,/dev/sdb1 是这个设备的第一分区。使用 Linux系统充满了有趣的监测工作。 小贴士:使用这个 tail -f /var/log/messages 技巧是一个很不错的方法,可以实时观察系统的一举一动。 既然知道了设备名称,就可以挂载这个闪存驱动器了:

$ sudo mkdir /mnt/flash
$ sudo mount /dev/sdb1 /mnt/flash
$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 15115452 5186944 9775164 35% /
/dev/sda5 59631908 31777376 24776480 57% /home
/dev/sda1 147764 17277 122858 13% /boot
tmpfs 776808 0 776808 0% /dev/shm
/dev/sdb1 15560 0 15560 0% /mnt/flash

这个设备名称会保持不变只要设备与计算机保持连接并且计算机不会重新启动

4. 创建新的文件系统

假若想要用 Linux 本地文件系统来重新格式化这个闪存驱动器,而不是它现用的 FAT32系统。这涉及到两个步骤:
1.(可选的)创建一个新的分区布局
2. 在这个闪存上创建一个新的空的文件系统
注意!在下面的练习中将要格式化一个闪存驱动器。拿一个不包含有用数据的驱动器作为实验品,因为它将会被擦除!再次,请确定指定了正确的系统设备名称。未能注意此警告可能导致格式化(即擦除)错误的驱动器!

5. 用 fdisk 命令操作分区

这个 fdisk 程序允许直接在底层与类似磁盘的设备(比如说硬盘驱动器和闪存驱动器)进行交互。使用这个工具可以在设备上编辑,删除,和创建分区。以闪存驱动器为例,首先必须卸载它(如果需要的话),然后调用 fdisk程序,如下所示:

$ sudo umount /dev/sdb1
$ sudo fdisk /dev/sdb

注意必须指定设备名称,就整个设备而言,而不是通过分区号。这个程序启动后将看到以下提示:

Command (m for help):
输入 “m” 会显示程序菜单:
Command action
a toggle a bootable flag
....

第一件事情是检查已存在的分区布局。输入 “p” 会打印出这个设备的分区表:

Command (m for help): p
Disk /dev/sdb: 16 MB, 16006656 bytes
1 heads, 31 sectors/track, 1008 cylinders
Units = cylinders of 31 * 512 = 15872 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 2 1008 15608+ b w95 FAT32

在此例中,我们看到一个 16MB 的设备只有一个分区 (1),此分区占用了可用的 1008 个柱面中的 1006 个, 并被标识为Windows 95 FAT32 分区。有些程序会使用这个标志符来限制一些可以对磁盘所做的操作,但大多数情况下更改这个标志符没有危害。然而,为了叙述方便,更改它以此来表明是个 Linux分区。在更改之前,首先必须找到被用来识别一个 Linux 分区的 ID 号码。在上面列表中,ID号码“b”被用来指定这个已存在的分区。 要查看可用的分区类型列表,参考之前的程序菜单会看到以下选项:

l list known partition types

如果在提示符下输入“l”,就会显示一个很长的可能类型列表。在它们之中会看到“b” 为已存在分区类型的 ID 号,而“83”是针对Linux 系统的 ID 号。 回到之前的菜单,看到这个选项来更改分区 ID 号:

t change a partition's system id

先输入“t”,再输入新的 ID 号:

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 83
Changed system type of partition 1 to 83 (Linux)

这就完成了需要做得所有修改。到目前为止,还没有接触这个设备(所有修改都存储在内存中,而不是在此物理设备中),所以将会把修改过的分区表写入此设备,再退出。为此在提示符下输入 “w”:

Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: If you have created or modified any DOS 6.x
partitions, please see the fdisk manual page for additional
information.
Syncing disks.
$

如果已经决定保持设备不变,可在提示符下输入 “q”,这将退出程序而没有写更改,可以安全地忽略这些不祥的警告信息。

6. 用 mkfs 命令创建一个新的文件系统

完成了分区编辑工作(它或许是轻量级的),是时候在的闪存驱动器上创建一个新的文件系统了。为此会使用 mkfs(“make filesystem” 的简写),它能创建各种格式的文件系统。 在此设备上创建一个 ext3 文件系统,使用 “-t” 选项来指定这个 “ext3” 系统类型,随后是要格式化的设备分区名称:

$ sudo mkfs -t ext3 /dev/sdb1
mke2fs 1.40.2 (12-Jul-2007)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
3904 inodes, 15608 blocks
780 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=15990784
2 block groups
8192 blocks per group, 8192 fragments per group
1952 inodes per group
Superblock backups stored on blocks:
8193
Writing inode tables: done
Creating journal (1024 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
$

当 ext3 被选为文件系统类型时,这个程序会显示许多信息。若把这个设备重新格式化为它最初的 FAT32 文件系统,指定 “vfat”作为文件系统类型:

$ sudo mkfs -t vfat /dev/sdb1

任何时候添加额外的存储设备到系统中时,都可以使用这个分区和格式化的过程。虽然只以一个小小的闪存驱动器为例,同样的操作可以被应用到内部硬盘和其它可移动的存储设备上像 USB 硬盘驱动器

7. 测试和修复文件系统

在之前讨论文件/etc/fstab 时,会在每行的末尾看到一些神秘的数字。每次系统启动时,在挂载系统之前,都会按照惯例检查文件系统的完整性。这个任务由 fsck 程序(是”file system check” 的简写)完成。每个fstab 项中的最后一个数字指定了设备的检查顺序。在上面的实例 中,首先检查根文件系统,然后是 home 和 boot文件系统。若最后一个数字是零则相应设备不会被检查。 除了检查文件系统的完整性之外,fsck 还能修复受损的文件系统,其成功度依赖于损坏的数量。在类 Unix 的文件系统中,文件恢复的部分被放置于 lost+found 目录里面,位于每个文件系统的根目录下面。检查闪存驱动器(首先应该卸载),能执行下面的操作:

$ sudo fsck /dev/sdb1
fsck 1.40.8 (13-Mar-2008)
e2fsck 1.40.8 (13-Mar-2008)
/dev/sdb1: clean, 11/3904 files, 1661/15608 blocks

文件系统损坏情况相当罕见,除非硬件存在问题,如磁盘驱动器故障。在大多数系统中,系统启动阶段若探测到文件系统已经损坏了,则会导致系统停止下来,在系统继续执行之前,会指导你运行 fsck 程序。

什么是 fsck?
在 Unix 文化中,“fsck” 这个单词往往会被用来指代另一个和它仅有一个字母差别的常用词。因为如果你遇到了迫不得已需要运行 fsck 命令的糟糕境遇时,这个词经常会脱口而出

8. 格式化软盘

对于那些还在使用配备了软盘驱动器的计算机的用户,也能管理这些设备。准备一张可用的空白软盘要分两个步骤。首先,对这张软盘执行低级格式化,然后创建一个文件系统。 为了完成格式化使用 fdformat程序,同时指定软盘设备名称(通常为/dev/fd0):

$ sudo fdformat /dev/fd0
Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
Formatting ... done
Verifying ... done

接下来,通过 mkfs 命令,给这个软盘创建一个 FAT 文件系统:

$ sudo mkfs -t msdos /dev/fd0

注意使用这个“msdos”文件系统类型来得到旧(小的)风格的文件分配表。当一个软磁盘被准备好之后,则可能像其它设备一样挂载它

9. 直接把数据移入/出设备

虽然通常认为计算机中的数据以文件形式来组织数据,也可以“原始的”形式来考虑数据。如果看一下磁盘驱动器,例如看到它由大量的数据“块”组成,而操作系统却把这些数据块看作目录和文件。然而,如果把磁盘驱动器简单地看成一个数据块大集合,就能执行有用的任务,如克隆设备。 这个 dd程序能执行此任务。它可以把数据块从一个地方复制到另一个地方。它使用独特的语法(由于历史原因),经常它被这样使用:

dd if=input_file of=output_file [bs=block_size [count=blocks]]

比方说有两个相同容量的 USB 闪存驱动器,并且要精确地把第一个驱动器(中的内容)复制给第二个。如果连接两个设备到计算机上,它们各自被分配到设备/dev/sdb 和 /dev/sdc上,这样就能通过下面的命令把第一个驱动器中的所有数据复制到第二个驱动器中

dd if=/dev/sdb of=/dev/sdc

或者,如果只有第一个驱动器被连接到计算机上,可以把它的内容复制到一个普通文件中供以后恢复或复制数据:

dd if=/dev/sdb of=flash_drive.img

警告!这个 dd 命令非常强大。虽然它的名字来自于“数据定义”,有时候也把它叫做“清除磁盘”因为用户经常会误输入 if 或 of的规范。在按下回车键之前,要再三检查输入与输出规范!

10. 创建 CD-ROM 映像

写入一个可记录的 CD-ROM(一个 CD-R 或者是 CD-RW)由两步组成;首先,构建一个 iso 映像文件,这就是一个 CD-ROM的文件系统映像,第二步,把这个映像文件写入到 CD-ROM 媒介中。

10.1 创建一个 CD-ROM 的映像拷贝

如果想要制作一张现有 CD-ROM 的 iso 映像,可以使用 dd 命令来读取 CD-ROW 中的所有数据块,并把它们复制到本地文件中。比如说有一张 Ubuntu CD,用它来制作一个 iso文件,以后可以用它来制作更多的拷贝。插入这张 CD 之后,确定它的设备名称(假定是/dev/cdrom),然后像这样来制作 iso文件:

dd if=/dev/cdrom of=ubuntu.iso

这项技术也适用于 DVD 光盘,但是不能用于音频 CD,因为它们不使用文件系统来存储数据。对于音频 CD,看一下 cdrdao 命令。

10.2 从文件集合中创建一个映像

创建一个包含目录内容的 iso 映像文件,使用 genisoimage 程序。为此首先创建一个目录,这个目录中包含了要包括到此映像中的所有文件,然后执行这个 genisoimage 命令来创建映像文件。例如,如果已经创建一个叫做 ∼/cd-rom-files 的目录,然后用文件填充此目录,再通过下面的命令来创建一个叫做cd-rom.iso 映像文件:

genisoimage -o cd-rom.iso -R -J ~/cd-rom-files

“-R” 选项添加元数据为 Rock Ridge 扩展,这允许使用长文件名和 POSIX 风格的文件权限。同样地,这个 “-J” 选项使Joliet 扩展生效,这样 Windows 中就支持长文件名了。 一个有着其它名字的程序

如果你看一下关于创建和烧写光介质如 CD-ROMs 和 DVD 的在线文档,经常碰到两个程序叫做 mkisofscdrecord。这些程序是流行软件包 “cdrtools” 的 一部分,”cdrtools” 由 Jorg Schilling 编写成。在2006 年春天,Schilling 先生更改 了部分 cdrtools 软件包的协议,Linux 社区许多人的看法是,这创建了一个与GNU GPL 不相兼容的协议。结果,就 fork 了这个 cdrtools 项目,目前新项目里面包含了 cdrecord 和mkisofs 的替代程序,分别是 wodim 和 genisoimage

11. 写入 CD-ROM 镜像

有了一个映像文件之后,可以把它烧写到光盘中。下面讨论的大多数命令对可记录的 CD-ROW 和 DVD 媒介都适用

11.1 直接挂载一个 ISO 镜像

有一个诀窍,可以用它来挂载 iso 映像文件,虽然此文件仍然在硬盘中,但当作它已经在光盘中了。添加 “-o loop”选项来挂载(同时带有必需的 “-t iso9660” 文件系统类型), 挂载这个映像文件就好像它是一台设备,把它连接到文件系统树上:

mkdir /mnt/iso_image
mount -t iso9660 -o loop image.iso /mnt/iso_image

上面的示例中,创建了一个挂载点叫做/mnt/iso_image,然后把此映像文件 image.iso挂载到挂载点上。映像文件被挂载之后,可以把它当作,就好像它是一张真正的 CD-ROM 或者 DVD。当不再需要此映像文件后,记得卸载它

11.2 清除一张可重写入的 CD-ROM

可重写入的 CD-RW 媒介在被重使用之前需要擦除或清空。为此可以用 wodim 命令,指定设备名称和清空的类型。此 wodim程序提供了几种清空类型。最小(且最快)的是 “fast” 类 型:

wodim dev=/dev/cdrw blank=fast

11.3 写入镜像

写入一个映像文件,再次使用 wodim 命令,指定光盘设备名称和映像文件名:

wodim dev=/dev/cdrw image.iso

除了设备名称和映像文件之外,wodim 命令还支持非常多的选项。常见的两个选项是,“-v” 可详细输出,和 “- dao” 以disk-at-once 模式写入光盘。如果你正在准备一张光盘为的是商业复制,那么应该使用这种模式。wodim 命令的默认模式是track-at-once,这对于录制音乐很有用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值