设计师应该知道的网站,东莞搜索优化十年乐云seo,东营网站建设方案范文,电商产品开发员有前景吗概述今天主要介绍一下Linux系统的文件系统#xff0c;一起来看看吧~文件系统组成网上看到的一张完整的文件系统图#xff0c;如下#xff1a;首先#xff0c;该图中有Boot Block、Super Block、GDT、Reserver GDT这几个概念#xff0c;下面会分别介绍它们。然后#xff0…概述今天主要介绍一下Linux系统的文件系统一起来看看吧~文件系统组成网上看到的一张完整的文件系统图如下首先该图中有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上。但是这种方式的操作系统菜单早已经弃之不用了而是使用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命令查看一个较大目录的已用空间就非常慢因为不可避免地要遍历整个目录的所有文件。superblock对于文件系统而言是至关重要的超级块丢失或损坏必将导致文件系统的损坏。3、 块组描述符表(GDT)既然文件系统划分了块组那么每个块组的信息和属性元数据又保存在哪里呢ext文件系统每一个块组信息使用32字节描述这32个字节称为块组描述符所有块组的块组描述符组成块组描述符表GDT(group descriptor table)。虽然每个块组都需要块组描述符来记录块组的信息和属性元数据但是不是每个块组中都存放了块组描述符。ext文件系统的存储方式是将它们组成一个GDT并将该GDT存放于某些块组中存放GDT的块组和存放superblock和备份superblock的块相同也就是说它们是同时出现在某一个块组中的。读取时也总是读取Group0中的块组描述符表信息。假如block大小为4KB的文件系统划分了143个块组每个块组描述符32字节那么GDT就需要143*324576字节即两个block来存放。这两个GDT block中记录了所有块组的块组信息且存放GDT的块组中的GDT都是完全相同的。下图是一个块组描述符的信息(通过dumpe2fs获取)。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方面的内容感兴趣的朋友可以关注一下~