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

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

2018年09月25日 20:41:05 菜到怀疑人生 阅读数:16

磁盘组成与分区复习

磁盘的组成部分:

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

 

磁盘知识要点:

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

 

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

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

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

 

Linux的Ext2文件系统

文件系统结构:

âExt2æ件系ç»âçå¾çæç´¢ç»æ

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

block group中各部分的含义:

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

       如果文件小于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中inodeçblockç»æâçå¾çæç´¢ç»æ

  • 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号码

 

相关命令:

 
  1. #打印出设备对应的superblock以及blockgroup的相关信息

  2. dumpe2fs [-bh] 设备文件名

  3. 参数:

  4. -b:列出保留为坏道的部分

  5. -h:仅列出superblock的数据,不会列出其他区段内容

  6.  
  7. 可以使用df查看挂载信息

  8.  

 

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(虚拟文件系统):用来管理所有的文件系统(例如读取文件系统)

 
  1. #可以查看linux支持的文件系统

  2. ls -l /lib/modules/$(uname -r)/kernel/fs

  3.  
  4. #查看目前已经加载到内存中的文件系统

  5. cat /proc/filesystems

 

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

 
  1. #列出文件系统的整体磁盘使用量,[]表示可选

  2. df [-ahikHTm] [目录与文件名]

  3. 参数:

  4. -a:列出所有文件系统

  5. -k:以kb为单位显示文件系统

  6. -m:以mb为单位显示文件系统

  7. -T:连同该分区的文件系统名也列出

  8. -i:不用硬盘容量,以inode的数量显示

  9.  
  10. 如果在命令中加上目录或是文件名,则会查看该目录或文件所在的分区,

  11. 使用这个命令有可能会看到/dev/shm这个目录,这个目录是用内存虚拟出来的磁盘空间,数据都存在内存中,并且不会自动写回到磁盘中

 

 
  1. #评估目录或是文件的磁盘使用量

  2. du [-ahskm] [目录或是文件]

  3. 参数:

  4. -a:列出所有文件与目录占用的容量

  5. -s:列出某个目录下每个目录所占用的容量

  6. -S:不包括子目录的统计

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

 

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

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

 
  1. #创建软硬连接

  2. In [-sf] 源文件 目标文件

  3. 参数:

  4. -s:不加任何参数相当于创建硬连接,-s表示软连接

  5. -f:如果目标文件存在,先删除后创建

 

 

SWAP

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值