Linux文件系统的最基本数据结构:inode和block

    • Linux文件系统的最基本数据结构:inode和block

      • 为什么有inode和block

      • inode

      • block

      • 创建目录或文件

      • 使用场景

      • 查看本机的文件系统信息

Linux文件系统的最基本数据结构:inode和block

为什么有inode和block

由于Linux系统是多用户多的,所以文件系统类型多样化是在所难免的。从ext2开始,是将文件属性和文件内容分开存储的,分别由inode和block来负责。

inode

用于存储文件的各属性,包括:

- 所有者信息:文件的owner,group;
- 权限信息:read、write和excite;
-时间信息:建立或改变时间(ctime)、最后读取时间(atime)、最后修改时间(mtime);
- 标志信息:一些flags;
- 内容信息:type,size,以及相应的block的位置信息。

//注意:不记录文件名或目录名,文件名或目录名记录在文件所在目录对应的block里。

block

用来存储文件的内容。

创建目录或文件

1、当创建一个目录时,文件系统会为该目录分配一个inode和至少一个block。该inode记录该目录的属性,并指向那块block。该block记录该目录下相关联的文件或目录的关联性和名字。

2、当创建一个文件时,文件系统会为该文件分配至少一个inode和与该文件大小相对应的数量的block。该inode记录该文件的属性,并指向block。

3、如果一个目录中的文件数太多,以至于1个block容纳不下这么多文件时,Linux的文件系统会为该目录分配更多的block。

分区 
(1)分区结构

分区(partition)在被Linux的文件系统(比如ext2)格式化的时候,会分成inode table和block table两部分,且大小都是固定的。该分区的所有inode都在inode table里,所有block都在block table里。

(2)块大小

ext2允许的block size为1024bytes、2048bytes和4096bytes。

(3)inode大小

ext2一般默认给inode预设的大小为128bytes。

(4)预设分区

一个T bytes的分区,设定每个block为B bytes,每个inode为I bytes。如果假设平均每个文件占用两个block的话,那么inode的数量就应该设定为T/(2B+I)个,即inode table为T*I/(2B+I) bytes,block table为T*B/(2B+I) bytes。所以一个分区的文件系统所能容纳的文件数量,被限制于该分区的文件系统的inode area中的inode数。

如果一个分区大小为1GB,每个block为4KB,一个inode为128B,并假设平均每个文件占用2个block。那么inode的数量为1GB/(8KB+128B)=129055.5,即129055。那么inode table的大小为129055*128B=15.75MB。所以按照这样的规划,如果一个1GB的磁盘,那么格式化后,就已经有15.75MB被使用了。

使用场景

大文件应用场景:block设置的小一些,inode设置的多一些。比如新闻组、BBS等。 
小文件应用场景:block设置的大一些,inode设置的少一些。比如图片分享网站。

查看本机的文件系统信息

使用dumpe2fs命令可以查看分区的文件系统的相关信息。比如我在我的一台测试机上查看sda1,可以输入:

dumpe2fs /dev/sda1

会得到如下内容,一些信息已经标注在注释里了。

(1)文件系统基本信息

#该分区的文件系统的名称
Filesystem volumn name: MAIN
#上次的挂载点
Last mounted on: <not available>
#文件系统的通用唯一标识符
Filesystem UUID: <none>
#文件系统的
Filesystem magic number: 0xEF53
#修订版本号
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal needs_recovery
Filesystem flags: signed_directory_hash
Default mount options: (none)
#文件系统状态
Filesystem state: clean
#发生错误后的行为
Errors behavior: Continue
#操作系统
Filesystem OS type: Linux

(2)结构信息

#Inode总数
Inode count: 1313312
#Block总数
Block count: 1313305
#保留block数
Reserved block count: 65665
#空闲block数
Free blocks: 979164
#空闲inode数
Free inodes: 1298415  
#第一个block的编号
First block: 0
#block的大小
Block size: 4096
#fragment的大小
Fragment size: 4096
#每个group的block数是32K个
Blocks per group: 32768
#每个group的fragment数是32K个
Fragments per group: 32768
#每个group的inode数
Inodes per group: 32032
#每个group的inode blocks
Inode blocks per group: 1001

一个100M(100000K)文件的磁盘分区,分别写入1K文件与写入1M文件,分别可以写多少个? 
答:最多写入9103个文件

分析

设置默认块大小1k
100M/(1k+128B)
// 转换成b后除
104857600/1152
最多9103
100M被格式化以后有11kb创建了inode表
//用104857600除以9103=11519(11kb)

原创文章,作者:M20_he,如若转载,请注明出处:http://www.178linux.com/43527

(8)
M20_heM20_he
上一篇 2016-09-06 08:51
下一篇 2016-09-06 08:51

相关推荐

  • VMware vSphere所需要开放的端口

        80 vCenter Server需要端口80用于直接HTTP连接。端口80会将请求重定向到HTTPS端口443。如果意外使用了http://server而不是https://server,此端口将非常有用。     389 此端口在vCenter Server的本地和所…

    Linux干货 2016-07-07
  • select循环解析

    前言:   select命令用于创建菜单,在select循环执行时会根据list数组给出选择菜单,用户选择后的结果保存在变量中,然后给出菜单,等待用户选择。select是个死循环,如果用户用户想跳出选择循环,需要在循环体中根据条件增加break语句。 格式: select variable in list do 循环体命令 done 示例: 在这个…

    Linux干货 2016-08-24
  • yum仓库配置

    yum仓库搭建 yum客户端在安装之前要在服务器下载相关的源数据缓存在 cachedir=/var/cache/yum/$basearch/$releasever中 gpgcheck=1检查数据包的签名完整性 导入钥匙或gpgcheck=0就不检查否侧安装不了yum 在/etc/yum.conf设置配置文件 在/etc/yum.repos.d中创建一个后缀是…

    2017-12-03
  • 文件系统挂载

    文件系统挂载 文件系统管理: 将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为称之为挂载;  解除此关联关系的过程称之为卸载;  把设备关联挂载点:Mount Point mount  卸载时:可使用设备,也可以使用挂载点 umount  注意:挂载点下原有文件在挂载完成后…

    Linux干货 2015-12-16
  • 八大排序算法

    概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 我们这里说说八大排序就是内部排序。     当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。    快速…

    Linux干货 2015-04-07
  • RAID功能介绍及其使用

    RAID功能介绍及其使用 独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks),简称磁盘阵列。其基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、容量巨大的硬盘。根据…

    Linux干货 2017-01-06