文章目录
- 硬盘异步写入机制
- 硬盘挂载
- 支持的文件系统类型
- XFS文件系统
- 查看磁盘/目录容量
- 文件硬链接
- 文件软链接
硬盘异步写入机制
我们知道一般要操作一个文件必须先将其加载到内存中,如果文件每次次该都立刻回写到硬盘,那么肯定会频繁等待磁盘的IO,导致效率低下。
为了解决上述问题linux采用异步处理方式,加载到内存中的文件,如果没有被修改过那么该文件的状态就是 干净的,否则就是脏的,读写操作都是在内存中执行,这样效率高,然后不定时将内存中的脏数据回写到硬盘。
这样的好处是,不用频繁等待磁盘io,所以效率变高,但是缺点是内存中的脏数据还未写入到磁盘时,如果发生不正常关机,那么内存中已经修改的数据可能会丢失。
我们可以通过sync 命令来强制将内存的脏数据回写到硬盘,事实上我们在执行关机命令时 该命令会自动调用sync命令。
linux 操作系统会将常用的文件都加载到内存中,所以会看到内存占用很高的情况,这是正常的。
硬盘挂载
将文件系统和操作系统目录树结合的过程我们称为挂载。文件系统只能挂载到目录,挂载的目录就是这个文件系统的入口。
支持的文件系统类型
linux支持很多其他的文件系统
传统文件系统:ext2 minix fat 等
日志文件系统:ext3 ext4 ntfs zfs 等
网络文件系统:NFS SMBFS 等
可以通过如下命令来查看,当前系统支持的 文件系统
通过如下命令开查看已经加载到内存中的文件系统
虚拟文件系统(VFS)
Linux支持那么多的文件系统,那么它是如何同时操作多个文件系统的呢?其实linux系统在操作的时候不用关心具体的文件系统的细节,它直接操作的是经过抽象的虚拟文件系统。虚拟文件系统再根据具体文件系统执行相应的操作,如下:
XFS文件系统
从centos7 开始linux预设的文件系统由原来的ext4 编程了xfs,为什么linux舍弃了支持度最好的ext家族呢?
因为:ext 文件系统需要在格式化的时候预先规划好所有的 inode block 等内容,随着磁盘容量的不断扩充,向着PB EB发展,ext文件系统初始化会非常耗时。 随着虚拟化的发展巨型文件也越来越多,在操作这种巨型文件时需要考虑效率问题,而xfs就是一个适合巨型文件和高容量磁盘的文件系统。
xfs是一个文件日志系统,主要分为三部分,资料区、文件修改日志区、实时运行区
资料区
就像ext2中的 inode/block/super block ,所有的数据都存放在这个区域,有点像ext2 中的 block group ,xfs 该区域也分为多个存储群组,每个群组中都包含:superblock、剩余空间管理、inode分配。需要说明的是 xfs的inode 和 data block 都是在使用时才动态分配。因此xfs初始化特别快。
同时 xfs中的 block 和 inode 都支持多重容量,block 容量支持512bytes-64k,inode 容量支持 256 byte-2M。注意:xfs 支持这么大的容量linux 操作系统未必都支持。
日志区
如前文所述,修改文件内容时先将修改内容写入到日志区,待文件内容修改完毕,再从日志区清除相关记录。xfs 支持外部磁盘来作为日志区。如果用SSD可以提高效率。
实时运行区
当有文件创建时,xfs会总这个区域内找到一定数量的 extent区块,将文件写入到区块内,呆inode 等动态分配完毕后,再讲内容写入到 inode 和 data block 中, 该区域大小 4K-1G,最好不随便改动,默认即可。
xfs文件系统查看命令
如下命令可以查看xfs文件系统的信息
查看磁盘/目录容量
通过上文得知,磁盘的使用情况在 supber block 中保存,每个文件的大小则在文件的inode中保存。
df命令:可以列出文件系统的整体使用情况
du命令:查看文件系统/目录的磁盘使用情况
df 主要是从 super block中读取全局数据所以速度很快
du命令是到文件系统中去搜寻数据,因此速度可能会慢
文件硬链接
由上一篇文章我们直到,文件名保存在目录中,文件内容保存在 文件inode中,如果同一个文件inode 被多个目录保存 这就是硬链接。
举例:文件 etc/a 是文件 /etc/b 的硬链接那么 这两个文件的 inode 是相同的,除了文件名两个文件的所有信息都相同。效果如下:
优点
通过两个文件名 都可以读写该文件,且在一个文件中完成修改后,另一个文件马上就可以看到修改后的内容。删除一个文件后还可以通过另一个文件访问。
缺点
只是在目录的data block中增加记录了文件名和 inode号码,因此这种关联 不能跨文件系统。且因为对目录建立硬链接时处理逻辑复杂,所以不能链接目录,
文件软链接
软连接又称为符号链接,和windows下的快捷方式类似。这种链接方式会建立一个独立的文件(有自己的inode),这个文件的数据读取会指向被连接的文件。示例如下:
我们可以看到两个文件的 inode 不同 是两个文件,而且软链接文件中会保存目标文件的信息。我们可以看到示例中链接文件大小是5,其实就是因为目标文件的名字 a.txt长度是5. 因为链接文件只是保存了目标文件名称,所以如果目标文件被删除那么连接文件也就无法访问文件内容了。
相比之下 似乎 硬链接更安全,但是由于限制太多 软连接用户更广泛。软连接支持目录
硬链接会增加文件的链接数 如下,为a.txt 建立硬链接c.txt 后,a.txt 连接数变为2 ,软连接不会增加这个数量