操作系统处理各种数据。这些数据是硬盘上的二进制。人类当然不能直接理解这些二进制数据。有一个翻译来恢复这些二进制数据作为人类可以理解的文件形式。这项工作由文件系统完成,由于使用场合和使用环境的不同,文件系统的目的是实现数据的查询和存储,Linux 支持不同系统的文件系统有多种。可存储数据的物理设备有硬盘、U 盘、SD 卡、NAND FLASH、NOR FLASH、网络存储设备等。不同的存储设备有不同的物理结构,不同的物理结构需要不同的文件系统来管理,如管理 NAND FLASH 的话使用 YAFFS 管理硬盘的文件系统,SD 卡的话就是 ext 文件系统等。
点击↓
作者收集的Linux资料
Linux 下面的文件系统主要有 ext2、ext3、ext4 等文件系统。Linux 支持其他的 UNIX 例如,文件系统 XFS、JFS、UFS 等,也支持 Windows 的 FAT 网络文件系统 NFS 等。Linux 支持其他的 UNIX 例如,文件系统 XFS、JFS、UFS 等,也支持 Windows 的 FAT 网络文件系统 NFS 等等。主要说 Linux 自带的 ext2、ext3 和 ext4 文件系统。
Linux 有很多文件系统可以由系统支持,除了 Linux 默认文件系统 Ext2、Ext3 和 Ext4 此外,还可以支持 fat16、fat32、NTFS(内核需要重新编译)等 Windows 文件系统。也就是说,Linux 可通过挂载使用 Windows 文件系统中的数据。Linux 能够支持的文件系统 "/usr/src/kemels////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////fs" 目录中的每个子目录都是一个可识别的文件系统(安装时需要选择)。介绍比较常见 Linux 支持的文件系统,如表所示。
文件系统 | 描 述 |
Ext | Linux 最早的文件系统在性能和兼容性方面存在许多缺陷,现在很少用了 |
Ext2 | 是 Ext 升级版本的文件系统,Red Hat Linux 7.2 以前版本的系统默认是 Ext2 文件系统。于 1993 年度发布,支持最大 16TB 分区最大 2TB 的文件(1TB=1024GB=1024x1024KB) |
Ext3 | 是 Ext2 升级版本的文件系统最大的区别是带有日志功能,以提高文件系统在系统突然停止时的可靠性。支持最大 16TB 分区最大 2TB 的文件 |
Ext4 | 是 Ext3 升级版的文件系统。支持最大 16TB 分区最大 2TB 的文件 |
Ext4 | 是 Ext3 升级版的文件系统。Ext4 大大提高了性能、伸缩性和可靠性。Ext4 变化可以说是翻天覆地的,比如向下兼容 Ext3、最大 1EB 文件系统和 16TB 文件、无限量子目录、Extents 连续数据块 概念、多分配、延迟分配、持久预分配、快速 FSCK、日志验证,无日志模式,在线碎片分类,inode 增强,默认启用 barrier 等。它是 CentOS 6.3 默认文件系统 |
xfs | 被业界称为最先进、最可升级的文件系统技术 SGI 目前最新的公司设计 CentOS 7 默认版本使用本文件系统。 |
swap | swap 是 Linux 用于交换分区的文件系统(类似于 Windows 当内存不足时,使用交换分区暂时替代内存。一般大小为内存 2 倍,但不要超过 2GB。它是 Linux 的必需分区 |
NFS | NFS 是网络文件系统(Network File System)缩写是一种网络服务,用于实现不同主机之间的文件共享,本地主机可以通过挂载远程共享资源 |
iso9660 | 光盘标准文件系统。Linux 要使用光盘,必须支持 iso9660 文件系统 |
fat | 就是 Windows 下的 fatl6 文件系统,在 Linux 中识别为 fat |
vfat | 就是 Windows 下的 fat32 文件系统,在 Linux 中识别为 vfat。支持最大 32GB 分区最大 4GB 的文件 |
NTFS | 就是 Windows 下的 NTFS 然而,文件系统 Linux 默认是无法识别的 NTFS 如果需要识别文件系统,则需要重新编译内核以支持它。它比 fat32 文件系统更安全、更快,支持最大 2TB 分区最大 64GB 的文件 |
ufs | Sun 公司操作系统 Solaris 和 SunOS 使用的文件系统 |
proc | Linux 基于内存的虚拟文件系统,用于管理内存储目录 /proc |
sysfs | 和 proc —样,也是基于内存的虚拟文件系统,用于管理内存储目录 /sysfs |
tmpfs
也是基于内存的虚拟文件系统,但也可以使用 swap 交换分区
硬盘是用来存储数据的,可以想象成橱柜,但橱柜是用来存储衣服的。新买的硬盘通常需要分区和格式化。分区就像按要求把一个大柜子分成几个小柜子(组合衣柜);格式化就像把隔断放在每个小柜子里,决定每个隔断的大小和位置,然后在柜门上贴上标签。标签中明确了每件衣服保存的隔断位置和这件衣服的一些特点(比如衣服是谁的,衣服的颜色和大小等。许多初学者认为,硬盘的格式化只消除了硬盘中的数据,但事实并非如此。文件系统也写入了硬盘。由于不同的操作系统以不同的方式管理文件(设置文件的属性和权限不完全相同),为了有效存储当前系统中的文件数据,需要格式化硬盘,使其使用与操作系统相同(或接近)的文件系统格式。
例如,每个操作系统使用不同的文件系统,Windows 98 以前的微软操作系统使用 FAT(FAT16)文件系统,Windows 2000 使用后续版本 NTFS 而文件系统 Linux 正统文件系统是 Ext2。
既然格式化的真正目的是写入文件系统,那么,Linux 什么是文件系统,如何运行?
早期的 Linux 使用 Ext2 文件系统格式,CentOS 5.x 默认使用 Ext三、本教程中使用的 CentOS 6.x 默认使用 Ext4.目前最新的 CentOS 7.x 默认使用 xfs 格式。
由于 xfs 文件系统不是这里的重点,因为它是相关的 xfs 文件系统,这里不做深入介绍,感兴趣的读者可以自己搜索相关信息。Ext4 是 Ext3(Ext2) 升级版的文件系统,在性能、伸缩性和可靠性方面都有了很大的提高,变化可以说是翻天覆地,比如:向下兼容 Ext3;最大 1EB 文件系统和 16TB 文件;无限量子目录;Extents 连续数据块概念;多块分配、延迟分配、持久预分配;快速 FSCK、日志验证,无日志模式,在线碎片分类,inode 增强,默认启用 barrier 等;不同的文件系统,操作模式与操作系统的文件数据有关。拿 Linux 以操作系统中的文件为例,文件数据不仅包含文件中的内容,还包含大量的文件属性,如文件 rwx 文件所有者、所属组、创建时间等权限。
通常,文件系统会单独存储文件的实际内容和属性:保存了文件的属性 inode 中(i 每个节点) inode 都有自己的号码。通常,文件系统会单独存储文件的实际内容和属性:保存了文件的属性 inode 中(i 每个节点) inode 每个文件都有自己的编号。每个文件占用一个 inode。不仅如此,inode 文件数据也记录在中间 block 块的编号;文件的实际内容 block 中间(数据块),类似衣柜的隔断,用来真正保存衣服。每个 block 都有自己的号码。当文件太大时,它可能会占用多个 block 块。另外,还有一个 super block(超级块)用于记录整个文件系统的整体信息,包括 inode 和 block 总量、已使用量和剩余量、文件系统格式及相关信息等。所以我们可以推断,只要我们能找到文件 inode 文件存储数据的位置自然可以知道 block 从而找到文件的实际数据。[root@honey-master ~]df -ThFilesystem Type Size Used Avail Use% Mounted ondevtmpfs devtmpfs 63G 0 63G 0% /devtmpfs tmpfs 63G 176K 63G 1% /dev/shmtmpfs tmpfs 63G 66M 63G 1% /runtmpfs tmpfs 63G 0 63G 0% /sys/fs/cgroup/dev/mapper/cl-root xfs 219G 50G 169G 23% //dev/sdb1 ext4 976M 155M 754M 18% /boot/dev/sda ext4 3.6T 129G 3.3T 4% /datatmpfs tmpfs 13G 0 13G 0% /run/user/0overlay overlay 219G 50G 169G 23% /var/lib/docker/overlay2/fff1390868eaaa40a4b9a60a208ac29827be7651d4d32bb781a47e0d57e1f09c/mergedoverlay overlay 219G 50G 169G 23% /var/lib/docker/overlay2/201e22c7ff5e538259c75f3d961073cc8a606d429cbe9adfe2cb20d14fe334b1/merged