6.1 一切从“/”开始
在Linux系统中,目录、字符设备、块设备、套接字、打印机等都被抽象成了文件,即刘遄老师所一直强调的“Linux系统中一切都是文件”。既然平时我们打交道的都是文件,那么又应该如何找到它们呢?在Windows操作系统中,想要找到一个文件,我们要依次进入该文件所在的磁盘分区(假设这里是D盘),然后在进入该分区下的具体目录,最终找到这个文件。但是在Linux系统中并不存在C/D/E/F等盘符,Linux系统中的一切文件都是从“根(/)”目录开始的,并按照文件系统层次化标准(FHS)采用树形结构来存放文件,以及定义了常见目录的用途。另外,Linux系统中的文件和目录名称是严格区分大小写的。例如,root、rOOt、Root、rooT均代表不同的目录,并且文件名称中不得包含斜杠(/)。Linux系统中的文件存储结构如图6-1所示。
图6-1 Linux系统中的文件存储结构
在Linux系统中另外还有一个重要的概念—路径。路径指的是如何定位到某个文件,分为绝对路径与相对路径。绝对路径指的是从根目录(/)开始写起的文件或目录名称,而相对路径则指的是相对于当前路径的写法。我们来看下面这个例子,以帮助大家理解。假如有位外国游客来到中国潘家园旅游,当前内急但是找不到洗手间,特意向您问路,那么您有两种正确的指路方法。
绝对路径(absolute path):首先坐飞机来到中国,到了北京出首都机场坐机场快轨到三元桥,然后换乘10号线到潘家园站,出站后坐34路公交车到农光里,下车后路口左转。
相对路径(relative path):前面路口左转。
.2 物理设备的命名规则
在Linux系统中一切都是文件,硬件设备也不例外。既然是文件,就必须有文件名称。系统内核中的udev设备管理器会自动把硬件名称规范起来,目的是让用户通过设备文件的名字可以猜出设备大致的属性以及分区信息等;这对于陌生的设备来说特别方便。另外,udev设备管理器的服务会一直以守护进程的形式运行并侦听内核发出的信号来管理/dev目录下的设备文件。Linux系统中常见的硬件设备的文件名称如表6-2所示。
表6-2 常见的硬件设备及其文件名称
硬件设备 | 文件名称 |
IDE设备 | /dev/hd[a-d] |
SCSI/SATA/U盘 | /dev/sd[a-p] |
软驱 | /dev/fd[0-1] |
打印机 | /dev/lp[0-15] |
光驱 | /dev/cdrom |
鼠标 | /dev/mouse |
磁带机 | /dev/st0或/dev/ht0 |
在填了这两个“坑”之后,刘遄老师再来分析一下/dev/sda5这个设备文件名称包含哪些信息,如图6-2所示。
图6-3 第一个扇区中的数据信息
所谓扩展分区,严格地讲它不是一个实际意义的分区,它仅仅是一个指向下一个分区的指针,这种指针结构将形成一个单向链表。
图6-4 硬盘分区的规划
6.3 文件系统与数据资料
用户在硬件存储设备中执行的文件建立、写入、读取、修改、转存与控制等操作都是依靠文件系统来完成的。文件系统的作用是合理规划硬盘,以保证用户正常的使用需求。Linux系统支持数十种的文件系统,而最常见的文件系统如下所示。
Ext3:是一款日志文件系统,能够在系统异常宕机时避免文件系统资料丢失,并能自动修复数据的不一致与错误。然而,当硬盘容量较大时,所需的修复时间也会很长,而且也不能百分之百地保证资料不会丢失。它会把整个磁盘的每个写入动作的细节都预先记录下来,以便在发生异常宕机后能回溯追踪到被中断的部分,然后尝试进行修复。
Ext4:Ext3的改进版本,作为RHEL 6系统中的默认文件管理系统,它支持的存储容量高达1EB(1EB=1,073,741,824GB),且能够有无限多的子目录。另外,Ext4文件系统能够批量分配block块,从而极大地提高了读写效率。
XFS:是一种高性能的日志文件系统,而且是RHEL 7中默认的文件管理系统,它的优势在发生意外宕机后尤其明显,即可以快速地恢复可能被破坏的文件,而且强大的日志功能只用花费极低的计算和存储性能。并且它最大可支持的存储容量为18EB,这几乎满足了所有需求。
图6-5 VFS的架构示意图
6.4 挂载硬件设备
我们在用惯了Windows系统后总觉得一切都是理所当然的,平时把U盘插入到电脑后也从来没有考虑过Windows系统做了哪些事情,才使得我们可以访问这个U盘的。接下来我们会逐一学习在Linux系统中挂载和卸载存储设备的方法,以便大家更好地了解Linux系统添加硬件设备的工作原理和流程。前面讲到,在拿到一块全新的硬盘存储设备后要先分区,然后格式化,最后才能挂载并正常使用。“分区”和“格式化”大家以前经常听到,但“挂载”又是什么呢?刘遄老师在这里给您一个最简单、最贴切的解释—当用户需要使用硬盘设备或分区中的数据时,需要先将其与一个已存在的目录文件进行关联,而这个关联动作就是“挂载”。下文将向读者逐步讲解如何使用硬盘设备,但是鉴于与挂载相关的理论知识比较复杂,而且很重要,因此决定再拿出一个小节单独讲解,这次希望大家不仅要看懂,而且还要记住。
6.5 添加硬盘设备
根据前文讲解的与管理硬件设备相关的理论知识,我们先来理清一下添加硬盘设备的操作思路:首先需要在虚拟机中模拟添加入一块新的硬盘存储设备,然后再进行分区、格式化、挂载等操作,最后通过检查系统的挂载状态并真实地使用硬盘来验证硬盘设备是否成功添加。
1. fdisk命令
在Linux系统中,管理硬盘设备最常用的方法就当属fdisk命令了。fdisk命令用于管理磁盘分区,格式为“fdisk [磁盘名称]”,它提供了集添加、删除、转换分区等功能于一身的“一站式分区服务”。不过与前面讲解的直接写到命令后面的参数不同,这条命令的参数(见表6-5)是交互式的,因此在管理硬盘设备时特别方便,可以根据需求动态调整。
表6-5 fdisk命令中的参数以及作用
参数 | 作用 |
m | 查看全部可用的参数 |
n | 添加新的分区 |
d | 删除某个分区信息 |
l | 列出所有可用的分区类型 |
t | 改变某个分区的类型 |
p | 查看分区表信息 |
w | 保存并退出 |
q | 不保存直接退出 |
2. du命令
既然存储设备已经顺利挂载,接下来就可以尝试通过挂载点目录向存储设备中写入文件了。在写入文件之前,先介绍一个用于查看文件数据占用量的du命令,其格式为“du [选项] [文件]”。简单来说,该命令就是用来查看一个或多个文件占用了多大的硬盘空间。我们还可以使用du -sh /*命令来查看在Linux系统根目录下所有一级目录分别占用的空间大小。