Linux 文件区块连续吗,关于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号

b86b635362084e1cb042fc276a8a0dfb.png

Inode  table (inode表格)

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

数据内容:

该文件的权限(rwx);

该文件的拥有者与群组;

该文件的容量;

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

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

最近修改的时间(mtime);

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

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

0008c0b6b952453f069d75ce5ae5a325.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文件名

6547891.txt

6547902.txt

6548003.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/393026.shtml

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

相关文章

服务器性能和活动监视

监视数据库的目的是评估服务器的性能。 有效监视包括定期拍摄当前性能的快照来隔离导致问题的进程,以及连续收集数据来跟踪性能趋势。 Microsoft SQL Server 和 Microsoft 操作系统提供实用工具,使您可以查看数据库的当前状态并跟踪性能的状态变化。 下一…

Microsoft Desktop Virtualization

基本上有两套啦,一是大家较为熟悉的MED-V。另外就是VDI(虚拟桌面基础架构),也就是以下的组合:1、Windows Server 2008 with Hyper-V 2、System Center Virtual Machine Manager (VMM) 2008 VMM 20083、Windows Vista Enterprise Centralized …

leetcode60. 第k个排列(回溯算法)

给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。 按大小顺序列出所有排列情况,并一一标记,当 n 3 时, 所有排列如下: “123” “132” “213” “231” “312” “321” 给定 n 和 k,返回第 k 个排列。 说明&…

webpack设置应用缓存_如何使用Webpack在Rails应用程序中设置TinyMCE

webpack设置应用缓存by Joanna Gaudyn乔安娜高登(Joanna Gaudyn) 如何使用Webpack在Rails应用程序中设置TinyMCE (How to setup TinyMCE in your Rails app using Webpack) The popularity of using Webpack to deal with your assets in Rails is steadily increasing. Getti…

springmvc ajax 页面无法重定向问题!!!!

诶诶诶。这个问题困扰了我一天,百度了很多都不行。 刚实战ssm框架,做登录跳转的时候,我是用ajax提交数据到后台,然后后天返回数据进前台,前台再给用户一些比较友好的提示,比如用户名或密码错误之类的。 所以…

linux svn log 乱码,解决p42svn中文log乱码的问题

现象:将perforce代码库迁移至SVN时log乱码。p42svn.pl在windows下运行至"-|"时会报错,于是安装了linux虚拟机,从虚拟linux中运行p42svn.pl生成dump文件,再传至windows下用svnadmin load。可是在svn查看log时&#xff0…

Django开发中常用的命令总结

1. 创建一个Django Project#使用下面的命令可以创建一个projectdjango-admin.py startproject mysite #创建好之后可以看到如下的pro... 1. 创建一个Django Project 1 2 3 4 5 6 7 8 9 10 11 #使用下面的命令可以创建一个project django-admin.py startproject mysite #创…

xml解析-jaxp添加结点

jaxp添加结点 eg: //在第一个下面添加nv / 1.创建解析器工厂 * 2.根据解析器工厂创建解析器 * 3.解析xml返回document * * 4.得到第一个p1 * -得到所有p1使用item方法得到第一个p1 * * 5.创建sex标签 createElement * 6.创建文本 createTextNode * 7.把文本添加到se…

leetcode107. 二叉树的层次遍历 II

给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如: 给定二叉树 [3,9,20,null,null,15,7],3/ \9 20/ \15 7 返回其自底向上的层次遍历为&#xff1a…

javascript 图表_JavaScript 2018年的三个有争议的图表

javascript 图表by Sacha Greif由Sacha Greif JavaScript 2018年的三个有争议的图表 (Three Controversial Charts From the State of JavaScript 2018) 您认为统计数据和图表很无聊吗? 再想一想… (You thought stats and graphs were boring? Think again…) “…

签入在服务器上之后,别人获取了,在解决方案资源管理器中找不到。

签入在服务器上之后,别人获取了,在解决方案资源管理器中找不到。 这个问题具体原因我也不太清楚,但是我找到了一个解决方案。直接在解决方案上右键,添加,添加现有项。把在解决方案资源管理器上看不见的选中&#xff0c…

03JavaScript程序设计修炼之道-2019-06-20_20-31-49

## DomDocument object model 文档对象模型Dom树html|head body| |meta title div|ul|li li li在js世界中,把dom树的每个元素都看成一个对象,对象就有属性和方法dom学什么 dom节点操作 查找元素 元素增删改查 样式操作 事件绑定等## 事件三要素 1 事件源…

linux 独占 cpu,宋宝华:谈一谈Linux让实时 高性能任务独占CPU的事

本文主要讨论在高实时要求、高效能计算、DPDK等领域,Linux如何让某一个线程排他性独占CPU;独占CPU涉及的线程、中断隔离原理;以及如何在排他性独占的状况下,甚至让系统的timer tick也不打断独占任务,从而实现最低的延迟…

leetcode347. 前 K 个高频元素(排序)

给定一个非空的整数数组&#xff0c;返回其中出现频率前 k 高的元素。 示例 1: 输入: nums [1,1,1,2,2,3], k 2 输出: [1,2] 示例 2: 输入: nums [1], k 1 输出: [1] 代码 class Solution {public int[] topKFrequent(int[] nums, int k) {Map<Integer,Integer>…

如何在React中从其父组件更改子组件的状态

by Johny Thomas约翰尼托马斯(Johny Thomas) 如何在React中从其父组件更改子组件的状态 (How to change the state of a child component from its parent in React) We will be building a simple React app which shows the real name of a superhero on a button click.我们…

vue-property-decorator 提供 OO 的风格 Vue Component 方便类型声明

Prop 父子组件之间传值 Install: npm install --save vue-property-decoratorChild: <template><div>{{fullMessage}}</div> </template><script lang"ts">import Vue from vue import {Component, Prop} from vue-property-decorato…

python学习笔记(1)

变量的命名 变量名只能包含字母、数字、下划线&#xff0c;不能以数字打头不要用Python关键字、函数名、保留用于特殊用途的单词作变量名变量名应短且有描述性慎用小写l和大写O字符串 就是一系列字符 在Python中&#xff0c;用引号扩起的都是字符串&#xff0c;引号可以是单引号…

使用这些HTTP标头保护您的Web应用程序

by Alex Nadalin通过亚历克斯纳达林 使用这些HTTP标头保护您的Web应用程序 (Secure your web application with these HTTP headers) This is part 3 of a series on web security: part 2 was “Web Security: an introduction to HTTP”这是有关Web安全的系列文章的第3部分&…

leetcode547. 朋友圈(并查集)

班上有 N 名学生。其中有些人是朋友&#xff0c;有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友&#xff0c;B 是 C 的朋友&#xff0c;那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈&#xff0c;是指所有朋友的集合。 给定一个 N * N 的矩阵 M&#xff0c;表…

linux ssh Unused,安装openssh-portable时遇到的问题及解决办法

问题1&#xff1a;configure: error: Your OpenSSL headers do not match yourlibrary. Check config.log for details.If you are sure your installation is consistent, you can disable the checkby running “./configure –without-openssl-header-check”.Also see cont…