文件系统
文件系统
用户在硬盘存储设备中执行的文件建立、写入、读取、修改、转存与控制等操作都是依靠文件系统来完成的。
文件系统的作用是合理规划硬盘,以保证用户正常的需求,Linux系统支持数十种的文件系统。
常见文件系统如下:
系统名称 | 作用 |
---|---|
Ext3-日志文件系统 | 能够在系统异常宕机时避免文件系统资料丢失,并能自动修复数据的不一致与错误。然而,当硬盘容量较大时,所需的修复时间也会很长,而且也不能百分之百地保证资料不会丢失。它会把整个磁盘的每个写入动作的细节都预先记录下来,以便在发生异常宕机后能回溯追踪到被中断的部分,然后尝试进行修复。 |
Ext4-改进版本 | 作为 RHEL 6 系统中的默认文件管理系统,它支持的存储容量高达 1EB(1EB=1,073,741,824GB),且能够有无限多的子目录。另外,Ext4 文件系统能够批量分配 block 块,从而极大地提高了读写效率。 |
XFS-日志文件系统 | RHEL 7 中默认的文件管理系统,它的优势在发生意外宕机后尤其明显,即可以快速地恢复可能被破坏的文件,而且强大的日志功能只用花费极低的计算和存储性能。并且它最大可支持的存储容量为 18EB,这几乎满足了所有需求。 |
数据资料
日常在硬盘需要保存的数据实在太多了,因此 Linux 系统中有一个名为 super block 的“硬盘地图”。
Linux 并不是把文件内容直接写入到这个“硬盘地图”里面,而是在里面记录着整个文件系统的信息。因为如果把所有的文件内容都写入到这里面,它的体积将变得非常大,而且文件内容的查询与写入速度也会变得很慢。
Linux 只是把每个文件的权限与属性记录在inode 中,而且每个文件占用一个独立的 inode 表格,该表格的大小默认为 128 字节,里面记录着如下信息:
- 文件的访问权限(read、write、execute);
- 文件所有者与所属组(owner、group);
- 文件的大小(size);
- 文件的创建或内容修改时间(ctime);
- 文件的最后一次访问时间(atime);
- 文件的修改时间(mtime);
- 文件的特殊权限(SUID、SGID、SBIT);
- 文件的真实数据地址(point);
文件的实际内容则保存在 block 块中(大小可以是 1KB、2KB 或 4KB),一个 inode 的默认大小仅为 128B(Ext3),记录一个 block 则消耗 4B。
当文件的 inode 被写满后,Linux 系统会自动分配出一个 block 块,专门用于像 inode 那样记录其他 block 块的信息,这样把各个block 块的内容串到一起,就能够让用户读到完整的文件内容了。
对于存储文件内容的 block块,有下面两种常见情况(以 4KB 的 block 大小为例进行说明):
- 情况一:文件很小(1KB),依然会占用一个block,因此会浪费3KB;
- 情况二:文件很大(5KB),那么会占用两个block(5KB-4KB后剩下的1KB也要占用一个block)。
VFS
计算机系统在发展过程中产生了众多的文件系统,为了使用户在读取或写入文件时不用关心底层的硬盘结构,Linux 内核中的软件层为用户程序提供了一个 VFS(Virtual File System,虚拟文件系统)接口,这样用户实际上在操作文件时就是统一对这个虚拟文件系统进行操作。
VFS示意图:
本文系作者 @小白学安全 原创发布在 xbxaq.com 站点,未经许可,禁止转载!
评论