block大小和查看磁盘分区block容量/文件容量是什么关系

2383人阅读
原文链接:
&&&&&&&&& block由一个或多个sector组成,文件系统中最小的操作单位;OS的虚拟文件系统从硬件设备上读取一个block,实际为从硬件设备读取一个或多个sector。对于文件管理来说,每个文件对应的多个block可能是不连续的;block最终要映射到sector上,所以block的大小一般是sector的整数倍。不同的文件系统block可使用不同的大小,操作系统会在内存中开辟内存,存放block到所谓的block buffer中。在Ext2中,物理块的大小是可变化的,这取决于在创建文件系统时的选择,之所以不限制大小,也正体现了Ext2的灵活性和可扩充性。通常,Ext2的物理块占一个或几个连续的扇区,显然,物理块的数目是由磁盘容量等硬件因素决定的。
&&&&&&& 具体文件系统所操作的基本单位是逻辑块,只在需要进行I/O操作时才进行逻辑块到物理块的映射,这显然避免了大量的I/O操作,因而文件系统能够变得高效。逻辑块作为一个抽象的概念,它必然要映射到具体的物理块上去,因此,逻辑块的大小必须是物理块大小的整数倍,一般说来,两者是一样大的。
&&&&&&& 通常,一个文件占用的多个物理块在磁盘上是不连续存储的,因为如果连续存储,则经过频繁的删除、建立、移动文件等操作,最后磁盘上将形成大量的空洞,很快磁盘上将无空间可供使用。因此,必须提供一种方法将一个文件占用的多个逻辑块映射到对应的非连续存储的物理块上去,Ext2等类文件系统是用索引节点解决这个问题的。
&&&&&&& 一组请求的字节到物理块的映射过程示意图。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:13561次
排名:千里之外
原创:11篇
转载:11篇
(2)(4)(8)(8)
(window.slotbydup = window.slotbydup || []).push({
id: '4740887',
container: s,
size: '250,250',
display: 'inlay-fix'Linux(5)
一、基本概念
  ext2文件系统由inode,data block和一个super block组成。这几个数据库的作用分别是:
  super block:记录次文件系统的整体信息,包括inode/data block的总量、使用量、剩余量,以及文件系统的格式与相关信息等;
  inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的data block号码;
  data block:实际记录文件的内容,若文件太大时,会占用多个block,在ext2文件系统中所支持的data&block大小有1KB,2KB,4KB三种。
  文件系统一开始就将inode与data&block规划好了,除非重新格式化(或者利用resize2fs等命令更改文件系统大小),否则inode与data&block固定后就不再变动。
二、单个文件最大容量计算
  在计算容量之前,还必须了解inode的机制。如下:
  1.每个文件仅会占用一个inode
  2.每个inode大小均固定位128bytes,但是大部分空间是用来存储文件属性的,另外inode记录一个data&block需要花掉4byte
  3.ext2文件系统为了让inode记录尽可能多的data&block,定义了四个记录block号码的区域,分别为12个直接记录区,一个间接记录区,一个双间接记录区,一个三间接记录区,所谓间接记录区就是用data&block记录data block号码,
  inode结构如下图所示:&
  假设data&block&为1K,现在开始计算容量:
  (1)12个直接记录区容量:12 * 1K = 12K
    一个直接记录区记录一个data block号码,一个data block 1K
  (2)1个间接记录区容量:256 * 1K = 256K
    间接记录区指向一个data block,由该data block间接记录文件data block号码,由于data block为1K,记录一个data block要4byte,所以一个data block可以保持1024 / 4 = 256 个data block号码
  (3)1个双间接记录区容量:256 * 256 * 1K = 65536K
    总共有256个data block间接记录文件data block号码
  (4)1个三间接记录区容量:256 * 256 * 256 * 1K = K
 将四个记录区容量相加,总容量为K,约等于16G。
 需要说明的是:这个计算方法不能用在4K的block大小的情况下,因为大于2K的block将会受到ext2文件系统本身的限制,ext2文件系统限制单个文件最大容量为2T。
 最大磁盘容量貌似是系统规定的(不确定),尚未找到计算方法。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:6085次
排名:千里之外
原创:10篇
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'查看:12195|回复:19
初级工程师
书上说:在EXT2文件系统中,data block是用来放文件具体内容的地方,既然是放具体内容的地方,那容量就有可能很大,当然也许很小,但书上说:EXT2下,仅支持 1KB,2KB,4KB的block大小,这个是该怎么理解呢?
然后他下面又关联了一个,说是 1KB的block,可以支持16GB的最大单一文件和2T的文件系统总容量。
这里感觉有点绕,该怎么理解呢?不是block就是放具体内容的地方吗?那应该就是block的容量大小可以到达16G或者2T才可以啊,求指教,谢谢!
本帖最后由 l_king_lich 于
09:23 编辑
我也想明白这个bloak是怎么回事,有点不太理解
高级工程师
Linuxの小凡
引用:原帖由 鱼竿的传说 于
11:25 发表
书上说:在EXT2文件系统中,data block是用来放文件具体内容的地方,既然是放具体内容的地方,那容量就有可能很大,当然也许很小,但书上说:EXT2下,仅支持 1KB,2KB,4KB的block大小,这个是该怎么理解呢?
然后他下面又关联了一个,说是&&... 我的思路:
1)兄弟应该先理解好“:EXT2下,仅支持 1KB,2KB,4KB的block大小”这句话,说明了block是一个小单位。
2)我的印象中block应该是作为最小逻辑单位,柱面Cylinder为最小物理单位,是文件系统管理文件的一种方法,包含了indoe、不同的block类型等等。就像军队管理士兵需要用团连排来管理,block可以看成“班”级别单位,但是是逻辑上的而不是真正的物理磁盘的最小单位。
3)所谓最大单一文件限制和最大文件系统容量,其实很好理解, block使用来分割一个大文件的单位,可称为“块”,一个文件是由许多的块和唯一标示这个文件的信息组成,不同大小的单一文件采用不同的级别块来分割是为了让文件系统更好的去管理文件,而最大的文件系统总容量则是文件系统的极限而已。
初级工程师
引用:原帖由 l_king_lich 于
17:59 发表
我的思路:
1)兄弟应该先理解好“:EXT2下,仅支持 1KB,2KB,4KB的block大小”这句话,说明了block是一个小单位。
2)我的印象中block应该是作为最小逻辑单位,柱面Cylinder为最小物理单位,是文件系统管理文件的一种方法,包含了i ... 首先谢谢斑竹的解答,我又重新看了下书,我是这么理解的,不知道正确不:
1& & 目录下面是文件& &,文件下面是数据&不晓得在linux里面这种说法是否正确&,那么在EXT2这种模式下,最小的数据载体就是block,那么这些bolck的大小分为1K,2K,4K。------也就是一个完整文件的数据,就是由很多个block里面的数据累积起来的。
& &&&而书上也说了,一个文件就要占用一个inode,一个inode可以指向多个block---可否就这么理解,一个inode仅能为一个文件服务,那么,就应该有多个block为这个文件服务,也就是一个文件占用多个block。
那么最终他们的关系,不专业的说法就是一个包含关系,也就是block是文件的子集。于是他们之间的大小也就不矛盾了,我是这么理解的,,不知道正确不?&&谢谢!
高级工程师
Linuxの小凡
引用:原帖由 鱼竿的传说 于
19:22 发表
首先谢谢斑竹的解答,我又重新看了下书,我是这么理解的,不知道正确不:
1& & 目录下面是文件& &,文件下面是数据,那么在EXT2这种模式下,最小的数据载体就是block,那么这些bolck的大小分为1K,2K,4K。------也就是一个完整文件的 ... 差不多可以这么理解,一个完整的文件被分成若干个同等大小的block+inode。
初级工程师
引用:原帖由 l_king_lich 于
19:58 发表
差不多可以这么理解,一个完整的文件被分成若干个同等大小的block+inode。 非常谢谢,这个文件系统的问题算是明白了。接下来就是规划那个block的大小问题----那个block的大小的指定,是在格式化的时候系统指定,还是可以手工指定?& &我在自己的虚拟机里面装的&&&&&[红帽企业Linux.5.4].rhel-server-5.4-i386-dvd&,用mkfs命令的时候,系统好像没提示我怎么指定block大小,如果不能手工指定,那我们将怎么去规划自己系统内的block的大小呢?
初级工程师
引用:原帖由 happy常儿 于
17:33 发表
我也想明白这个bloak是怎么回事,有点不太理解 嗯,一起学习,这里有个斑竹帮我们解答问题呢
:) 好的,谢谢
初级工程师
-b block-size
& && && && &&&Specify the size of blocks in bytes.&&Valid block-size values are 1024,&&2048&&and&&4096 bytes&&per&&block.&&If omitted, block-size is heuristically determined by the filesystem size and the expected usage of the filesystem (see the -T&&option).& &If&&block-size&&is negative,&&then mke2fs will use heuristics to determine the appropriate block size, with the constraint that the block size will be at least block-size bytes.& &This&&is&&useful for certain hardware devices which require that the blocksize be a multiple of 2k.
命令: man mkfs.ext2
一如既往的热心帮助,板块老大哥! ...
初级工程师
引用:原帖由 voostar 于
09:55 发表
-b block-size
& && && && &&&Specify the size of blocks in bytes.&&Valid block-size values are 1024,&&2048&&and&&4096 bytes&&per&&block.&&If omitted, block-size is heuristically determined by the files ... 谢谢!
一个inode大小固定为128byte的(inode主要用来记录文件属性和block的号码),且一个文件仅占用一个inode,inode记录一个block号码要占用4byte,想想看,假设block为4KB的400M文件要占用,那得是400*W个block啊,想想看,inode直接记录哪能装下去??,所以就出现了一个间接,一个双间接和一个三间接记录区(我刚学时也迷糊啊~~~)
通常情况下
直接指向为12个 以1KB的block为例,直接指向可以记录12*1KB=12KB(大小还差远了。。。没关系,有双间接、三间接呢)
间接的意思就是把block的1kb大小不用来记录文件内容,而是用来指向block的号码,过程差不多这样吧--inode花去4byte指向一个block(1kb),block内容划分为条记录,就是256*1kb=256kb
双间接的意思是 间接指向的inode也用来记录256个block号码,不是用来记录数据,这样一个间接出来256个记录,每个记录又出现256个记录,那么记录的block号就是256*256了。
三间接自己想去吧。。。呵呵呵
1kb的block容纳最大的文件为12+256+256*256+256*256*256(k)=16G。。啊啊,打完了,厕所去。。。。
好详细!板块要的就是这样的人才!! ...
本帖最后由 二阳 于
13:33 编辑
初级工程师
引用:原帖由 二阳 于
13:28 发表
一个inode大小固定为128byte的(inode主要用来记录文件属性和block的号码),且一个文件仅占用一个inode,inode记录一个block号码要占用4byte,想想看,假设block为4KB的400M文件要占用,那得是400*W个block啊,想想看,inode ... 嗯,谢谢!
鸟哥的确也是这么解释的 ,但就是想不明白啊。。太郁闷了!:Q
高级工程师
Linuxの小凡
引用:原帖由 名门天下 于
17:31 发表
鸟哥的确也是这么解释的 ,但就是想不明白啊。。太郁闷了!:Q 兄弟不要郁闷,坚持学习,一切问题都会被解决,论坛也欢迎你常来交流!!
初级工程师
引用:原帖由 名门天下 于
17:31 发表
鸟哥的确也是这么解释的 ,但就是想不明白啊。。太郁闷了!:Q 我看鸟哥的书,恰好一个工程师看见了,说这是一部linux字典,看似很适合初学者,但更适合老鸟。
于是就给我推荐了一部视频,电驴的 ,资源很好
&&http://www。/topics/2875873/
&为了防止系统给河蟹,www后面那个。你到时候改一下&,
觉得很好,我自己也在看那个,是centos的
初级工程师
鸟哥的资料都是在不断更新的。2年前看的时候是比较适合新手,现在补充了很多知识点。第一遍看的时候先抓住基本的来记....
引用:原帖由 二阳 于
13:28 发表
一个inode大小固定为128byte的(inode主要用来记录文件属性和block的号码),且一个文件仅占用一个inode,inode记录一个block号码要占用4byte,想想看,假设block为4KB的400M文件要占用,那得是400*W个block啊,想想看,inode ... 我就直接上图了。以下解释请参考二阳大哥的解释对照查看
首先菱形为incode,正方形为一个block,一个数据文件,它的incode是菱形,从incode里面我们找到了对应的块的编号为block1-1,每个块的大小为1024k,这里我们将该block1-1简单的视为一个文本文件,储存的都是block的号码,每个号码4k,所以存储了256个。通过block1-1我们可以找到对应的block2-1到block2-256,这256个块。那么,所谓block1-1与block2-1到block2-256即二阳大哥提到的双间接。
同样的道理,我们找到了block2-1对应的block3-1到block3-256,这样的是三间接。
依据网络的说法,最多只能存在三间接,那么通过三间接,我们找到对应的数据文件存储的block区域,对应的块的数目就是256*256*256*1k(每个block的值)=kb=16g。
图有出错,图下方的block3-1实际应该为block3-256,特此更正。
后来对于另外一句“block size=4096,容量最大为 2TB;”这个上面的解释肯定是错误的,所以还希望有人能够指正,感谢。
(25.38 KB)
本帖最后由 ljs198610 于
16:56 编辑
引用:原帖由 二阳 于
13:28 发表
一个inode大小固定为128byte的(inode主要用来记录文件属性和block的号码),且一个文件仅占用一个inode,inode记录一个block号码要占用4byte,想想看,假设block为4KB的400M文件要占用,那得是400*W个block啊,想想看,inode ... 一个Inode为128byte,则可以记录32个block(1024byte),把这些block中拿出来一个全部用来记录下一集block则可以记录256个,这256个1024byte的block再用来全部记录block则可以记录256*256个block。这256*256个block全部用来记录block则可以记录256*256*256个block,最终的就是16GB。那么问题来了,一开始inode直接记录的block中除了拿出来用来记录block的一个block,还剩下31k的的容量哪里去了?12+256+256*256+256*256*256=byte,16GB=byte。所以一个一本正经的胡说八道居然得到了版块管理的赞赏,这管理也是个碉堡。
助理工程师
那关于整个 partition
若 block size=1024,则容量达 2TB,若 block size=4096,则容量达 32TB。是如何理解的呢?
助理工程师
inode中有12个直接块指针,1个间接块指针,1个二级间接块指针,1个三级间接块指针。对文件容量起决定作用的为三级间接块指针。设b为块大小,
则文件最大容量= ((b/4)^3+(b/4)^2+b/4+12)*b,其中的4为指针大小

我要回帖

更多关于 查看磁盘文件夹大小 的文章

 

随机推荐