linux文件系统只有几k,关于Linux文件系统的的简单理解和认识

关于Linux文件系统的的简单理解和认识

关于文件系统的运作,这与操作系统带的档案数据有关。例如Linux操作系统的档案权限(rwx)与文件属性(拥有者,群组,时间参数等)。文件系统通常会将这两部分的数据分别存放在不同的区块,权限与属性放置到inode中,至于实际数据则放置到date block区块中,另外,还有一个超级块区(super block)会记录整个文件系统的整体信息,包含inode与block的总量,使用量,剩余量等。

每个inode与block都有编号,至于这三个数据的意义可以简单说明如下:

super block :记录此 filessystem的整体信息,包括inode/block的总量,使用量,剩余量,以及文件系统的格式与相关信息等;(#这个文件系统对应的是一个分区,应该可以这样理解)

Inode 表:记录档案的属性,一个档案占用一个inode号,同时记录此档案的数据所在的block号码;

Block :实际记录档案的内容,若档案太大时,会占用多个block。

如果当一个分区分的容量分得比较大,所有的inode  block superblock统一管理不是很方便,所以我们有在分区上存在分组的概念,把一个分区我们分成多个区块群组,不同的区块群组管理自身的inode  block  superblock号

2fe98840d482147a2614a4e7f0a43522.png

Inode  table (inode表格)

(格式化分区的时候inode的数量和大小128bytes就已经固定)

数据内容:

该文件的权限(rwx);

该文件的拥有者与群组;

该文件的容量;

该文件建立或状态改变的时间(ctime);

最近一次的读取时间(atime);

最近修改的时间(mtime);

文件特定的标志(SUID SGID STICK)

该文件真正内容的指向(指向block)

1a1f887892efee0286a8e7481322a118.png

Inode表的数据结构,表前面为文件的元数据基本信息,后面就是数据指向,如果文件太大有400M,分区的block大小假如为4K,由于inode表的容量有限128字节,不可能有那边多的空间指针指向数据的block,通常情况下,一个inode表有12个直接数据指向,再就是间接指向,两间接指向,三间接指向

直接数据指向:一个指向只能指向一个block,所以12个直接指向只能代表48K的数据;

间接指向:间接指向指向一个block,该block上有1024的直接指向可以指向block,故一个间接指向可以表示4M的数据;

两重间接指向:相当与开始指向一个block有1024个间接指向指向block,每个block又有1024个直接指向数据块,所以可以表示:4K*1024*1024=4G;

三重间接指向:通过以上推理,一个三重间接指向可以代表 4T的数据;

# 由于inode的表容量有限,所以导致每个inode的表示的空间是有上限的,也就导致不同文件系统的单个分区容量也有上限.

superblock超级区块

Superblock是记录整个filesysytem相关信息的地方,没有Superblock,就没有文件系统,它记录的信息主要有:

Block和inode的总量;

未使用与已使用的block/inode数量;

Block与inode的大小(block为1 2 4 K ,inode为128bytes)

文件系统的挂载时间,最近一次写入数据的时间,最近一次检验磁盘的时间等文件系统的相关信息;

一个valid bit数值,若此文件系统已被挂载,则valib bit为0,若未被挂载,则valid bit为1

注意:dumpe2fs可以查看相关信息。superblock超级区块可能在不同的群组上存在,其它的superblock超级区块为备份的超级区块。

文件系统描述说明

这个区段可以描述每个block group的开始与结束的block,以及说明每非区段分别存储与哪一个block号码之间。

Block bitmap(区块对照表)

如果你想要新增文件时总会用到block,但是需要使用哪一个block来记录呢?怎么知道哪些block是空的呢?从block bitmap中我们可以知道哪些block是空的,当删除一些数据,block bitmap表会记录block的标志位未使用,下次有数据存储时,就可以覆盖此处的block。

dumpe2fs /dev/sda1  来看看超级块中的数据信息

(好像只有ext系列的文件系统才可以使用本工具,请不在要xfs文件系统上使用该命令)

[root@love681 ~]# dumpe2fs  /dev/sda1

dumpe2fs 1.41.12 (17-May-2010)

Filesystem volume name:

Last mounted on:          /boot#分区挂载点

Filesystem UUID:          0ae2a047-9dd6-4bb1-a284-818f971865ea

Filesystem magic number:  0xEF53

Filesystem revision #:    1 (dynamic)

Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize

Filesystem flags:         signed_directory_hash

Default mount options:    user_xattr acl

Filesystem state:         clean

Errors behavior:          Continue

Filesystem OS type:       Linux

Inode count:              51200#inode数量

Block count:              204800# block数量

Reserved block count:     10240

Free blocks:              160134#空闲的block数量

Free inodes:              51162#空闲的是inode数量

First block:              1

Block size:               1024#block单元大小为1K

Fragment size:            1024

Reserved GDT blocks:      256

Blocks per group:         8192#一个群组中block的数量

Fragments per group:      8192

Inodes per group:         2048#一个群组中inode的数量

Inode blocks per group:   256

Flex block group size:    16

Filesystem created:       Fri Jul 22 15:51:06 2016

Last mount time:          Mon Jul 25 11:28:22 2016

Last write time:          Mon Jul 25 11:28:22 2016

Mount count:              6

Maximum mount count:      -1

Last checked:             Fri Jul 22 15:51:06 2016

Check interval:           0 ()

Lifetime writes:          43 MB

Reserved blocks uid:      0 (user root)

Reserved blocks gid:      0 (group root)

First inode:              11

Inode size:128#inode单位大小128个字节

Journal inode:            8

Default directory hash:   half_md4

Directory Hash Seed:      9e14b616-ea5a-4fa3-b9ea-5c1ef844f87d

Journal backup:           inode blocks

Journal features:         (none)

Journal size:             4096k

Journal length:           4096

Journal sequence:         0x0000001b

Journal start:            0

Group 0: (Blocks 1-8192) [ITABLE_ZEROED]

Checksum 0x5827, unused inodes 2010

Primary superblock at 1, Group descriptors at 2-2#超级块的位置,群组描述符的位置

Reserved GDT blocks at 3-258  #

Block bitmap at 259 (+258), Inode bitmap at 275 (+274)#区块对应表位置,inode对应表的位置

Inode table at 291-546 (+290)#inode表的位置

3785 free blocks, 2010 free inodes, 6 directories, 2010 unused inodes

Free blocks: 4408-8192

Free inodes: 39-2048

Group 1: (Blocks 8193-16384) [INODE_UNINIT, ITABLE_ZEROED]

Checksum 0xa798, unused inodes 2048

Backup superblock at 8193, Group descriptors at 8194-8194

Reserved GDT blocks at 8195-8450

Block bitmap at 260 (+4294959363), Inode bitmap at 276 (+4294959379)

Inode table at 547-802 (+4294959650)

390 free blocks, 2048 free inodes, 0 directories, 2048 unused inodes

Free blocks: 15995-16384

Free inodes: 2049-4096

目录的存储方式

在ext文件系统中,当新建一个目录,ext系统会分配一个inode与至少一块block给该目录,其中inode记录该目录的相关权限与属性,并记录分配到的那块block号码,而block则是记录在这个目录下的文件名和该文件名占用inode的号码数据,就如下:

Inode number

文件名

654789

1.txt

654790

2.txt

654800

3.txt

普通文件存储的方式:

在ext文件系统中,新建一个普通文件时,ext文件系统会分配一个inode与相对于该文件大小的block数量给该文件。例如:该文件的大小为100Kbytes,假如一个block大小为4kbytes,这inode需要记录25个block与之对应,为什么是25个,由于inode有12个直接指向,合计48kbytes,设置于的使用一个间接指向block,由该block存储剩余的文件。

目录树的读取

以上我们大概可以了解到,inode表中并不记录文件名与数据的对应关系,inode表记录文件的基本属性和block指向,指向的block中记录文件名和inode的对应关系。

由于目录树是又根目录开始的,因此新系统透过挂载的信息可以找到挂载点的inode号码(通常一个filesysytem的最顶层是inode号码由2号开始的,其实不知道是从2号开始的),因此只要读取到根的inode内容,就可以读取到该inode对应的block的数据,可以找到该目录下文件会目录对应inode的对相应关系。

举例说明:

如果我们想要读取/etc/passed这个文件的内容,系统是如何读取的呢?

[root@wCentos7 ~]# ll -di /etc/  /etc/passwd /

128 dr-xr-xr-x.  18 root root 4096 Jul 21 11:34 /

134313217 drwxr-xr-x. 129 root root 8192 Jul 30 12:53 /etc/

136822215 -rw-r--r--.   1 root root 2525 Jul 30 10:44 /etc/passwd

如上图,在我的实验的电脑上 /的indoe号是128,etc目录的inode号是13431327,文件passed inode号是136822215,我们来看看数据的读取过程:

1.通过挂载点获得 /的inode号为128,(其实到底是通过说明方法获取到/的inode现在确实不了解),读取128 inode的数据内容,读取到对于执行程序的用户root权限时 (r-x),就可以去读取inode对应的block的信息;

2./ 的block记录的是该目录下所有的文件名称与之inode的对应关系,在block中找到etc/与之对应的inode号13431327,则再去找13431327  inode号码;

3.Etc/的inode号找到并且读取数据内容 读取权限为(rwx),即可读取到block指向数据,程序执行者再去读取block的数据内容;读取到passwd对应的inode号码为136822215,进而 去查找136822215 inode表;

4.passwd的inode号136822215,读取inode表中的数据,由于是管理员,有足够的权限可以继续访问,进而读取到block的指向,我们读取block的数据内容,即可读取出passwd的内容。

以上只是一个大概的过程,虽然不是很精确,但还是有助于我们理解ext的文件系统,又上述的理论只是我们可以做做一下总结:

1.ext文件系统为什么当个分区有分区大小限制,是由于本身的inode表大小有限,存储的block指向是有数量上限的;

2.ext文件系统中,删除数据,其实只是在inode表中清除block指向指针,在相应的block bitmap中标记该block为未使用状态,等到下次有数据需要存储的时候,把数据填充至编辑为未使用的block地方;

3.一个Ext文件系统中inode号是唯一的,

4.Ext文件系统查找实际查找数据是以inode号为准,inode表中不记录文件名,但是会记录block的指向,block中记录实际的数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/385808.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java高级工程师必备知识!java入门书籍pdf

美团技术一面20分钟 晚7点,因为想到下周一才面试,我刚准备出去打个羽毛球,北京的电话就来了。面试官各种抱歉,说开会拖延了。 1、自我介绍 说了很多遍了,很流畅捡重点介绍完。 2、问我数据结构算法好不好 挺好的&…

linux eclipse设置颜色,Linux Eclipse美化:解决工具栏过大和 Javadoc背景色修改

Eclipse 在Ubuntu 下总是感觉上面的工具栏感觉特别的大,控件之间的空隙非常的大,和在Windows 下的感觉非常的不一样(毕竟是刚刚从windows叛逃出来),其实也不光光是Eclipse 是这样,其他也软件也同样有这个问题。尝试过通过更换主题…

Java高级工程师面试实战,mysqlsettimeout

我听到的一些发声 你们赚的钱已经可以了: 我一个发小是做土木工程的,上海大学博士,参与很多著名建筑的工程,但是从薪资上看,还不如一些稍微像样的公司的6年多的高级开发。为什么?这就是行业的红利&#xf…

Java高级开发面试,java字符串拼接的方法

一面:70分钟 突击电话面试 正思考着项目功能模块,阿里面试官打来了电话,开始了阿里一面。 阿里面试官自我介绍,介绍了5分钟左右,部门的情况,主要的业务 提问开始 会哪些操作系统 Linux会一点说一下操作指…

Java高级开发面试,java泛型下界通配符

微服务是什么 微服务起源于2005年Peter Rodgers博士在云端运算博览会提出的微Web服务(Micro-Web-Service),根本思想类似于Unix的管道设计理念。2014年,由Martin Fowler 与 James Lewis共同提出了微服务的概念,定义了微服务架构风格是一种通过…

Java高级进阶学习资料!java开发环境的搭建是什么意思

1. static 和 final 的用法 static 的作用从三个方面来谈,分别是静态变量、静态方法、静态类。 静态变量:声明为 static 的静态变量实质上就是全局变量,当声明一个对象时,并不产生static 变量的拷贝,而是该类所有实例…

Java高级面试题!java小游戏制作视频

首先我们先来看看这份Spring源码分析笔记 Spring源码分类的一览无余,详细清晰明了!让你分分钟把握! Spring源码分析笔记手册内容,共七个部分 第一部分Spring概述 Spring 简介Spring 发展历程Spring 的优势Spring 的核⼼结构Sprin…

c语言 字符转int型,C语言—类型之间的转换

原标题:C语言—类型之间的转换当混合不同类型的数据进行计算时,便会发生类型转换。当不同类型的数据进行计算时,应首先将操作数转换成相同的数据类型,然后再进行计算。类型转换有两种形式,即隐式类型转换和显示类型转换…

Java高级面试题!java构造方法的作用和特点

1. Redis面试专题 绝大部分写业务的程序员,在实际开发中使用 Redis 的时候,只会 Set Value 和 Get Value 两个操作,对 Redis 整体缺乏一个认知。这里以面试题的形式对 Redis 常见问题做一个总结,解决大家的知识盲点。 什么是Red…

c语言程序改频率,求问。这个fft c语言程序 采样的声音频率为多少?

timernum,timernum2,LEDnum3,Ltime;//用于分离/*加入数组用于显示相应led灯数目*/uchar lednum[]{0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};//0-7的显示数组 P2组控制int xdata FftReal[SAMPLE_NUM];int xdata FftImage[SAMPLE_NUM];sbit p30P3^0;sbit p31P3^1;sbit p3…

Java高级面试题!java编程思想怎么学

专题5:Java序列化 1、什么是java序列化,如何实现java序列化? 2、保存(持久化)对象及其状态到内存或者磁盘 3、序列化对象以字节数组保持-静态成员不保存 4、序列化用户远程对象传输 5、Serializable 实现序列化 6、writeObject 和 readO…

Java高级:mysqllimit两个参数

零基础如何学习Java? 首先,你要明白一点,Java入门不难! 无论你是从事哪个行业,兴趣一定是最好的老师,也是你学习的动力。 学习方式1:自学 自学模式其实我个人不建议绝大部分的人选择&#x…

db2 c语言游标名称可以是变量,mysql c语言 游标能取多行吗

满意答案xuyingcxm2015.02.03采纳率:45% 等级:12已帮助:7182人1、 无返回结果语句,如:INSERT,UPDATE,DROP, DELETE等2、 select语句返回单行变量并可传给本地变量(select ..into)3、 返回多行结果集的select语句,并…

从入门到精通!javaidea安装教程

一、秒杀系统架构设计都有哪些关键点? 二、设计秒杀系统时应该注意的5个架构原则 架构原则:“4要1不要” 1.1.数据要尽里少 1.2. 请求数要尽里少 1.3.路径要尽里短 1.4.依赖要尽里少 1.5. 不要有单点2不同场景下的不同架构案例 三、如何才能做好动静分离&#xff1…

从入门到精通!java可视化编程软件哪个好

1、我往Redis里写的数据怎么没了? 使用Redis的同学你要明白一点,你为什么用Redis?用redis的作用是什么?用redis的好处是什么?凡事多思考一下为什么,多想想背后的原因。 就在不久前有朋友跟我说过&#xf…

从思维图到基础再到深入,java空间查询

蚂蚁金服一面: 先自我介绍,讲讲自己基础掌握情况,以及项目经历平时会用到哪些数据结构?链表和数组的优缺点?解决hash冲突的方法有哪些?讲讲自己对HashMap的理解,以及和Weakhashmap的区别&#…

从零开始学Java编程!java集合类详解和使用

目录 一、冒泡排序 二、选择排序 三、插入排序 四、快速排序 五、归并排序 六、希尔排序 七、堆排序 八、基数排序(桶排序) 九、递归 十、链表 十一、栈 十二、队列 十三、二叉树 最后 由于篇幅有限,这里就不一一罗列了,20道常见…

从青铜到王者的路线,java不同系统间数据同步

深耕技术,啃下22个技术点 互联网行业更新换代非常快,行业常态便是不断学习,因此这些主流技术你一个都不能落下! ①并发编程 Java并发编程是整个Java开发体系中最难以理解,但也是最重要的知识点之一,因此学习…

c语言 大雨 班上多个同学准备,2015年计算机二级考试《C语言》提高练习题(7)

1[单选题] 若有C语言表达式23*47/3,以下选项中叙述正确的执行顺序是A.先执行3*4得12,再执行212得14,再执行7/3得2,最后执行142得16B.先执行3*4得12,再执行7/3得2.5,最后执行2122.5得16.5C.先执行7/3得2&…

从青铜到王者的路线,java枚举类使用场景

一、先来解读:23种设计模式要点 1.单例模式(Singleton Pattern) 2.工厂模式 3.抽象工厂模式(Abstract Factory Pattern) 4.模板方法模式(Template Method Pattern) 5.建造者模式(Bu…