32 块大小_详解Linux文件系统的完整结构--引导块、超级块、GDT等

概述

今天主要介绍一下Linux系统的文件系统,一起来看看吧~


文件系统组成

网上看到的一张完整的文件系统图,如下:

d6ef0cd2b955bdbe73c835475d0be57b.png

首先,该图中有Boot Block、Super Block、GDT、Reserver GDT这几个概念,下面会分别介绍它们。

然后,图中指明了块组中每个部分占用的block数量,除了superblock、bmap、imap能确定占用1个block,其他的部分都不能确定占用几个block。

最后,图中指明了Superblock、GDT和Reserved GDT是同时出现且不一定存在于每一个块组中的,也指明了bmap、imap、inode table和data blocks是每个块组都有的。


1 、引导块

即上图中的Boot Block部分,也称为boot sector。它位于分区上的第一个块,占用1024字节,并非所有分区都有这个boot sector,只有装了操作系统的主分区和装了操作系统的逻辑分区才有。里面存放的也是boot loader,这段boot loader称为VBR(主分区装操作系统时)或EBR(扩展分区装操作系统时),这里的Boot loader和mbr上的boot loader是存在交错关系的。开机启动的时候,首先加载mbr中的bootloader,然后定位到操作系统所在分区的boot serctor上加载此处的boot loader。如果是多系统,加载mbr中的bootloader后会列出操作系统菜单,菜单上的各操作系统指向它们所在分区的boot sector上。

4f0a9d0841092b0d27afc4caa44bdd64.png

但是,这种方式的操作系统菜单早已经弃之不用了,而是使用grub来管理启动菜单。尽管如此,在安装操作系统时,仍然有一步是选择boot loader安装位置的步骤。


2 、超级块(superblock)

既然一个文件系统会分多个块组,那么文件系统怎么知道分了多少个块组呢?每个块组又有多少block多少inode号等等信息呢?还有,文件系统本身的属性信息如各种时间戳、block总数量和空闲数量、inode总数量和空闲数量、当前文件系统是否正常、什么时候需要自检等等,它们又存储在哪里呢?

毫无疑问,这些信息必须要存储在block中。存储这些信息占用1024字节,所以也要一个block,这个block称为超级块(superblock),它的block号可能为0也可能为1。如果block大小为1K,则引导块正好占用一个block,这个block号为0,所以superblock的号为1;如果block大小大于1K,则引导块和超级块同置在一个block中,这个block号为0。总之superblock的起止位置是第二个1024(1024-2047)字节。

使用df命令读取的就是每个文件系统的superblock,所以它的统计速度非常快。相反,用du命令查看一个较大目录的已用空间就非常慢,因为不可避免地要遍历整个目录的所有文件。

6e8fbf45ae0d5ff5dc1c88e965ae44dc.png

superblock对于文件系统而言是至关重要的,超级块丢失或损坏必将导致文件系统的损坏。


3、 块组描述符表(GDT)

既然文件系统划分了块组,那么每个块组的信息和属性元数据又保存在哪里呢?

ext文件系统每一个块组信息使用32字节描述,这32个字节称为块组描述符,所有块组的块组描述符组成块组描述符表GDT(group descriptor table)。

虽然每个块组都需要块组描述符来记录块组的信息和属性元数据,但是不是每个块组中都存放了块组描述符。ext文件系统的存储方式是:将它们组成一个GDT,并将该GDT存放于某些块组中,存放GDT的块组和存放superblock和备份superblock的块相同,也就是说它们是同时出现在某一个块组中的。读取时也总是读取Group0中的块组描述符表信息。

假如block大小为4KB的文件系统划分了143个块组,每个块组描述符32字节,那么GDT就需要143*32=4576字节即两个block来存放。这两个GDT block中记录了所有块组的块组信息,且存放GDT的块组中的GDT都是完全相同的。

下图是一个块组描述符的信息(通过dumpe2fs获取)。

99c208640fdf382a009c7014e8183209.png

4 、保留GDT(Reserved GDT)

保留GDT用于以后扩容文件系统使用,防止扩容后块组太多,使得块组描述符超出当前存储GDT的blocks。保留GDT和GDT总是同时出现,当然也就和superblock同时出现了。

例如前面143个块组使用了2个block来存放GDT,但是此时第二个block还空余很多空间,当扩容到一定程度时2个block已经无法再记录块组描述符了,这时就需要分配一个或多个Reserved GDT的block来存放超出的块组描述符。

由于新增加了GDT block,所以应该让每一个保存GDT的块组都同时增加这一个GDT block,所以将保留GDT和GDT存放在同一个块组中可以直接将保留GDT变换为GDT而无需使用低效的复制手段备份到每个存放GDT的块组。

同理,新增加了GDT需要修改每个块组中superblock中的文件系统属性,所以将superblock和Reserved GDT/GDT放在一起又能提升效率。


后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~

559d99367f9f38d0b8c2250302fb6f5a.gif

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

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

相关文章

pythonista脚本_IPA Installer脚本下载-Pythonista脚本IPA Installer(安装手机ipa文件) - 极光下载站...

pythonista脚本IPA Installer,通过这个脚本,无需电脑,也可有让iOS苹果手机用户端轻松安装ipa文件,非常实用。安装速度快,没有大小限制。 主要特点: 无需上传,本地安装 没有大小限制 安装速度快 …

channelsftp 上传文件为空_SpringBoot文件上传下载篇(九)

点击上方蓝色字体,关注我们上传文件是互联网中应用的场景之一,最典型的情况就是上传头像。文件上传主要是将文件通过IO流传输到服务器的某一个特定的文件夹下。Why->MultipartFile?解析源码:public interface MultipartFile extends InputStreamSour…

excel 科学计数法转换成文本完整显示_表格技巧—Excel里身份证号码显示不全的多种解决办法...

运用Excel表格可以快速统计和汇总数据,那么当在表格当中输入身份证号码时,表格通常显示不完全,这是为什么呢,今天小编就来给大家详细介绍当身份证号码显示不全时的多种解决办法,一起来学习一下吧。首先,我们…

sublime运行python代码_怎么用sublime运行python

首先需要安装一个Sublime Text(http://www.sublimetext.com/)和一个Python(https://www.python.org/downloads/)接下来打开Sublime Text:1、如下图所示,点击菜单栏中的Tools —> Build System —> New Build System(系统默认选择的是Automatic&…

nginx header参数丢失_某Nginx后门分析与重现

安全分析与研究专注于全球恶意软件的分析与研究背景前几天,接到一个nginx后门样本,本着就分析和复现的思路,完整的将整个过程做一次复现,不料最终还获取到了后门的核心代码部分,遂将其整理发布,仅供学习研究…

bch纠错码 码长8_浅析BCH码的编码方法.docx

浅析BCH码的编码方法浅析BCH码的编码方法0 引言数字信号在传输系统中传输时,不免会受到各种因素的干扰,使到达接收端的数字信号中混有噪声,从而引发错误判决。为了抗击传输过程中的干扰,必然要利用纠错码的差错控制技术。BCH码是纠…

virtual box一直正在加载文件_Linux基础导航与文件管理

Linux基础导航与文件管理对于新手,或许很关心如何通过命令行来控制操作系统。这编文章将会尝试带你快速熟悉Linux系统基础,但是不会覆盖所有的Linux系统知识,在未来对Linux探索过程中会有很大的帮助。本篇文章继续学习Linux基础。准备与目标在…

高德地图各种摄像头图标_高德导航中,限速摄像头,违章摄像头,监控摄像头各有什么区别...

展开全部限速摄像头e69da5e6ba903231313335323631343130323136353331333365666163是测速用的,超过限制时速就会抓拍,一般都是两个点中间的距离固定,分别拍照进入分析系统记录,超出时速限制,就会记录违章了。违章摄像头…

go去掉最后一个字符_Go语言去除字符串中的指定字符

Go语言中常用的去除字符串中指定字符的方法如下表所示。 表:字符串处理函数 方法功能描述 func Trim(s string, cutset string) string 将字符串 s 首尾包含在 cutset 中的任一字符去掉返回 func TrimFunc(s string, f func(rune) bool) string 将字符串 s 首尾满足函数 f(r)=…

打开fiddler后打不开网页_如何通过fiddler的导入导出功能,保存一份分类管理的请求报文...

在使用fiddler抓取请求报文时,我们更习惯于直接操作APP或者web系统,然后到fiddler中找我们想要的数据报文。但若这些报文是我们经常要看的 ,我们可以使用另外一种更简单的方式来查看,那就是把我们想要的报文保存到本地&#xff0c…

和vc的正确服用时间_最新研究:口服VC吸收远高于我们的意料

本文采自美国著名科普杂志,Townsendletter,发抗坏血酸口服生物利用中意外的早期反应。本研究提示,口服VC可能达到与静脉VC相同或接近的血液VC水平,而且纯VC比VC钠盐吸收更好。这是前所未料的。-成长博士。 介绍:重复和…

定点运算和浮点运算_C2000浮点运算注意事项——CPU和CLA的差异及误差处理技巧...

C28xFPU架构的C2000微处理器在原有的C28x定点CPU的基础上加入了一些寄存器和指令,来支持IEEE 单精度浮点数的运算。对于在定点微处理器上编写的程序,浮点C2000也完全兼容,不需要对程序做出改动。浮点处理器相对于定点处理器有如下好处&#x…

python模拟登录吃鸡_Python高级爬虫开发,高难度JS解密教程,绝地求生模拟登陆!...

前言这篇文章因为涉及到JS解密部分,所以难度比较高,Python基础比较薄弱的同学可以来看看思路。开始进入到该网站后我们可以看到如下界面,今天要做的内容就是模拟登陆那么咱们首先抓到登陆的包看看:登陆的同时总共发送了两次post请…

imread函数 matlab_地理人,你会用Matlab吗?

​Matlab 读取不同格式数据作为一个地信的小白,本科就学会了一个ArcGIS。虽然Matlab, C, Java, C, C# 等的编程课上了一大堆,但是考完试就完全忘了,妥妥的一个代码小白,当初连如何切换当前目录都不会……读研后,发现Ma…

jquery li ul 伪分页_求教关于Jquery的ul li的分页,该怎么处理

求教关于Jquery的ul li的分页ul 下有若干个li 3个为1个分页 1个input按钮点击显示后3个 另一个显示前3个 求大神这个怎么做分享到:更多------解决方案--------------------html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org…

url过滤怎么解除_腾讯面试官是这样来问布隆过滤器的?

作者:张振伟来源:https://zhangzw.com/20190521.html假设遇到这样一个问题:一个网站有 20 亿 url 存在一个黑名单中,这个黑名单要怎么存?若此时随便输入一个 url,你如何快速判断该 url 是否在这个黑名单中&…

python dataframe遍历_对Python中DataFrame按照行遍历的方法

对Python中DataFrame按照行遍历的方法在做分类模型时候,需要在DataFrame中按照行获取数据以便于进行训练和测试。import pandas as pddict[[1,2,3,4,5,6],[2,3,4,5,6,7],[3,4,5,6,7,8],[4,5,6,7,8,9],[5,6,7,8,9,10]]datapd.DataFrame(dict)print(data)for indexs i…

mysql数值比中文检索快_MySQL 千万 级数据量根据(索引)优化 查询 速度

一、索引的作用索引通俗来讲就相当于书的目录,当我们根据条件查询的时候,没有索引,便需要全表扫描,数据量少还可以,一旦数据量超过百万甚至千万,一条查询sql执行往往需要几十秒甚至更多,5秒以上…

python enumerate函数_Python中enumerate函数用法详解

enumerate函数用于遍历序列中的元素以及它们的下标,多用于在for循环中得到计数,enumerate参数为可遍历的变量,如 字符串,列表等一般情况下对一个列表或数组既要遍历索引又要遍历元素时,会这样写:for i in range (0,len(list)):pri…

mysql5.7.24 安装步骤_MySQL5.7.24解压版安装步骤

网上安装MySQL数据库的教程有.msi格式包安装和.zip格式解压安装,zip安装我个人感觉安装方式纯净又能学习更多知识,因此我更倾向于zip安装。一、下载并解压前往MySQL官网下载5.7.24版本https://dev.mysql.com/downloads/下拉移动看见select Version 选择m…