第十五章 存储介质
存储介质
前言
- 本章将会介绍如下命令:
- mount: 挂载文件系统
- umount: 卸载文件系统
- fdisk: 硬盘分区命令
- fsck: 检查修复文件系统
- fdformat: 格式化软盘
- mkf: 创建文件系统
- dd: 像设备直接写入面向块数据
- genisoimage (mkisofs) : 创建一个 ISO 9600 映像文件
- wodim (cdrecord) : 向光存储介质写入数据
- md5sum: 计算 MD5 校验码
挂载、卸载存储设备
基本介绍
- 概述
- Linux 图形界面操作最近所取得的进展已使得图形界面操作用户能非常容易地管理存储设备。
- 多数情况下,设备只要连接上系统就能运作。
- 管理存储设备首先要做的就是将该设备添加到文件系统树种,从而允许操作系统可以操作该设备,这个过程称之为挂载。
- /etc/fstab 文件
LABEL=/12 | / | ext3 | defaults | 1 | 2 |
---|---|---|---|---|---|
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 | defaults | 0 | 0 |
sysfs | /sys | sysfs | defaults | 0 | 0 |
proc | /proc | proc | defaults | 0 | 0 |
LABEL=SWAP-sda3 | swap | swap | defaults | 0 | 0 |
- /etc/fstab 文件参数含义
字段 | 内容 | 描述 |
---|---|---|
1 | 设备 | 通常,该字段表示的是与物理设备相关的设备文件的真实名称,比如 dev/hda1 就代表第一个 IDE 通道上的主设备的第一块分区。但是如今的计算机都有很多可热拔插的设备,所以许多较新的 Linux 发行版用文本标签来关联设备。当设备与系统连接后,该标签就会被操作系统识别。通过这样的方式,不管实际的物理设备被分配到哪个设备文件,它仍然能被正确识别 |
2 | 挂载节点 | 设备附加到文件系统树上的目录 |
3 | 文件系统类型 | Linux 能够挂载许多文件类型系统,最常见的原始文件是 ext3,但也支持许多其他系统 FAT16(msdos)、FAT32(vfat)、NTFS(ntfs)、CD_ROM(iso996) 等 |
4 | 选项 | 文件系统挂载时可以使用许多选项参数,比如,可以设置文件系统以只读的方式挂载或是阻止任何程序修改它们 |
5 | 频率 | 此数值被 dump 命令用来决定是否对该文件系统进行备份以及多久备一次 |
6 | 优先级 | 此数值被 fsck 命令用来决定在启动时需要被扫描的文件系统的顺序 |
查看已挂载的文件系统列表
- 基本介绍
- mount 命令用于文件系统挂载。不带任何参数输入该命令将会调出目前已经挂载的文件系统列表。
- mount 命令
1
2
3
4
5
6
7
8
9
10
11
12
13[me@linux ~]$ mount
/dev/sda2 on / type ext3 (rw)
prov 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 /sysfs/fuse/connections type fuesctl (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) - 补充说明
- 列表的格式是:device on mont_point type filesystem_type(options) 。
- 上例中的第一行表示 dev/sda2 设备挂载在根目录下,可读写,属于 ext3 类型。
- 然而,可以看到该列表的末尾有两个有趣的条目,倒数第二个条目表示 /media/disk 目录下挂载了读卡器中 2GB 的 SD 记忆卡,最后一个条目表示 /misc/musicbox 目录下挂载了一个网络驱动
- 案例
- 以 CD-ROM 为例,在我们插入 CD-ROM 前,首先查看一下系统信息:
1
2
3
4
5
6
7
8
9[me@linuxbox ~]$ 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) - 此列表来自于一个使用 LVM 机制创建其根文件系统的 CentOS5 系统。
- 与许多现代 Linux 发行版一样,此系统在 CD-ROM 插入后会自动进行挂载。
- 光盘插入后,输入 mount 命令,便会显示如下系统内容:
1
2
3
4
5
6
7
8
9
10[me@linuxbox ~]$ 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 ,本系统上的设备名是 /dev/hdc,已经挂载在 /media/live-1.0.10-8 目录下并且是 iso9660 类型。
- 获取 CD-ROM 的设备名之后,便可以卸载该设备,然后将其挂载在文件系统树的另一个节点上。
- 进行此操作,必须首先获得超级用户权限,再使用 umount 命令卸载光盘。
1
2
3[me@linuxbox ~]$ su -
password:
[root@linuxbox ~]# umount /dev/hdc - 接下来,我们为光盘创建一个新的挂载节点。挂载节点仅仅是文件系统上的某个目录,并没有什么特别之处,甚至都不需要是空目录,如果在非空目录上挂载设备,该目录下原有的内容将不可见直到此设备被卸载。
1
[root@linuxbox ~]# mkdir /mnt/cdrom
- CD 光盘挂载到新的节点上,使用 -t 选项指定文件系统类型:
1
[root@linuxbox ~]# mount -t iso9660 /dev/hdc /mnt/cdrom
- 之后,便可以通过新建的挂载节点访问 CD 光盘的内容:
1
2[root@linuxbox ~]# cd /mnt/cdrom
[root@linuxbox cdrom]# ls - 请注意,如果此时试图卸载 CD 光盘就会出现下面问题:
1
2[root@linuxbox cdrom]# umount /dev/hdc
umount: /mnt/cdrom: device is busy - 因为设备正在被某人或事某程序使用时是不能被卸载的。
1
2[root@linuxbox cdrom]# cd
[root@linuxbox ~]# umount /dev/hdc - 如此该设备便卸载成功了。
确定设备名称
- 基本介绍
- 查看 /dev 目录下的设备信息,我们就会发现有海量的设备:
1
[me@linuxbox ~]$ ls /dev
- Linux 存储设备名称
模式 | 设备 |
---|---|
/dev/fd* | 软盘驱动器 |
/dev/hd* | 较旧系统上的 IDE 硬盘。典型的主板有两个 IDE 连接点或通道,并且每个都有两个驱动器附着点。线缆上第一个驱动器叫做主设备,第二个叫做从设备。设备命名按照如下规则进行:/dev/hda 代表第一个通道上的主设备;/dev/hdb 表示第一个通道上的从设备;/dev/hdc 代表第二个通道上的主设备,以此类推,而末尾的数字代表设备的分区号。例如,当 /dev/hda 代表 整个硬盘时,/dev/hda1 表示该硬盘驱动上的第一块分区 |
/dev/lp* | 打印机设备 |
/dev/sd* | SCSI 硬盘,在最近的 Linux 系统上,内核把所有的类硬盘设备 (包括 PATA/SATA 硬盘、闪存、USB 海量存储设备等) 都当作 SCSI 硬盘。 |
/dev/sr* | 光驱 |
- 补充说明
- 如果使用的系统不能自动挂载可移动设备,首先可以对 /var/log/messages 文件进行实时查看:
1
[me@linuxbox ~]$ sudo tail -f /var/log/messages
- 相关信息如下:
1
2Jul 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 - 获取设备名后,我们便可以挂载此闪存设备:
1
2
3[me@linuxbox ~]$ sudo mkdir /mnt/flash
[me@linuxbox ~]$ sudo mount /dev/sdb1 /mnt/flash
[me@linuxbox ~]$ df
创建新的文件系统
基本介绍
- 将一个使用 FAT32 文件系统的闪存驱动器重新格式化为 Linux 本地文件系统,需要两个步骤:第一个,在对现有的分区不满意的情况下创建一个新的分区布局;第二,在驱动器上创建一个新的空文件系统。
用 fdisk 命令进行磁盘分区
- fdisk 命令实现用户与磁盘设备进行比较低层次的直接交互。
- 该工具可以用来编辑、删除以及创建设备分区。使用闪存前,我们必须首先将其卸载,然后再启动 fdisk 程序:
1
2[me@linuxbox ~]$ sudo umount /dev/sdb1
[me@linuxbox ~]$ sudo fdisk /dev/sdb - 请注意使用 fdisk 命令指定设备时,设备名要是整个设备的而不是分区号。
- 然后根据程序菜单,选择自己需要的选项,即可磁盘分区。
用 mkfs 命令创建新的文件系统
- 基本介绍
- 分区编辑已经完成,我们便可以在闪存上创建新的文件系统。
- mkfs 命令可以用来创建各种类型的文件系统。
- mkfs 命令
1
[me@linuxbox ~]$ sudo mkfs -t ext3 /dev/sdb1 # ext3 文件系统类型
测试、修复文件系统
基本介绍
- 概述
- 系统每次启动时,挂载文件系统前都会惯例性地检查文件系统的完整性,此检查过程是由 fsck 程序完成的,fstab 文件每个条目末尾的数字正是对应设备的检查优先级。
- 除了检查文件系统的完整性外,fsck 还能修复损坏的文件系统,修复程度取决于损坏程序。
- fsck 命令
1
2
3
4[me@linuxbox ~]$ sudo fsck /dev/sdb1
fsck 1.40.8 (13-Mar-2012)
e2fsck 1.40.8 (13-Mar-2012)
/dev/sdb1: clean, 11/3904 files, 1661/15608 blocks
格式化软盘
- 对于那些仍然使用配备软盘驱动器的老式电脑的用户,同样可以管理这些软盘设备。
- 首先,我们对软盘进行一个低级格式化操作,然后创建一个文件系统。
- fdformat 程序后面输入指定的软盘设备名,即可完成格式化操作
1
[me@linuxbox ~]$ sudo fdformat /dev/fd0
- 接下来用 mkfs 命令为软盘创建一个 FAT 文件系统
1
[me@linuxbox ~]$ sudo mkfs -t msdos /dev/fd0
- 软盘准备工作完成后,就可以向其他设备一样被挂载
直接从设备转移数据
- 基本介绍
- 我们通常认为电脑上的数据都是以文件的形式存储,但也有可能会认为数据以原始形式存储。
- 以磁盘驱动器为例,它包含了许多被操作系统当作目录或文件的数据块。如果可以简单地把磁盘驱动器当作一个大数据块集,那么我们就可以执行一些有用任务,诸如克隆设备等。
- dd 程序可以完成这样的任务,该命令将数据块从一个地方复制到另一个地方。
1
dd if=input_file of=output_file [bs=block_size [count=blocks]]
- 案例
- 假定现在有两个容量一样的 U 盘,并且我们希望将第一个 U 盘里面的内容准确完全地复制到第二个 U 盘里面。
- 如果这两个盘都已经连接到电脑上并且它们的设备名分别为 /dev/sdb 和设备 /dev/sdc,那么我们就可以用下面的命令行将第一个盘上的所有内容复制到第二个盘上:
1
dd if=/dev/sdb of=/dev/sdc
- 或者,如果只有一个盘连接到电脑上,那么我们可以将其内容先复制到一个普通的文件里以备后续存储或复制:
1
dd if=/dev/sdb of=flash_drive.img
创建 CD-ROM 映像
基本介绍
- 向 CD-ROM 写入数据包括两个步骤:首先,创建一个 ISO 映像文件,也就是 CD-ROM 文件系统映像;其次,将此映像文件写入到 CD-ROM 介质中。
创建一个 CD-ROM 文件映像副本
- 如果我们想给现有的 CD-ROM 创建一个 ISO 映像,可以使用 dd 命令将 CD-ROM 中所有数据块复制到本地某个文件。
- 假定我们有一张 Ubuntu 的 CD 光盘,并打算创建一个 ISO 文件以便后续制作更多副本。
- CD 光盘被插入且其设备名被确定后,我们便可以制作 ISO 文件:
1
dd if=/dev/cdrom of =ubuntu.iso
- 该方法同样适用于数据类 DVD,但不适用于音频 DVD,因为音频 DVD 并不使用文件系统实现存储。
- 对于音频 CD,可以使用 cdrdao 命令
从文件集合中创建映像文件
- enisoimage 程序通常用于创建包含一个目录内容的 ISO 映像文件。
- 首先我们创建一个目录,该目录包含了所有我们希望加进映像文件里的文件,然后运行 enisoimage 程序创建映像文件。
- 例如,假使事先我们创建了一个叫做 ~/cd-rom-files 的文件目录,并且该目录中包含了所有准备装入 CD-ROM 中的文件,那么接下来,我们就可以用 enisoimage 命令创建 ISO 映像文件
1
genisoimage -o cd-rom.iso -R -J ~/cd-rom-files
- -R 选项添加了允许 Rock Ridge 延伸的元数据,此延伸允许在 Linux 中使用较长文件名的文件以及 POSIX 风格的文件。
- -J 选项允许 Joliet 延伸,此延伸允许在 Windows 中使用较长文件名的文件
向 CD-ROM 写入映像文件
基本介绍
- 映像文件创建好,下一步便是将其刻录进光学介质中
直接挂载 ISO 映像文件
- 当 ISO 映像文件仍然在硬盘上时,我们可以把它当作已存在于光学介质中,并且有一个窍门可以实现映像文件的挂载。
- 那就是通过增加 -o loop 选项来挂载,如此便可以把映像文件当作设备一样挂载在文件系统树上了。
1
2mkdir /mnt/iso_image
mount -t iso9660 -o loop image.iso /mnt/iso_image - 在上面的例子中,我们创建了一个叫做 /mnt/iso_image 挂载节点并将 image.iso 映像文件挂载在该节点上。
- 映像文件挂载成功后,就可以把它当作真实的 CD-ROM 或 DVD。
- 记住,当不需要该映像文件的时候要将其卸载。
擦除可读写 CD-ROM
- 可擦写 CD-ROM 在重用之前需要被擦除或清空,我们可以通过 wodim 命令指定光盘刻录机操作对象的设备名以及所要执行的擦除类型来完成。
- wodim 程序提供多种擦除类型,最基本的就是 fast 类型。
1
wodim dev=/dev/cdrw blank=fast
写入映像文件
- 同样我们使用 wodim 命令写入映像文件,通过指定写入的光介质刻录设备的名字以及映像文件的名字来完成:
1
wodim dev=/dev/cdrw image.iso
参考文章
- 转载:Linux 命令行大全
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment
TwikooGitalk