本文专业术语较多,建议搭配百度百科查看

存储结构与管理硬盘

一切从/开始

在Linux系统中,目录、字符设备、套接字、硬盘、光驱、打印机等都被抽象成文件形式,即一切都是文件
Linux系统中的一切文件都是从根目录/开始的,并按照文件系统层次标准(FHS)采用倒树状结构来存放文件,以及定义了常见目录的用途

在Linux系统中文件和目录名称是严格区分大小写的

Linux系统中文件存储的结构如下图所示

在Linux系统中,最常见的目录以及所对应的存放内容如下表所示

目录名称 应放置文件的内容
/boot 系统启动文件,如内核和启动菜单
/dev 设备文件,代表系统中的硬件设备
/etc 系统配置文件和启动脚本
/root 管理员的个人主目录
/home 用户的个人主目录
/bin 基本用户命令,可在单用户模式下使用
/lib 系统共享库,供/bin和/sbin命令使用
/sbin 系统管理命令,供管理员使用
/media 挂载点目录,用于可移动设备
/opt 第三方应用软件包
/srv 服务数据目录,存放网络服务数据
/tmp 临时文件目录,所有用户均可访问
/proc 虚拟文件系统,提供进程和内核信息
/usr/local 本地安装的软件和应用程序
/usr/sbin 系统管理员使用的非基本管理命令
/usr/share 共享数据,如文档和帮助文件
/var 动态数据,如日志文件和临时文件
/lost+found 文件系统恢复区,存放丢失的文件碎片

在Linux系统中还有路径这一个重要概念,路径指的是如何定位到某个文件,分为绝对路径与相对路径

  1. 绝对路径指的是从根目录(/)开始写起的文件或目录名称,如/root/Desktop
  2. 相对路径则指的是相对于当前路径的写法,如当前位于/root目录,可直接写Desktop

物理设备的命名规则

在Linux系统中一切都是文件,硬件设备也不例外。既然是文件,就必须有文件名称。系统内核中的udev设备管理器会自动把硬件名称规范起来,另外,udev设备管理器的服务会一直以守护进程的形式运行并侦听内核发出的信号来管理/dev目录下的设备文件

Linux系统中常见的硬件设备及其文件名称如下表所示

硬件设备 文件名称
IDE设备 /dev/hd[a-d]
NVMe设备 /dev/nvme[0-23]
SCSI/SATA/U盘 /dev/sd[a-z]
virtio设备 /dev/vd[a-z]
软驱 /dev/fd[0-1]
打印机 /dev/lp[0-15]
光驱 /dev/cdrom
鼠标 /dev/mouse
磁带机 /dev/st0或/dev/ht0

一般的硬盘设备都是以/dev/sd开头,一台主机上可以有多个硬盘,对应a~z,硬盘的分区编号详情如下

  1. 主分区或扩展分区编号从1开始,到4结束
  2. 逻辑分区从编号5开始

比如,/dev/sda5包含以下信息

  1. /dev硬件设备文件所在的目录
  2. /sd存储设备,此为SCSI设备
  3. a硬盘顺序号,此为第一个被识别到的设备
  4. 5分区顺序号,且为逻辑分区

文件系统与数据资料

用户在硬件存储设备中执行的文件建立、写入、读取、修改、转存与控制等操作都是依靠文件系统来完成的,文件系统的作用是合理规划硬盘,以保证用户正常的使用需求,Linux系统支持数十种文件系统,最常见的文件系统如下所示

  1. Ext2:Linux系统的第一个商业级文件系统,基本沿袭了UNIX文件系统的设计标准,但由于不包含日志读写功能,数据丢失的可能性很大

  2. Ext3:是一款日志文件系统,它会把整个硬盘的每个写入动作的细节都预先记录下来,然后再进行实际操作,以便在发生异常宕机后能回溯追踪到被中断的部分,Ext3能够在系统异常宕机时避免文件系统资料丢失,并能自动修复数据的不一致与错误,然而,当硬盘容量较大时,所需的修复时间也会很长,而且也不能100%地保证资料不会丢失

  3. Ext4:Ext3的改进版本,作为RHEL 6系统中默认的文件管理系统,它支持的存储容量高达1EB(1EB=1,073,741,824GB),且能够有无限多的子目录,另外,Ext4文件系统能够批量分配block(块),从而极大地提高了读写效率

  4. XFS:是一种高性能的日志文件系统,而且是RHEL 7/8中默认的文件管理系统,它的优势在发生意外宕机后尤其明显,即可以快速地恢复可能被破坏的文件,而且强大的日志功能只需花费极低的计算和存储性能

挂载硬件设备

在拿到一块全新的硬盘存储设备后要先分区,然后格式化,最后才能挂载并正常使用

mount命令

mount命令用于挂载文件系统,格式为mount 文件系统 挂载目录,常用参数如下表所示

作用 参数
-a 挂载所有在/etc/fstab中定义的文件系统
-t 指定文件系统的类型

如果要挂载网络存储设备,推荐使用UUID(Universally Unique Identifier,通用唯一识别码)进行挂载操作。UUID是一串用于标识每块独立硬盘的字符串,具有唯一性及稳定性,特别适合用来挂载网络设备。
使用blkid命令可以显示设备的属性信息,语法格式为blkid 设备名

执行完mount命令后就能使用文件系统了,但系统在重启后挂载就会失效,如果想让硬件设备和目录永久地进行自动关联,就必须把挂载信息按照指定的填写格式设备文件 挂载目录 格式类型 权限选项 是否备份 是否自检写入到/etc/fstab文件中,详见下表

字段 意义
设备文件 一般为设备的路径+设备名称,也可以写唯一识别码(UUID)
挂载目录 指定要挂载到的目录,需在挂载前创建好
格式类型 指定文件系统的格式,比如Ext3、Ext4、XFS、SWAP、iso9660
权限选项 若设置为defaults,则默认权限为:rw, suid, dev, exec, auto, nouser, async
是否备份 若为1则开机后使用dump进行磁盘备份,为0则不备份
是否自检 若为1则开机后自动进行磁盘自检,为0则不自检

写入到/etc/fstab文件中的设备信息并不会立即生效,需要使用mount -a进行自动挂载

df命令

df命令用于查看已挂载的磁盘空间使用情况,语法格式为df -h

unmout命令

unmout命令用于卸载设备或文件系统,语法格式为umount [设备文件/挂载目录]

lsblk命令

lsblk命令用于查看已挂载的磁盘的空间使用情况

添加硬盘设备

  1. 打开虚拟机,点击编辑虚拟机设置

  2. 点击添加,选择硬盘,点击下一步

  3. 选择虚拟硬盘的类型,单击下一步

  4. 选中创建新虚拟磁盘单选按钮,点击下一步

  5. 为磁盘配额,基本保持默认即可,点击下一步

  6. 指定磁盘文件,继续采用默认设置即可,点击完成

  7. 查看新硬盘是否添加成功,点击确定,重启虚拟机

fdisk命令

fdisk命令用于新建、修改及删除磁盘的分区表信息,语法格式为fdisk 磁盘名称

字段 意义
参数 作用
m 查看全部可用的参数
n 添加新的分区
d 删除某个分区信息
l 列出所有可用的分区类型
t 改变某个分区的类型
p 查看分区表信息
w 保存并退出
q 不保存直接退出

du命令

du命令用查看分区或目录所占用的磁盘容量大小,语法格式为du -sh目录名称

添加交换分区

交换分区是一种通过在硬盘中预先划分一定的空间,然后把内存中暂时不常用的数据临时存放到硬盘中,以便腾出物理内存空间让更活跃的程序服务来使用的技术,其设计目的是为了解决真实物理内存不足的问题,通俗来讲就是让硬盘帮内存分担压力,但由于交换分区是通过硬盘设备读写数据的,速度要比物理内存慢,所以只有当真实的物理内存耗尽后才会调用交换分区的资源

交换分区的大小一般为真实物理内存的1.5~2倍

mkswap命令用于对新设备进行交换分区格式化,语法格式为mkswap 设备名称
swapon命令用于激活新的交换分区设备,语法格式为swapon 设备名称

磁盘容量配额

Linux系统的设计初衷就是让多人一起使用并执行各自的任务,从而成为多用户、多任务的操作系统,但是,硬件资源是固定且有限的,root管理员需要使用磁盘容量配额服务来限制某位用户或某个用户组针对特定文件夹可以使用的最大硬盘空间或最大文件个数,一旦达到这个最大值就不再允许继续使用,可以使用quota技术进行磁盘容量配额管理,从而限制用户的硬盘可用容量或所能创建的最大文件个数,quota技术还有软限制和硬限制的功能

  1. 软限制(soft):当达到软限制时会提示用户,但仍允许用户在限定的额度内继续使用
  2. 硬限制(hard):当达到硬限制时会提示用户,且强制终止用户的操作

xfs_quota命令

xfs_quota命令用于管理设备的磁盘容量配额,语法格式为xfs_quota [参数] 配额 文件系统

  1. -c参数用于以参数的形式设置要执行的命令
  2. -x参数是专家模式,让运维人员能够对quota服务进行更多复杂的配置