文件系统概述
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.文件系统的选择
1>.什么是文件系统
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。 从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等。 Linux操作系统查看其支持的文件系统的目录(/lib/modules/`uname -r`/kernel/fs)如下图所示。
2>.文件系统类型
Linux文件系统: ext2(Extended file system): Remy Card发布于1993年,适用于那些分区容量不是太大,更新也不频繁的情况,例如/boot分区 ext3: Stephen Tweedie发布于1999年,是ext2的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常中恢复。它通常被用作通用的文件系统. ext4: various发布于2006年,是ext文件系统的最新版。提供了很多新的特性,包括纳秒级时间戳、创建和使用巨型文件(16TB)、最大1EB的文件系统,以及速度的提升。目前CentOS 6.x在默认使用该文件系统。 xfs: SGI发布于1994年,SGI,支持最大8EB的文件系统。目前CentOS 7.x在默认使用该文件系统。 btrfs(Oracle): Oracle Corporation发布于2007年,虽然RedHat公司在CentOS 7.x测试阶段使用过该文件系统,但官方宣称在后期的发布版本将不再对该文件系统进行支持。 ReiserFS:
Namesys发布于20001年,号称是世界上最快的文件系统。可惜该发布者的开发人员据说是杀妻(真搞不懂这些天才脑子里想的都是啥!!!),目前还在美国的监狱呆着呢。
光盘: iso9660:
Ecma International, ISO发布于1988年。 Windows: FAT32:
Microsoft公司发布于1996年,以前的软盘,U盘使用该文件系统。 exFAT:
Microsoft公司发布于2006年 NTFS:
Microsofth(Gary Kimura,Tom Miller)公司发布于1993年。 Unix: FFS(fast):
Kirk McKusick发布于1983年。
UFS1(unix):
Kirk McKusick发布于1994年。
UFS2:
Kirk McKusick发布于2002年。
JFS:
IBM公司发布于1999年。
网络文件系统: NFS CIFS 集群文件系统: GFS2:
Red Hat公司于2006年发布。 OCFS2(oracle)
Oracle Corporation于2005年发布。 分布式文件系统: fastdfs ceph moosefs mogilefs glusterfs Lustre RAW: 未经处理或者未经格式化产生的文件系统,底层存储的数据就是0和1,没有文件名的概念,对于追求高性能的磁盘能力可以考虑使用这种裸盘。比如Oracle RAC服务。 博主推荐阅读: https://en.wikipedia.org/wiki/Comparison_of_file_systems(各类操作系统的比较)
3>.文件系统分类
根据其是否支持"journal"功能: 日志型文件系统: ext3, ext4, xfs, ... 非日志型文件系统: ext2, vfat 文件系统的组成部分: 内核中的模块:ext4, xfs, vfat 用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat Linux的虚拟文件系统: VFS(如下图所示)是内核空间的虚拟的文件系统。用户无需和底层的其它文件系统打交道,开发人员秩序针对虚拟文件系统(VFS)的API进行定制该法,而和底层不同设备设备的不同文件系统打交道则交由虚拟文件系统来处理。 查前支持的文件系统: cat /proc/filesystems
4>.文件系统的选择
5>.超级块和INODE TABLE
如下图所示,可以看到超级快(Super Block)和Inode表关系。 Disk: 磁盘是可以基于MBR或者GPT等主流方案进行分区的,下图是基于MBR进行分区,共有4个分区。 Partition: 分区有一个启动扇区(Boot Sector,占用512字节),该分区的剩余空间均属于文件系统,下图文件系统类型为EXT2。 File System: 文件系统底层是由块组成,而由于块的数量相对较多,因此会被划分成多个块组(Block Group N),可以使用块分区管理工具dumpe2fs(仅适合处理EXT系列的文件系统)进行查看。 Block Group: 每一个块组(Block Group)包括以下几个部分: Super Block: 存放元数据信息的,比如存储该Block Group管理的块范围。可以使用tune2fs工具(比如"tune2fs -l /dev/sdb2")进行查看。需要注意的是tune2fs也仅适合处理EXT系列的文件系统。 GDT: 组的描述表。 Block Bitmap: 块位图用于标识各个块的使用情况。比如使用"1"表示该block被使用,使用"0"表示该block未被使用。 inode Bitmap: 节点位图和块位图功能类似。 inode Table: 节点表包括的信息相对较多,常见的参数如下: Inode number: 存放节点编号。 File Type: 文件类型,Linux有7中文件类型,比如链接文件,目录文件,普通文件,字符设备文件,块设备文件等。 Permissiontion: 文件对应的权限。 Link count: 该inode被链接的次数。 UID: 该inode所属用户的系统ID编号。 GID: 该inode所属组的系统ID编号。 size: 该inode存储的数据大小。 pointer: 指向真正存储数据的指针。 Data Blocks: 用于真正存储数据库的块。
二.EXT文件系统实战篇
博主推荐阅读: https://www.cnblogs.com/yinzhengjie/p/12820088.html
三.