Linux基础补充——存储结构与管理硬盘

Posted Roy_Allen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux基础补充——存储结构与管理硬盘相关的知识,希望对你有一定的参考价值。

简介

  • Linux的学习步骤:
    • Linux基础操作
    • Linux高级应用
    • Linux内核入门
    • Linux内核进阶
  • 前两部分可以看《Linux就该这么学》和《鸟哥的Linux私房菜》
  • Linux内核入门可以看《奔跑吧Linux内核》及其他经典书籍
  • 后续基础都以补充的形式,高级应用单独成章
  • 这一节补充梳理存储与硬盘的相关基础知识,先看基础操作总结

存储结构

  • Linux一切皆文件
  • 物理设备的命名规则
  • 文件系统
  • 挂载硬件,添加硬盘,添加交换分区
  • VDO
  • 原文

物理设备

  • 软驱、SATA、U盘,鼠标,打印机都是物理设备
  • 每个设备都对应Linux系统中的文件
  • 比较讲究的就是这个SATA设备,即硬盘,特别是他的分区
    • /dev/sd是每块硬盘对应的文件,这里sda并不是第一个主板插槽的设备,而是内核第一个识别的
    • sda3表示编号为3的分区,并不代表已经有三个分区或只有三个分区(可以指定)
    • 每个硬盘的分区规则
      • 第一个扇区存了主引导记录分区信息表(512B/扇)
      • 主引导记录占446字节,分区信息表64字节,每个分区信息16字节,所以最多4个分区(主分区)
      • 4个分区一般不够用,怎么办?拿出某个主分区作为扩展分区,指向其他空间(逻辑分区)
      • 也就是说,扩展分区不存数据,只是一个16字节指向逻辑分区的指针

文件系统

  • 在硬件存储设备(例如硬盘)中执行的增删改查等操作都是依靠文件系统控制的
  • 作用就是合理规划硬盘,读写数据;Linux一切皆文件,从某种角度看,Linux系统就是一套完整的文件系统
  • 常用的文件系统是Ext4(RHEL6默认)和XFS(RHEL7/8默认)
    • XFS支持高达18EB的存储容量,Ext4支持1EB存储容量
    • 相交Ext4,官方的说法是XFS的优势是压倒性的,压没压倒不知道,这个影响因素很多
  • OK,拿到一块硬盘,大致需要以下步骤才能使用
    • 分区
    • 格式化文件系统
    • 挂载到Linux系统
  • 文件系统的大致原理
    • 在Linux系统中,会维护一个硬盘地图(super block 也叫超级块),这里面记录着整个文件系统的信息
    • 记录什么呢?每个文件创建一个inode(表格)(128B),记录文件的访问权限、所属组、大小、修改访问时间、特殊权限、真实数据地址(point)等
    • 具体的文件内容,存储在文件系统所管理的硬盘中的某些block中(point);每个block大小4KB(也有1KB、2KB),1个block在inode中占用4字节
    • 如果inode被写满了,就会分配出一个block来记录(扩展),根据这个block,就能将某个文件的完整内容串联起来;
    • 所有的inode被搞到一起称之为超级块
    • 超级块提供文件系统的关键信息(块长度、最大文件长度等),还包含了读、写操作inode的函数指针;所以也叫super block
    • 注:一个硬盘只有一个超级块,可以扩展;这其实就是Linux系统和文件系统mount后使用的细节(mount后面会介绍)
  • 格式化出文件系统,默认给硬盘分4KB的block,如果文件还有1KB或5KB,会浪费一部分空间
    • 这部分的浪费也是均衡了效率与容量后较优的状态了
    • Linux内核的软件层还使用VFS(虚拟文件系统)来屏蔽不同文件系统的差异,方便我们使用

挂载

  • 要使用设备中的数据需要先将其与文件系统中一个已存在的目录关联,这就是挂载
  • 例如
    # 将设备挂载到backup目录下
    mount /dev/sdb2 /backup
    # 这个命令有一些参数
    -a 	# 挂载所有在/etc/fstab中定义的设备,开机会自检这个文件
    -t	# 指定挂载的文件系统类型,一般会自动识别
    
  • 如果要挂载网络存储设备,因为设备名称可能随时变化,需要使用UUID挂载
    • UUID 通用唯一识别码,表示每块硬盘,具有稳定性
    • 可以使用blkid查看
  • 还有个问题,重启后这些挂载又没了
    • 为了永久挂载,就要在刚才提到的fstab文件中按格式指定,各字段如下表格
    • 开机会自检这个文件,没mount的都会自动挂载
    • 如图,这是未定义时默认的fstab文件
    • 如果是网络设备在default后面加上,_netdev参数,可以等联网后再挂载
    • 修改了这个文件并不会立即生效,可以执行 mount -a 自检这个文件避免重启
  • 分区格式化是准备硬件设备,读写数据还需要挂载;即mount是Linux和文件系统衔接的环节
  • df命令,即disk free,查看挂载情况
    • 一般使用 df -h 对容量进位,方便观察
    • lsblk,查看已挂在设备的使用情况,两个差不多吧
  • 可以在虚拟机中实验一下
    • 添加硬盘
    • 添加之后就能看到新硬盘了,启动,不出意外能看到sdb,但未进行分区
    • 好,现在新盘在手,实操一下上面的理论
  • 接下来就要使用fdisk命令了,format disk
    • 针对分区这一步,新建、修改、删除分区信息表
    • 参数如下表:
    • fdisk /dev/sdb 会打开一个交互窗口,需要在root用户
    • Id参数用来表示该分区的作用(类型),可以用l参数查看
    • 之后会把这个分区抽象成文件 /dev/sdb1 ,使用file /dev/sdb1查看属性
      • 有可能分区信息没有同步给内核,使用partprobe同步一下
  • 然后是mkfs格式化分区
    • mkfs.xfs /dev/sdb1 即可
  • 最后是挂载
    • 从创建挂载点开始
    • 别忘了在fstab中写入挂载信息!

管理硬盘

  • 其实可以归到同一部分,这里也是为了格式好看说一句废话!

交换分区

  • 为了解决内存不足的问题,在硬盘中划分一部分空间,将暂时不常用的数据放到这,减少内存占用
  • 这部分硬盘空间就是SWAP分区,一般为真实内存的2倍大小
  • 由于硬盘读写比较慢,所以只有在内存即将耗尽时才会用
    • 我们按之前的步骤搞出5G做Swap;这里还要改一下分区标识码,得到/dev/sdb2
    • 这里有可能会提示你用partprobe,注意看
    • 使用mkswap对交换分区格式化
    • 使用swapon激活交换分区,相当于挂载;free命令可以查看内存和交换分区情况
    • 挂载之前的2G是/dev/sda2的空间

磁盘容量配额

  • Linux是多用户操作系统,避免某些用户占用硬盘资源过多,可以使用quota配额
  • 先知道就行

VDO

  • virtual data optimize 虚拟数据优化
  • 通过压缩或删除存储设备上数据优化存储空间的计数
  • 这项技术随RHEL8正式发布,关键在于对原有的数据进行删重操作、自动压缩
    • 删除重复数据类似网盘,只保存第一次上传的一份,后续都是文件指针
  • 8版本默认使用VDO,也可以通过 dnf install kmod-kvdo vdo 安装

链接

  • 软链接:类似Windows的快捷方式,仅包含被链接文件的名称和路径

  • 硬链接:指向原始文件的指针

    • 之前说,每个文件都会有inode保存信息
    • 添加一个硬链接,就会创建出一个这个文件的inode
    • 读取文件是通过超级块—inode——blocks,所以文件的inode个数不为0,就代表文件存在不能删除

  • 小结

    • 这里主要介绍了文件系统这一块,依托虚拟机进行实操
    • 更深入的内容可以在学习内核时研究

以上是关于Linux基础补充——存储结构与管理硬盘的主要内容,如果未能解决你的问题,请参考以下文章

Linux磁盘与文件系统管理

linux的磁盘管理与文件系统

Linux磁盘管理精讲

存储结构与管理硬盘(Day9 ~ Day10)

Linux基础——硬盘分区格式化及文件系统的管理

磁盘管理与文件系统