linux文件系统原理,superblock超级,inode
1、文件系统特性:
传统的说法:一个分区就是一个文件系统,一个文件系统就是一个硬盘分区。后来由于LVM技术的出现,一个分区可以格式化成多个文件系统,所以现在称呼:一个可以被挂载的数据,就是一个文件系统,而不是一个磁盘分区。
- 磁盘格式化的时候,就把文件系统的Boot Sector和Block Groups划分固定好了。
- 文件系统组成:
- Block Size:格式化后的data block的大小,ext2支持1k,2k,4k,决定了单一文件不大于2T,和最大文件系统容量不大于16TB。
- Superblock:记录整个文件系统的整体信息,包括inode与数据块的总量,使用量,剩余量,以及文件系统的格式和相关信息,每个block group中都可能包含了superblock,但是除了第1个Primary superblock有用外,其它的superblock作为第1个superblock的备份,称呼为Backup superblock。
- Inode table:格式化后inode的数量和大小就被确定下来,固定大小为128B,新的ext4大小为256B,记录文件读、写、属组、atime,ctime,mtime等,一个文件占用了1个inode,同时记录了该文件所在的区块的号码,一个inode包含了12个直接,1个间接,1个双间接,一个3间接记录区,这些中间区使用的就是data block来记录。
- Data Block:实际记录文件的内容,若文件太大时,会占用多个块。
- Boot Sector:每个文件系统前面都有一个启动扇区,这个启动扇区可以安全启动引导分区,有这个分区,就不用把覆盖整块磁盘的MBR分区,这样才能支持多重引导的环境。
- Block bitmap(块对照表):记录了已经使用和未使用的block的号码。
- Inode bitmap(索引对照表):记录了已经使用和未使用的inode的号码。
- File system Description:描述block group的开始和结束block号码。
- Inode数量计算:(inode table*4k)/256B,4K是Block size的大小,256B是inode size的大小。
- 因为每个文件都会占用1个inode,里面记录了文件区块所占用的区块号码,使用如果我们找到inode的话,就可以找到数据了。
- 索引式文件系统:如ext2,ext3,首先读取索引4号,然后一口气把2、7,、13、15区块号。
- 追加式文件系统:如FAT,先读取索引4号,然后依次读取2->7->13->15,他们没法一口气把这4个数据块读出,只能一个个的依次读出,所以数据不能太离散,离散以后,需要磁盘碎片整理。
- 文件存放原则:
- 区块的大小与数量,在磁盘格式化的时候就不能再修改了。
- 每个区块最多只能存放一个文件的数据。
- 如果文件大于区块的大小,则一个文件就会占用多个区块数据。
- 若文件太小,这该区块的剩余空间就不能再被使用了(浪费空间)。