Linux文件系统
在 Linux 系统下从事运维工作的人员通常都有这样的感受:“Linux 的一切皆文件”,这说明文件管理在 Linux 系统中非常重要。Linux 系统是如何管理文件的呢?本章将介绍 Linux 文件系统的工作原理,以及文件系统是如何管理文件的。
1.文件系统介绍
Linux 文件系统是操作系统用来管理存储设备或分区上文件的方式和数据结构,即在存储设备上组织文件的方法。负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。从系统的角度来看,文件系统负责组织和分配文件存储设备的空间,保护和检索存入的文件。具体而言,文件系统为用户提供建立、存入、读出、修改、转储文件的功能,并控制文件的存取、安全、日志、压缩和加密等操作。在 Windows 系统中也有文件系统,但与 Windows 系统的文件系统不同,Linux 文件系统没有盘符,如 C 盘、D 盘。所有不同分区的数据构成一个唯一的目录树,用户可以根据需要选择是否挂载某个分区。
Linux 文件系统采用树状目录结构,即只有一个根目录,其中包含下级子目录或文件的信息,子目录中又可以包含更多的子目录或者文件信息,这样一层层地延伸下去,构成一棵倒置的树。在目录树中,根节点和中间节点必须是目录,而文件只能作为叶子节点。当然,目录也可以是叶子节点。目录功能说明如表所示:
目录 | 说明 |
/ | 是所有文件的根目录 |
bin | 存放二进制可执行命令 |
home | 用户主目录的基点目录,默认每个用户主目录都设在该目录下 |
lib | 存放标准程序设计库,又叫动态链接共享库目录 |
etc | 存放系统管理和配置文件 |
dev | 存放设备文件,如声卡文件、磁盘文件等 |
usr | 最庞大的目录,存放应用程序和文件目录 |
proc | 虚拟目录,是系统内存的映射,用户可直接访问这个目录获取系统信息 |
root | 系统管理员的主目录 |
var | 存放系统产生的经常变化的文件,如打印机 |
tmp | 存放公用临时文件 |
2.文件系统类型
在 Linux 系统下,不同文件系统采用不同的方法来管理磁盘空间,各有优缺点。在进行分区格式化时,可以采用指定的文件系统类型对分区空间进行登记并建立相应的管理表格。Linux 系统下常用的文件系统类型及说明如表所示:
文件系统类型 | 说明 |
Ext3 | 第三代扩展文件系统,具有高可用性、数据完整性等特点 |
Ext4 | 第四代扩展文件系统,具有支持更多子目录、更多节点等特点 |
XFS | 高性能日志文件系统,特别擅长处理大文件 |
tmpfs | 临时文件系统,是一种基于内存的文件系统 |
devtmpfs | 设备文件系统,将所有文件保存在虚拟内存中 |
swap | 用于交换分区 |
FAT | Windows 98 以前的微软操作系统主要使用的文件系统 |
ISO9660 | 光盘使用的文件系统,在 Linux 中对光盘已有很好支持 |
Btrfs | 新一代文件系统,目标是取代 Ext 系列文件系统 |
JFS | 满足服务器的高吞吐量和可靠性 |
NFS | 网络文件系统,可实现局域网内文件共享 |
Linux 系统支持多种文件系统,不同分区可以使用不同的文件系统。如何在当前系统下查看文件系统的类型呢?这需要用到 df 命令。
命令语法如下:df [选项] [目录或文件]
选项参数值有 6 个,如表所示:
选项 | 说明 |
-a | 显示所有文件系统信息,包括系统特有的 /proc/sysfs 等文件系统 |
-m | 以 MB 为单位显示容量 |
-k | 以 KB 为单位显示容量,默认以 KB 为单位 |
-h | 使用人们习惯的 KB、MB 或 GB 等单位显示容量 |
-T | 显示该分区的文件系统名称 |
-i | 不用硬盘容量显示,而是以含有 inode 的数量来显示 |
查看所有分区文件系统类型:
在命令行模式下输入“df -ah” 命令,注意“-a” 选项会显示很多特殊文件系统,这些文件系统包含的大多是系统数据,存在内存当中,不占用硬盘空间。
3.文件系统的选择
由于 Linux 系统支持多种文件系统类型,各个文件系统在功能和性能方面存在较大差异,因此选择文件系统时需要仔细考虑。本节主要分析三种主流文件系统,分别是 Ext4、XFS 和 Btrfs。
①Ext4
Ext4 是第四代扩展文件系统,是 Linux 应用最广泛的日志文件系统之一。Ext4 稳定版本发布于 2008 年,即 Linux 2.6.28 版本。Ext4 在 Ext3 的基础上增加了许多新特性,如对大文件的支持、优化了日志校验、无日志模式、多块分配、延迟分配、在线去除碎片等。Ext4 支持的最大卷为 1 EiB,最大文件为 16 TiB。
②XFS
XFS 是 64 位高性能日志文件系统,2002 年合并到 Linux 内核,2009 年 Red Hat Enterprise Linux 5.4 开始支持 XFS 文件系统。XFS 支持的最大文件系统大小为 8 EiB,目前 RHEL 7.0 默认使用 XFS。XFS 文件系统结构通过 B+ 树索引 Inode 和数据块,相比 Ext4 更适合大文件,如视频和数据库。XFS 的动态分配 Inode 机制使其可用空间更多,并且支持并行 IO 操作,RAID 上的扩展性更好。
③Btrfs
Btrfs 支持 COW(写时复制),复制文件时不复制数据而只创建引用链接。Btrfs 提供了超大文件支持、高效率的文件存储、内置 RAID 支持、动态 Inode 分配等功能。Btrfs 实现了很多先进特性,同时保持了高容错能力、可扩展性和可靠性。虽然 Btrfs 仍被认为不稳定,但它正在快速增长。
4.文件系统的创建
任何存储介质在建立文件系统后才能正常使用,如硬盘、U 盘等。在 Windows 系统下,我们可以通过格式化 U 盘来建立文件系统,Windows 常用的文件系统格式有 FAT16、FAT32、NTFS。在 Linux 系统下,建立文件系统是通过 mkfs 命令来实现的。
选项 | 说明 |
-V | 详细显示模式 |
-t | 以 MB 为单位显示容量 |
-c | 在制作文件系统前,检查该分区是否有坏轨 |
-I | 将有坏轨的块资料加到坏块文件中 |
在一个新的磁盘分区下创建文件系统:
为磁盘分区 sdb1 建立一个 Ext4 文件系统,通过“-t”参数指定系统格式。