Linux学习——Linux磁盘与文件系统管理

磁盘组成与分区复习

磁盘的组成部分:

  • 圆形的盘片
  • 机械手臂与手臂上的磁头
  • 主轴马达,可以转动盘片,让机械手臂的磁头在盘片上读写数据

 

磁盘知识要点:

  • 扇区为最小的物理存储单位,每个扇区的大小相同
  • 将扇区组成一个圆,组成柱面,柱面是分区的最小单位
  • 第一个扇区最重要,里面有磁盘主引导记录(MBR)以及分区表(分区表记录了各个分区的柱面范围)
  • 分区分为主分区和扩展分区,扩展分区可以在分出逻辑分区,能被格式化的只有主分区与逻辑分区而已
  • 磁盘分区后需要格式化,因为不同操作系统的文件系统不一样,格式化是在分区上建立文件系统,也就是告诉操作系统按照什么规则存取文件。

 

Linux文件系统的一些基本概念

  • inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码
  • block:用于记录文件的内容
  • superblock:记录文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息等

inode中记录了block的索引,只需要读取inode中block索引,就可以读取对应的block,这种数据访问方法称为索引式文件系统,文件系统一开始就将inode和block的数目规划好了,除非重新格式化,否则inode和block固定后不在变动

 

Linux的Ext2文件系统

文件系统结构:

Linux学习——Linux磁盘与文件系统管理_第1张图片

为什么要分组呢?我觉得是因为inode以及block数量过大不易于管理,因此进行分组,每个组都会分配一定的inode以及block,查找文件时只需要到对应的组中查找即可,而每个组的inode以及block数目又不会过多,其实就和索引表差不多,进行分类以减少查找数目

block group中各部分的含义:

  • data block(数据块):用来放置文件内容的地方,ext2文件系统支持的 block大小有1kb,2kb,4kb三种,每个block都有编号,block的大小会限制单一文件的最大值以及文件系统的总容量,对应关系如下表:
    Block 大小 1KB 2KB 4KB
    最大单一文件限制 16GB 256GB 2TB
    最大文件系统总容量 2TB 8TB 16TB

       如果文件小于block的大小,则该block剩余空间将不在被使用,如果文件大于block的大小,将会占用多个block数量

  • inodetable(inode表格):主要记录文件的相关属性,包括:
  1. 文件的访问模式
  2. 文件的所有者和组
  3. 文件的大小
  4. ctime:文件创建或是状态改变的时间
  5. mtime
  6. 文件特性的标志,例如SetUID
  7. block指向    

    inode有一些其他特点:

  1. 每个inode大小固定为128字节
  2. 每个文件都会占用一个inode节点
  3. 系统读取文件时,首先找到inode,并分析inode记录的权限与用户是否相符合,相符合才读取block的内容

     inode记录一个block需要花费4个字节,记录一个400MB的文件至少需要10万block,一个inode哪来这么多块呢?因此,我们    对inode的block进行了一些处理:12个直接,1个间接,1个双间接,1个三间接,结构如下:Linux学习——Linux磁盘与文件系统管理_第2张图片

  • superblock(超级块):记录整个文件系统相关信息的地方,一般来说,superblock的大小为1024字节,除了第一个block group有superblock,其余block group不一定含有superblock,即使含有,也是第一个block group内的superblock的备份,主要记录的信息有:
  1. block以及inode1的数量
  2. 未使用与已使用的inode/block数量
  3. 文件系统的挂载时间、最近一次写入数据的时间、最近一次校验磁盘的时间等文件系统的相关信息
  4. 一个validbit,若文件系统被挂载,载validbit为0,若没有被挂载,则validbit为1

 

  • 文件系统描述说明:用于描述每个blockgroup的开始与结束的block号码,以及说明每个区段(superblock,bitmap,inodemap,data block),应该只有含有superblock的block group有,

 

  • block bitmap(块对应表):从块对应表可以知道哪些block是空的,当删除一个文件时,块对应表中对应的为会变为未使用

 

  • inode bitmap(inode对照表):用于记录未使用的inode号码

 

相关命令:

#打印出设备对应的superblock以及blockgroup的相关信息
dumpe2fs [-bh] 设备文件名
参数:
-b:列出保留为坏道的部分
-h:仅列出superblock的数据,不会列出其他区段内容

可以使用df查看挂载信息

 

EXT2文件系统操作的细节

新建目录:

在ext2下新建目录,会分配一个inode以及至少一个block给该目录,inode记录该目录的相关权限与属性,inode会记录初始时分配的block号码,block会记录目录下的文件名与该文件所占用的inode号码

 

新建文件:

1、确定用户对于欲添加文件的目录是否具有w与x的权限,若有的话才能添加

2、根据inode bitmap找到没有使用的inode号码,并将新文件的权限属性写入

3、根据block bitmap找到没有使用的block号码,并将实际数据写入到block中,且更新inode的block指向

4、将刚才写入的inode与block数据同步更新inode bitmap与block bitmap,并更新superblock的内容

 

读取文件:

系统通过挂载的信息可以找到挂载点的inode号码,此时就能够得到根目录的inode内容,并根据该inode读取根目录的block内的文件名数据,再一层一层往下读到正确的文件名

 

EXT3文件系统

EXT3是EXT2的升级版,向下兼容EXT3,EXT3中具有日志文件系统的功能,日志文件系统主要用于解决数据不一致问题(例如未将所有数据写入磁盘,忽然断电),日志文件系统解决数据不一致的方式如下(简要概括):

1、预备:当系统要写入一个文件时,首先在日志记录块中记录某个文件准备要写入的信息

2、实际写入:开始写入文件的权限与数据,开始更新meta data(例如superblock、block bitmap、inode bitmap)的数据

3、结束:写入完成后,在日志记录块中标记该文件,表示已经写入完毕,如果出现数据不一致现象,只需要检查日志文件块即可,不需要检查整个文件系统,并且数据可从日志记录块中恢复

 

Linux文件系统的操作

当系统加载一个文件时,会把这个文件标记为clean,若文件被更改,则会标记为dirty,此时并不会直接写入磁盘,linux每隔一段时间将标记为dirty的数据写回磁盘,可以手动使用sync命令强制内存中设置为dirty的数据写回磁盘,正常关机情况下,会自动调用sync指令

 

挂载

挂载就是将目录与文件系统相结合(并不是所有的目录都是挂载点),目录是该文件系统的入口,访问该目录就可以访问文件系统,文件系统最顶层的目录inode号码一般为2

 

VFS(虚拟文件系统):用来管理所有的文件系统(例如读取文件系统)

#可以查看linux支持的文件系统
ls -l /lib/modules/$(uname -r)/kernel/fs

#查看目前已经加载到内存中的文件系统
cat /proc/filesystems

 

查看磁盘与目录容量的命令

#列出文件系统的整体磁盘使用量,[]表示可选
df [-ahikHTm] [目录与文件名]
参数:
-a:列出所有文件系统
-k:以kb为单位显示文件系统
-m:以mb为单位显示文件系统
-T:连同该分区的文件系统名也列出
-i:不用硬盘容量,以inode的数量显示

如果在命令中加上目录或是文件名,则会查看该目录或文件所在的分区,
使用这个命令有可能会看到/dev/shm这个目录,这个目录是用内存虚拟出来的磁盘空间,数据都存在内存中,并且不会自动写回到磁盘中

 

#评估目录或是文件的磁盘使用量
du [-ahskm] [目录或是文件]
参数:
-a:列出所有文件与目录占用的容量
-s:列出某个目录下每个目录所占用的容量
-S:不包括子目录的统计

du会将所有文件的大小均列出

 

硬连接:在某个目录下新建一个文件名连接到某个inode,此时会增加inode的引用计数,当引用计数为0时,文件才会被删除,硬连接不会消耗inode与block数量,不能跨文件系统创建硬连接,不能建立目录的硬连接

软连接:相当于windows中的快捷方式,只是记录文件的路径,软连接会占用inode与block

#创建软硬连接
In [-sf] 源文件 目标文件
参数:
-s:不加任何参数相当于创建硬连接,-s表示软连接
-f:如果目标文件存在,先删除后创建

 

 

SWAP

学习docker时就见过这个SWAP,当时以为是虚拟内存(汗),swap主要在物理内存不够时,将某些内存中的程序暂时移动到swap(硬盘)中

你可能感兴趣的:(linux)