热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

文件系统_文件系统

篇首语:本文由编程笔记#小编为大家整理,主要介绍了文件系统相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了文件系统相关的知识,希望对你有一定的参考价值。


技术图片

 

 

为什么分区后还要进行格式化呢

所谓的分区就是指定分区的起始柱面和结尾柱面,将将分区的信息记录到磁盘的第个扇区当中,也就是说分区只是指定了某个分区在磁盘上可以使用哪些区域而已。系统想要将数据存放在分区当中,需要按照一定的格式,因为只有按照一定的格式存放,我们在读取的时候才方便,这就像书架一样,我们按照书架上的格子对书进行拿取是比较方便的,如果没有书架,我们把很多书都扔到空箱子里面,这样在拿取的时候很不方便,所以最好按照一定的方式进行拿取。

 至于格式化成什么文件系统,这取决于系统,系统支持什么的文件系统我们就格式化成什么样文件系统。至于买什么样的书架,这取决于我们自己,我们喜欢什么样的就格式化成什么样的。

过去的时候一个分区也就对应一个文件系统,但是现在就不一样了,比如LVM(逻辑卷管理器),可以实现将多个分区整合成一个分区(卷组),在这一个分区上再划分子分区(逻辑卷),然后每一个子分区(逻辑卷)对应一个文件系统,这样就实现了一个分区对应多个不同的文件系统。

文件系统由三部分构成



  1. 超级块:记录文件系统的整体信息,包括inote/block的总量、使用量、剩余量等。

  2. Inode区域:inote区域就由inode块组成的区域,每个文件都会占用一个inode块,inote块当中记录了此文件的元数据和blcok号码。

  3. Block区域:block区域就由block块组成的区域block块里面存放的就是文件真实的数据了,这没什么好说的。

硬链接:

其实在学到这里面的时候我是有一个疑问的,就是为什么一个文件只会占用一个inode块?一个小文件元数据和block块记录只占用一个inode块我是可以理解的,但是一个1G的文件它要引用的block块那就多了,一个inode肯定是存不下呀!难道不会占用更多的inode块吗?后来我专门查了《鸟哥的私房菜》之后才知道,如果一个文件要引用的block号码实在太多了,一个inode存放不下,也不会再浪费一个inode块,而是专门拿出一个block块来存放block号码,这是第一级引用,如果需要的话,可以有二级和三级引用,所谓的二级引用就是第一级的block也存放不下block号码了,第一级block本身可以再引用一级,这就是第二级,第三级以此类推。

我们上面所述的是ext2文件系统,ext2文件系统是这样进行数据存放的,但并不所有的文件系统在存放文件的时候都是这样,比如FAT文件系统,FAT文件系统是windows上的一种文件系统,我们新买的U盘一般就是样的文件系统,这种文件系统在在存放大量的block号码的时候并不像ext2文件系统那样借用多级引用,而是不断的跳转?什么意思呢?FAT文件系统并没有inode块区域,FAT文件系统里面全都是block块区域,也就是说FAT文件系统并不能够像ext2文件系统那样通过读取inode块得知这个文件占用了多少block块,FAT文件系统上的一个文件只会连接一个block块,而每个block块都会空余出一点空间,指向下一个block块,至少会连接多少了块取决于文件的大小,当我们查看这个文件的时候就像是不断的跳转那样来读取每一个block块当中的内容,如果说,每一块他们距离的比较远,以至于跨越了多个柱面,那么在不断跳转的同时,磁头也会多次移动,可想而知这样会大大耽误数据读写的效率,所以又有了磁盘碎片整理这么一项技术。磁盘碎片整理就是将同一个文件所占用的block块尽量放到相邻的地方,比如相邻的扇区和磁道,以其通过这样的手段加快数据读取的速度。磁盘碎片整理对于FAT文件系统有很大的作用,但是对于ext系列的文件系统是没有太大意义的。

有了上面的见解,我们再去理解硬链接就简单多了。一个文件只有一个inode号码,在操作系统当中可以创建多个指向这个inode号码的链接,这就是硬链接,也就是说文件自己其实也是一个硬链接,这就是为什么我们新创建的文件,明明没有给它创建硬链接,他的硬链接数已经是1了的原因。同时,我们也应该了解,只要不把所有的硬链接全部删除干净,我们总能够通过某一个硬链接找到inode块,进而找到文件内容,所以硬链接是可以做一为一种备份的手段。

块组:

如果我们的一个文件系统很大,高达几百个G,现在这很常见呀,我现在一个windows桌面系统的D盘就有1T大小,如果这个文件系统(D盘)的block区域和inode区域都放置在一起的话,block块的号码就会被排非常大,而且在inode块引用block块的时候因为block的号码太大了也会占用太多的空间,所以实际上真实的文件系统并不是这样的,而是进一步划分了区域,真实的文件系统在创建的时候首先创建的是块组,也就是将文件系统分成一个又一个的区域,然后在区域里面再划分出block块区域、inode块区域、超级块区域这三个区域,这样一来,每一个块组内block块号码不会变得非常大,做引用的时候也不会占用太多的空间。

面试题

在ext2文件系统当中,block块要划分多大有三个标准:1KB、2KB、4KB,而且一个数据一旦被占用即使有剩余也没能被其它的文件占用了,也就是说假装你的文件系统有1G,但实际存放的数据绝不会大于或等于1G,只会小于,因为你不可能正好把每一个block块都占满呀!除非重新格式化,否则block块的大小是固定的。

 

假设你的ext2文件系统使用的是4KB的block,而文件当中有10000个小文件,每个文件是500B,请问磁盘浪费多少容量?

 

其实这个问题,只要先算一算一个文件浪费多少空间,然后乘以10000不就好了吗?我们先来算算一个文件浪费多少空间?

4KB=4096B

也就说一个文件会浪费4046B,10000个文件浪费40460000B=39511KB,39511KB=3.85MB。

 


推荐阅读
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • windows便签快捷键_用了windows十几年,没想到竟然这么好用!隐藏的功能你知道吗?
    本文介绍了使用windows操作系统时的一些隐藏功能,包括便签快捷键、截图功能等。同时探讨了windows和macOS操作系统之间的优劣比较,以及人们对于这两个系统的不同看法。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
author-avatar
玉米的跟屁虫
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有