Linux【6】-硬盘管理1-2-文件系统(xfs/ext3/ext2/reiserFS/JFS/df)

硬盘是用来存储数据的,可以将其想象成柜子,只不过柜子是用来存储衣物的。新买来的硬盘,通常要对其进行分区并格式化,分区就如同把一个大柜按照要求分割成几个小柜子(组合衣柜);格式化就好比在每个小柜子中打入隔断,决定每个隔断的大小和位置,然后在柜门上贴上标签,标签中写清楚每件衣服保存的隔断的位置和这件衣服的一些特性(比如衣服是谁的,衣服的颜色、大小等)。

很多初学者认为,对硬盘进行格式化,只是清除了硬盘中的数据,其实不然,格式化过程中还向硬盘中写入了文件系统。因为不同的操作系统,管理系统中文件的方式也不尽相同(给文件设定的属性和权限也不完全一样),因此,为了使硬盘有效存放当前系统中的文件数据,就需要将硬盘进行格式化,令其使用和操作系统一样(或接近)的文件系统格式。

一、文件系统概述

各操作系统使用的文件系统并不相同,例如,Windows 98 以前的微软操作系统使用 FAT(FAT16)文件系统,Windows 2000 以后的版本使用 NTFS 文件系统,而 Linux 的正统文件系统是 Ext2。

既然格式化的真实目的是为了写入文件系统,那么,Linux 中的文件系统到底是什么,又是如何运作的呢?

早期的 Linux 使用 Ext2 文件系统格式,CentOS 5.x 默认使用 Ext3,本教程中所用的 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。不仅如此,inode 中还记录着文件数据所在 block 块的编号;
  • 文件的实际内容保存在 block 中(数据块),类似衣柜的隔断,用来真正保存衣物。每个 block 都有属于自己的编号。当文件太大时,可能会占用多个 block 块。
  • 另外,还有一个 super block(超级块)用于记录整个文件系统的整体信息,包括 inode 和 block 的总量、已经使用量和剩余量,以及文件系统的格式和相关信息等。

由此我们可以推断出,只要能找到文件 inode 所在的位置,自然就能知道这个文件存放数据的 block 号,从而找到文件的实际数据。整个过程如图 1 所示。

图 1 文件系统的数据存取示意图

图 1 中,文件系统先格式化出 inode 和 block 块,假设某文件的权限和属性信息存放到 inode 4 号位置,这个 inode 记录了实际存储文件数据的 block 号有 4 个,分别为 2、7、13、15,由此,操作系统就能快速地找到文件数据的存储位置。

这种管理文件的系统称为索引式文件系统,Linux 文件系统(Ext 系列)就属于索引式文件系统。

注意,inode 节点并不存储文件的文件名,因为文件名是文件所在目录的数据,所以会保存在上一级目录的 block 块中。前面章节在讲权限命令的时候说过,要对文件的上一级目录拥有 w 权限,才能删除目录中的文件,就是因为文件名是保存在目录的 block 中的

二、常见文件系统

Linux 系统能够支持的文件系统非常多,除 Linux 默认文件系统 Ext2、Ext3 和 Ext4 之外,还能支持 fat16、fat32、NTFS(需要重新编译内核)等 Windows 文件系统。也就是说,Linux 可以通过挂载的方式使用 Windows 文件系统中的数据。Linux 所能够支持的文件系统在 “/usr/src/kemels/当前系统版本/fs” 目录中(需要在安装时选择),该目录中的每个子目录都是一个可以识别的文件系统。我们介绍较为常见的 Linux 支持的文件系统,如表 1 所示。

文件系统 描 述
Ext Linux 中最早的文件系统,由于在性能和兼容性上具有很多缺陷,现在已经很少使用
Ext2 是 Ext 文件系统的升级版本,Red Hat Linux 7.2 版本以前的系统默认都是 Ext2 文件系统。于 1993 年发布,支持最大 16TB 的分区和最大 2TB 的文件(1TB=1024GB=1024x1024KB)
Ext3 是 Ext2 文件系统的升级版本,最大的区别就是带日志功能,以便在系统突然停止时提高文件系统的可靠性。支持最大 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 交换分区

2.1 ReiserFS

ReiserFS是一个非常优秀的文件系统。也是最早用于的日志文件系统之一。ReiserFS的开发者非常有魄力,整个文件系统完全是从头设计 的。目前,ReiserFS可轻松管理上百G的文件系统,这在企业级应用中非常重要。ReiserFS有先进的日志(Journaling/logging)功能 机制。日志机制保证了在每个实际数据修改之前,相应的日志已经写入硬盘。文件与数据的安全性有了很大提高。Reiserfs对一些小文件不分配inode。而是将这些文件打包,存放在同一个磁盘分块中。而其它文件系统则为每个小文件分别放置到一个磁盘分块 中。这意味着:如果有10000个小文件,就要占用10000个分块。想想看这多浪费磁盘空间。ReiserFS基于快速平衡树(balanced tree)搜索,平衡树在性能上非常卓越,这是一种非常高效的算法。ReiserFS搜索大量文件时,搜索速度要比ext2快得多。Reiserfs文件 系统使用BTree存储文件,而其它文件系统使用B+Tree树。BTree查询速度比B+Tree要快很多。Reiserfs在文件定位上速度非常 快。 在实际运用中,ReiserFS 在处理小于 1k 的文件时,比ext2 快 8 到 15 倍!ReiserFS 几乎在各个方面都优于 ext2.

2.2 Ext2

Ext2: 是 GNU/Linux 系统中标准的文件系统,其特点为存取文件的性能极好,对于中小型的文件更显示出优势,这主要得利于其簇快取层的优良 设计。其单一文件大小与文件系统本身的容量上限与文件系统本身的簇大小有关,在一般常见的 x86 电脑系统中,簇最大为 4KB, 则单一文件大小上限 为 2048GB, 而文件系统的容量上限为 16384GB。但由于目前核心 2.4 所能使用的单一分割区最大只有 2048GB,因此实际上能使用 的文件系统容量最多也只有 2048GB。

2.3 Ext3

Ext3是一种一种日志文件系统,是Ext2的扩展,文件系统在记录数据时,一般都会先写在缓存中,然后再写入磁盘;然而当突然出现故障时,数据无法写入磁盘,此时就会造成数据的丢失,而ext3文件系统就能根据日志追溯功能,能够重新找到数据,避免数据的丢失。

2.4 XFS

XFS 是 Silicon Graphics,Inc. 于 90 年代初开发的。它至今仍作为 SGI 基于 IRIX 的产品(从工作站到超级计算机)的底层文件系统来使用。由于采用缓存数据、延时智能存储,在操作大文件时,有一定的优势,XFS 是一个全64-bit的文件系统,它可以支持上百万T字节的存储空间。对特大文件及小尺寸文件的支持都表现出众,支持特大数量的目录。最大可支持的文件大小为263 = 9 x 1018 = 9 exabytes,最大文件系统尺寸为18 exabytes。   XFS使用高的表结构(B+树),保证了文件系统可以快速搜索与快速空间分配。XFS能够持续提供高速操作,文件系统的性能不受目录中目录及文件数量的限制。

2.5 JFS

JFS是IBM公司为linux系统开发的一个日志文件系统。从IBM的实力及它对Linux的态度来看,JFS应该是未来日志文件系统中最具实力的一个文件系统。JFS提供了基于日志的字节级文件系统,该文件系统是为面向事务的高性能系统而开发的。JFS 能够在几秒或几 分钟内就把文件系统恢复到一致状态。JFS能够保证数据在任何意外宕机的情况下,不会造成磁盘数据的丢失与损坏。

三、查看文件系统类型

[sam@g03 test]$ df -Th |grep "^/dev"
/dev/mapper/centos-root xfs       300G   56G  245G  19% /
/dev/sda2               xfs       494M  416M   79M  85% /boot
/dev/mapper/centos-home xfs       2.5T  1.1T  1.4T  43% /home

其他的方法:

方法1

$ fsck -N /dev/sda3
$ fsck -N /dev/sdb1

方法2

lsblk -f

方法3

mount | grep "^/dev"

方法4

blkid /dev/sda3

方法5

sudo file -sL /dev/sda3

方法6

cat /etc/fstab

参考资料

个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn