04_Linux磁盘和文件系统
文件系统简介
如果有自己组装电脑的经历的话应该知道,磁盘不是插在电脑上就能直接用的,还需要分区和格式化这些操作。这是因为每种操作系统,对于支持的文件系统格式都不相同,格式化就是为了能让磁盘变成这种操作系统可以使用的类型。
早期的windows系统使用FAT作为默认磁盘格式,从win7开始NTFS就是默认的主要磁盘格式了。相信接触电脑比较早的朋友,应该有记得那时候C盘的格式是和其他盘不一样的,不过现在还好已经统一了。
Linux也是一样,他的传统文件系统叫做Linux second Extended file system,也就是ext2。现在最新版本是ext4。
文件系统是如何运作的呢?Linux是将文件权限和数据分别放在不同的区块:
- 超级区块:记录文件系统的整体信息,包括inode和数据区块的总量、使用量、剩余量以及文件系统的格式和信息
- inode:记录文件属性、权限信息以及数据所在的区块号码
- 数据区块:记录文件实际内容
显然,我们知道一个文件的inode信息,就能读到他的实际数据。这种文件系统叫做**索引式文件系统。**既然有索引的文件系统,那么也有无索引的文件系统。比如u盘常用的FAT格式就是无索引的。这也是为什么我们插u盘之后要过一会儿才能读到所有信息,因为它是无索引的,因此需要读完一个区块,才知道下一个区块是什么。
顺便,常说的碎片整理就是因为文件写入的区块过于零散,此时读取效率就会变得很差。通过碎片整理,将同一个文件的区块集合在一起,数据读取就会变得容易一点。
Linux是索引式,所以不太需要碎片整理。
Linux的inode
inode中,记录了文件的权限和属性,数据区块则是记录数据实际内容。文件系统一开始就规划好了inode与数据区块的对应关系,除非重新格式化,这个对应关系是不变的。
当硬盘太大的话,一个inode管理所有的数据区块显然是不合理的。实际上,系统格式化的时候是分多个区块群组(block group)的,每个群组有自己的inode和数据区块。有点像一个大公司,ceo管理多个事业部,每个事业部有自己的VP和其他员工。ceo就是总的inode,只要管理各个VP就可以了。
总的格式:
Boot Sector | Block Group1 | Block Group1 | Block Group1 |
---|
每个Block Group
Superblock | 文件系统描述 | 区块对应表 | inode对应表 | Inode Table | Data Block |
---|
数据区块
相信以前用虚拟光驱装过软件的朋友可能经历过,为什么有的镜像要分成上下两个呢。这是因为那时候单个文件有大小上限,在FAT16文件系统中,单个文件的最大大小通常限制在2 GB到4 GB之间。Linux也是一样,最小区块有1KB、2KB、4KB
目前的ext4系统,Block大小是4kb 单一文件最大2TB 最大系统总量16TB。
区块有以下特点:
- 每个区块只能放一个文件的数据
- 文件大于区块的话,用多个区块存放
- 文件小于区块,该区块不能放其他文件
由这些特点很容易看出,如果选择4KB的区块,那么如果你的系统存储了很多小于4KB的单个文件,就会造成很多空间的浪费。然鹅实际上,现在硬盘技术发展很快,基本上都是使用4KB的区块,不再考虑这个浪费问题了。
目录树
在linux系统新建一个目录,系统会分配一个inode和至少一块区块。
# 使用ls -li可以看到具体区块
[root@node4 ~]# ls -li
总用量 24