一、Linux文件系统
每种操作系统能够使用的文件系统并不相同,Linux的正统文件系统为Ext2(Linux second extended file system, ext2fs)。现在通常可以称呼一个可被挂载的数据为一个文件系统。
文件系统的运行机制与操作系统的文件数据有关,文件数据除了文件内容外,还有文件属性。文件系统通常会把这两部分放在不同的区块。
- superblock:记录此filesystem的整体信息,包括inode,block的总量、使用量、剩余量,以及文件系统的格式与相关信息等
- inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码
- block:实际记录文件的内容,若文件太大,会占用多个block(所以一个inode可对应多块block)
注:文件名是放在block中的,此外,如果一个inode对应过多block(inode大小存不下这么多号码),则需要另外用block来记录这些对应block的号码
文件系统一开始就将inode和block规划好了,除非重新格式化,否则不再变动。但若文件系统过大,inode和block数量过多,不易于管理。所以,Ext2文件系统在格式化的时候基本上区分为多个区块组(block group),每个区块组都有独立的inode/block/superblock系统:
- boot sector:开机扇区。可以安装开机管理程序,是一个非常重要的设计,这样就能将不同的开机管理程序安装到个别的文件系统的最前端,而不用覆盖整颗磁盘唯一的MBR(多系统)。
- data block:数据区块。用来放置文件内容数据的地方。
- inode table:inode表。inode除了记录文件的属性外,还有一些特色:(1)文件系统能够创建的文件数量与inode数量有关(2)系统读取文件时需先找到inode,若inode所记录的权限与使用者符合,才能够读取block内容
inode结构示意图:
- superblock:超级区块。记录整个filesystem相关信息。除了block和inode的总量、使用量剩余量外,还记录其大小(block 1, 2, 4K, inode 128, 256Bytes)以及filesystem的挂载事件、最近一次写入数据时间等文件系统相关信息。
第一个block group内含有superblock,后续的不一定有,如果有,则是第一个的副本。 - filesystem description:文件系统描述说明。描述每个block group的开始与结束的block号码,以及说明block group内部每个区段之间的block号码范围(可用dumpe2fs观察)
- block bitmap:区块对照表。记录block区块是否被使用。例如新增时,要找到空的block;删除时将block对用的标志修改为“未使用”
- inode bitmap:inode对照表。与上类似
二、文件系统的简单操作
2.1 磁盘与目录容量
- df
# df [-ahikHTm] [目录或文件名]
- du
2.2 实体链接(硬链接)与符号链接(软链接)
- Hard Link:硬链接。在某个目录下新增一笔文件名到某inode号码的关联记录(可以理解为c++的智能指针)
-i 查看inode相关信息,ln创建链接
发现创建链接后,两个文件名链接到同一个inode,所有相关信息都一样(除了文件名)。链接的优点是安全,类比智能指针,任何一个指针都可以用来修改数据,但只有当最后一个指针离开作用域,内存才被释放。所以,当链接数大于1时,删除的只是文件名,inode和block仍然存在。
使用限制:(1)不能跨filesystem(2)不能link目录 - Symbolic Link:软链接(符号链接)。
符号链接会创建一个独立的文件,存放源文件的文件名。相当于c++的引用(别名)。所以,当源文件删除后,symbolic 的文件则无法打开。
# ln -s 源文件 链接文件
默认为hard link, -s为symbolic link
可以看到,软链接有不同的inode和block(新文件)。
当我们新建一个目录时,其默认链接数为2(当前目录 . 和上层目录 …),
上层目录的链接数+1。
三、磁盘的分区、格式化、检验与挂载