一、 inode、data block与super block
1. inode用于记录文件的属性与权限等信息;一个文件占用一个inode,同时inode还记录了该文件的data block的位置。inode的大小有128、256字节两种规格。
2. data block:用于存储文件的实际内容。块大小为1K、2K、4K字节三种规格。
3. super block: 记录文件系统的整体信息,包括了inode与data block的总量、已使用量、剩余的旦、卷标、文件系统格式等相关的信息。可以使用tune2fs -l Partition_Name来查看。
注意:以ext2文件系统为例,对于128字节的inode,除了存储文件的权限属性等信息外,只能存12个4字节的文件指向的数据块号码。那对于一个大文件来呢,需要几十上百万个数据块来存放文件内容。这个怎么弄?其中inode除了12个直接的数据指向以外,还有一个间接、一个双间接、一个三间接的记录区。所谓间接的意思就是inode的直接指向会指向一个数据block,这个block不存数据,而是存放的文件的数据块的号码。对于1K大小的数据块,可以存储256个指向。而256个数据区块,可以存储的文件大小为256KB;双间接可以存储64MB数据,三间接可以存储16G大小的文件; 对于2K和4K大小以及其他文件系统,算法不相同。但都借用了数据区块来存放数据区块号。
二、 文件是如何存取的
每个文件系统在其内部划分了多个block group,而每个block group内又包括了以下几个内容:
1. super block: inode与数据区块的总量,剩余的数量,inode与数据区块的大小,保留等信息。第一个块组肯定有超级块,后续的块组,有的有,有的没有。
2. 文件系统描述: 描述区块群组的开始与结束的区块,以及说明每个区段(超级区块、对照表、inode对照表、数据区块)分别介于哪一个区块之间,这部分也能用dumpe2fs来查看。
3. block bitmap:用于记录哪些block是空的,哪些是已经使用的。
4. inode bitmap: 用于记录哪些inode是空的,哪些是已经使用的。
5. inode table: 用于存储文件属性以及该文件数据区块号码
6. data block: 用于存储文件的实际内容。
存取文件时,先检查用户对目录是否有写和执行权限;接着系统通过inode bitmap查询哪些inode表是空的,将新文件的属性写入空的inode表;根据block bitmap查找哪些data block是空的,是空的则可以将文件内容写入到这些block中;更新inode bitmap以及block bitmap,并更新超级块的信息。
三、 系统如何通过路径读取文件内容
举例说明,查找/etc/passwd文件
1. 先查找/的inode号码,/的inode里有记录/对应的data block;
2. 在/的data block中找到etc目录对应的inode
3. 读取etc目录对应的inode表中,找到etc目录的数据块
4. 在etc目录的数据块中,找到passwd文件的inode号码
5. 读取passwd文件的inode中数据块指向,并将内容读取出来。
总结: 从根目录开始,先找inode,通过inode找到对应的数据区块;在数据区块中,分两种情况:1. 该文件是目录,则数据区块记录了其下属子目录及文件的文件名以及对应的inode; 2. 该文件是非目录文件,则数据区域记录了文件的内容。 通过inode--->block--->inode--->block依次循环来读取文件。在这个过程中,需要检查用户对目录及文件的权限。
四、 硬链拉与软链接
1. 硬链接是指向同一个inode的多个文件路径; 目录不支持硬链接,不能跨文件系统,创建硬链接会增加inode计数。
2. 软链接指向的是文件实际的访问路径,可以跨文件系统,支持对目录创建软链接,删除软链接不会影响原文件。
五、 MBR
存储设备的第一个扇区,也就是最前面的512字节,叫做入引导记录
1. 主引导记录的结构
主引导记录只有512字节,放不了太多东西,它的主要作用是告诉计算机到硬盘的哪一个位置去找操作系统。
主引导记录由以下3个部分组成:
A. 第1-446字节:调用操作系统的机器码
B. 第447-510字节:分区表 (Partition table)
C. 第511-512字节:主引导记录签名(0X55和0XAA)
2. 分区表
硬盘分区有很多好处,考虑到每个区可以安装不同的操作系统,主引导记录呢须知道 将控制权转交给哪个区。
分区表的长度只有64字节,里面又分成4项,每项16字节。所以一个硬盘 最多只能分4个一级分区,又叫作主分区。每组的记录区主要记录了该区段的起始与结束的柱面号码。
每个主分区的16个字节由以下6部分组成:
A. 第1个字节,如果为0X80,就表示该主分区是激活分区,控制权要转交给这个分区。4个主分区里面只能有一个分区是激活的。
B. 第2-4字节:主分区第一个扇区的物理位置(柱面、磁头、扇区号等)
C. 第5字节:主分区类型
D. 第6-8字节:主分区最后一个扇区的物理位置
E. 第9-12字节:该主分区第一个扇区的逻辑地址
F. 第13-16字节:主分区的扇区总数。
最后的4字节(主分区的扇区总数)决定了这个主分区的长度,也就是说,一个主分区的扇区总数最多不超过2的32次方。
如果每个扇区为512字节,则意味着单个分区最大不超过2TB。再考虑到扇区的逻辑地址也是32位,所以单个硬盘可利用的最大空间也不超过2TB。如果想再使用更大的硬盘,只有两个方法:一是提高每个扇区的字节数,二是增加扇区总数。
六、 文件名存储在哪里,文件的属性存储在哪里
1. 目录也是文件;
2. 文件的文件名存储在目录的数据块中;
3. 文件的属性,权限等信息存储在inode中;
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。