安装Linux的时候可以将 /, /boot, /home 等放在不同的分区,每个分区可以选择需要的文件系统
Ext文件系统的组织
1. boot sector 用于存放引导程序,不同于Windows, Linux的安装可以将引导程序安装在自己选定的分区的boot sector,从而避免了覆盖MBR,不会损坏之前的系统的引导
此处特别注意,如果你的 block size = 1024Bytes, 那么boot sector将占用 1个block,并位于block group 0, superblock将占用1个block,位于block group1;
而如果你的blocksize>1024Bytes,那么你的boot sector与superblock将各占用1024Bytes,并一起放在同一个block里,位于block group 0.(意思是block group0只有1个block,这个block同时包含了boot sector 和 superblcok)
2. 文件系统将block分成多个block group,每个group又包括如下几部分:
1) Super Block: 这个区域记载了block/inode总量,可用量,每个block和inode的大小,日志系统的大小,FS的挂载时间等等数据,只有第1个Group会有这个Superblock,如果其他group也有,都是备份,如果1号group损坏,可以用备份来挽救
2) FS Desc: 记录了SuperBlock,bitmap,data block的起止block段, 可以通过 dumpe2fs 命令来查看super block 和 block group的信息
3) inode bitmap: 记录了所有inode的占用情况,每次写入文件前先要查找这个bitmap,确定使用的空inode
4) block bitmap: 记录了所有data block的占用情况,每次写入文件签先查找这个bitmap,确定使用的空block
5) inode table: 记录了所有文件夹,文件的属性(权限,所有者等)和数据block存储号,查找到文件的inode后就可以获得数据存储的block号,一次性将数据全部读取出来
6) data block: 实际存储数据的地方,ext2中每个block的大小可以为 1K, 2K, 4K
inode与data block的关系
linux的文件系统属于索引文件系统,其中inode table就是文件索引,无论是目录和文件的索引都是存在inode中,每个目录或文件数据至少占用一个data block
对于目录而言,他的inode对应的data block里存储了该目录下所有目录和文件的文件名及其对应的inode
对于文件而言, 他的inode里存储了文件属性,所有者,存储该文件的所有data block号,而data block里存储了实际文件内容,其示意图如下
他的好处就是系统可以一次性知道所有data block的号码,从而磁盘最多需要转一圈便可以把数据全都读出来
而对于U盘的FAT文件系统,其存储如下
这种情况由于每次需要读取完一个block才知道下一个block在哪里,则有可能需要磁盘转很多圈才能读取完数据,所谓“碎片整理”就是因为磁盘的数据存储过于分散,造成读取效率低下,整理既是把同一个文件的数据block都放到一起。
文件读取的步骤
例如读取 /etc/hosts
1. 通过挂载点信息查找 / 的inode, 并找到 / 的block
2. 通过 / 的block 找到/etc的inode,并找到/etc的block
3. 通过 /etc 的block找到hosts文件的inode,最后读取hosts文件的data block
Ext3的日志文件系统
由于系统的异常中断,可能造成某些输入的写入成功,但是bitmap和super block的更新失败,造成数据不一致,操作系统只能在重启的时候进行强制同步,扫表磁盘所有文件来查找异常写入的数据。而这会话费大量的时间,所以引入了日志文件系统,通过一个日志记录块来磁盘的写入记录,当异常发生时,查找这个日志文件就能很快的找到造成数据不一致的文件,从而修复异常。