好文分享:EXT文件体系机制道理详解
第14个指针i_block[13]是二级间接寻址指针,它指向一个如故存储了指针的block,可是这个block中的指针还继承指向其他存储指针的block,即i_block[13] --> Pointerblock1 --> PointerBlock2 --> datablock。 第15个指针i_block[14]是三级间接寻址指针,它指向一个任然存储了指针的block,这个指针block下尚有两次指针指向。即i_block[13] --> Pointerblock1 --> PointerBlock2 --> PointerBlock3 --> datablock。 个中因为每个指针巨细为4字节,以是每个指针block能存放的指针数目为BlockSize/4byte。譬喻blocksize为4KB,那么一个Block可以存放4096/4=1024个指针。 如下图。 ![]() 为什么要分间接和直接指针呢?假如一个inode中15个指针满是直接指针,若是每个block的巨细为1KB,那么15个指针只能指向15个block即15KB的巨细,因为每个文件对应一个inode号,以是就限定了每个文件最大为15*1=15KB,这显然是不公道的。 假如存储大于15KB的文件而又不太大的时辰,就占用一级间接指针i_block[12],这时可以存放指针数目为1024/4+12=268,以是能存放268KB的文件。 假如存储大于268K 的文件而又不太大的时辰,就继承占用二级指针i_block[13],这时可以存放指针数目为[1024/4]^2+1024/4+12=65804,以是能存放65804KB=64M阁下的文件。 假如存放的文件大于64M,那么就继承行使三级间接指针i_block[14],存放的指针数目为[1024/4]^3+[1024/4]^2+[1024/4]+12=16843020个指针,以是能存放16843020KB=16GB阁下的文件。 假如blocksize=4KB呢?那么最大能存放的文件巨细为([4096/4]^3+[4096/4]^2+[4096/4]+12)*4/1024/1024/1024=4T阁下。 虽然这样计较出来的不必然就是最大能存放的文件巨细,它还受到另一个前提的限定。这里的计较只是表白一个大文件是怎样寻址和分派的。 着实看到这里的计较数值,就知道ext2和ext3对超大文件的存取服从是低下的,它要查对太多的指针,出格是4KB巨细的blocksize时。而ext4针对这一点就举办了优化,ext4行使extent的打点方法代替ext2和ext3的块映射,大大进步了服从也低落了碎片。 6 单文件体系中文件操纵的道理在Linux上执行删除、复制、重定名、移动等操纵时,它们是怎么举办的呢?尚有会见文件时是怎样找到它的呢?着实只要领略了前文中先容的几个术语以及它们的浸染就很轻易知道文件操纵的道理了。 注:在这一末节所表明的都是在单个文件体系下的举动,在多个文件体系中怎样请看下一个末节:多文件体系关联。 6.1 读取文件当执行"cat /var/log/messages"呼吁在体系内部举办了什么样的步调呢?该呼吁能被乐成执行涉及了cat呼吁的探求、权限判定以及messages文件的探求和权限判定等等伟大的进程。这里只表明和本节内容相干的怎样探求到被cat的/var/log/messages文件。
由于GDT老是和superblock在统一个块组,而superblock老是在分区的第1024-2047个字节,以是很轻易就知道第一个GDT地址的块组以及GDT在这个块组中占用了哪些block。 着实GDT早已经在内存中了,在体系开机的时辰会挂载根文件体系,挂载的时辰就已经将全部的GDT放进内存中。
前文说过,ext文件体系预留了一些inode号,个中"/"的inode号为2,以是可以按照inode号直接定位根目次文件的data block。
通过var目次的inode指针,可以探求到var目次的inode记录,可是指针定位的进程中,还必要知道该inode记录地址的块组以及地址的inode table,以是必要读取GDT,同样,GDT已经缓存到了内存中。
将上述步调中GDT部门的步调简化后较量轻易领略。如下:找到GDT-->找到"/"的inode-->找到/的数据块读取var的inode-->找到var的数据块读取log的inode-->找到log的数据块读取messages的inode-->找到messages的数据块并读取它们。 6.2 删除、重定名和移动文件 留意这里是不超过文件体系的操纵举动。
对付删除平凡文件: (1)找到文件的inode和data block(按照前一个末节中的要领探求); (2)将inode table中该inode记录中的data block指针删除; (3)在imap中将该文件的inode号标志为未行使; (4)在其地址目次的data block中将该文件名地址的记录行删除,删除了记录就丢失了指向inode的指针; (5)将bmap中data block对应的block号标志为未行使。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |