大规模Linux集群架构最佳实践:如何管理上千台服务器
上QQ阅读APP看书,第一时间看更新

1.4 文件系统

1.4.1 什么是文件系统

简单来说,文件系统是用来管理和组织文件的“方法”。Linux支持多种不同的文件系统,常见的包括ext2、ext3、ext4、zfs、iso9600、msdos、ntfs、vfat、smbfs等,当然还可以通过加载模块的方式来支持更多的文件系统。虽然文件系统多种多样,但大部分Linux下的文件系统都有类似的结构,包括超级块、inode、数据块、目录块等。其中,超级块包括文件系统的总体信息,是文件系统的核心,所以磁盘中会有多个超级块,这样即使某一些超级块损坏了,文件系统依然可以使用。inode存储所有与文件有关的数据,比如文件的权限和文件所指向的数据块等,也就是不包括文件真实内容和文件名。数据块是真实存储数据的部分,一个数据块默认的大小为4KB。目录块包括文件名和文件在目录中的位置,以及inode的信息。

1.4.2 常见的文件系统

1.ext2文件系统

Linux最早引入的文件系统类型是minix,由于其存在一定的局限性,比如文件名最长仅支持14个字符,文件最大为64MB等因素,后来被ext2(The Second Extended File System)文件系统所取代,该系统有着极好的存储性能,所以曾一度成为Linux中的标准文件系统。和很多文件系统一样,ext2文件系统也是采取将文件数据存放到数据块中的方式来存储数据的,这些数据块的大小可以在创建文件系统的时候指定,对于存放的每个文件和目录,都会有一个inode指定,文件系统中所有的inode都是使用inode表来进行记录的,一定数量的块就会组成一个块组。在ext2文件系统中,整个分区的文件系统信息都被存放在超级块中,考虑到超级块的重要性,在每个块组的开头中都有相同的备份。

但是ext2文件系统的弱点也是很明显的,它不支持日志功能,这很容易造成在一些极端场景中丢失数据,这个天然的弱点导致ext2文件系统无法在关键应用中使用,目前已经很少有企业使用ext2文件系统了。

2.ext3文件系统

为了弥补ext2文件系统的不足,有日志功能的ext3文件系统应运而生了。它直接从ext2文件系统发展而来,所以完全兼容ext2文件系统,而且支持非常简单地从ext2转换为ext3(只需要两条命令),这种特性让也更多的老用户转而使用ext3文件系统。

那么为什么需要日志文件系统呢?因为日志文件系统使用了“两阶段提交”的方式来维护待处理的事物。例如在写入数据之前,文件系统会先在日志中写入,然后再开始真实地写数据,写完数据后则会将之前写入日志中的内容删除。这样一来,如果遇到问题需要检查文件系统或对ext3文件系统进行修复时,只需要检查日志即可。而ext2修复文件系统时,需要遍历整个文件系统来检查文件的一致性信息,因此ext3节省了大量修复文件系统所需的时间。不过,由于增加了日志功能,在存取数据时ext3文件系统看起来要比ext2多一次写入操作,但是ext3对写操作做了优化,所以其性能并不比ext2低。

3.ext4文件系统

ext4文件系统从2.6.19内核开始引入,从CentOS 6开始,ext4也已经成为默认的文件系统。和ext2到ext3的升级一样,从ext3到ext4也是可以在线迁移的,和ext3相比,ext4支持1EB的文件系统,以及16TB的文件,同时支持无数量限制的子目录。

1.4.3 磁盘分区和创建文件系统

磁盘使用前需对其进行分割,这种动作被形象地称为分区。磁盘的分区分为两类,即主分区和扩展分区。受限制于磁盘的分区表大小(MBR大小为512字节,其中分区表占64字节),一块磁盘最多只能创建4个主分区,为了能支持更多分区,可以使用扩展分区(扩展分区中可以划分更多逻辑分区),但是即便这样,分区还是要受主分区+扩展分区最多不能超过4个的限制。磁盘在完成分区后,需要进行创建文件系统的操作,最后将该分区挂载到系统中的某个挂载点才可以使用。

下面继续使用VMware虚拟机演示fdisk的使用,首先会在虚拟机设置中添加一块磁盘,方式如图1-43至图1-48所示,完成后启动虚拟机。

图1-43 选择“添加”,为虚拟机增加设备

图1-44 选择“硬盘”

图1-45 选择“创建一个新的虚拟磁盘”

图1-46 选择“SCSI”

图1-47 选择“单个文件存储虚拟磁盘”

图1-48 命名磁盘后完成

重新启动虚拟机后,使用fdisk -l查看一下发现,有一个/dev/sdb设备,这就是新添加的磁盘在操作系统中对应的设备文件。大小是1073MB(笔者在创建磁盘时给的大小是1GB,由于操作系统之间计算容量的差别,所以存在一部分误差),一共有130个柱面,而且没有分区(提示Disk /dev/sdb doesn't contain a valid partition table),如图1-49所示。

图1-49 查看新的磁盘设备

下面开始对/dev/sdb进行分区操作,首先输入fdisk /dev/sdb,然后输入字母n,这个字母代表new,也就是新建分区;然后系统会提示是创建扩展分区(extended)还是主分区(primary partition),这里选择p;在partition number中输入数字1,代表这是第一个分区;下面要输入第一个柱面开始的位置,该处输入1;再要输入最后一个柱面的位置,这里输入130表示将所有的空间划给这个分区;最后输入字母w,代表将刚刚创建的分区写入分区表。这样就完成了第一步分区操作,所有操作步骤见图1-50。

图1-50 分区方法

分区完成后,再使用fdisk -l查看,对比图1-51,发现不同了吗?是的,这里显示出一个设备,叫做/dev/sdb1,这就是下一步需要创建文件系统的设备。

图1-51 确认磁盘分区成功

要在刚刚创建的分区中格式化文件系统,这里使用ext3文件系统作为演示,可以使用命令“mkfs -t ext3 /dev/sdb1”来完成,或是简单地将此命令写成“mkfs.ext3 /dev/sdb1”,这两个命令是一样的,如图1-52所示。

图1-52 创建文件系统

成功创建文件系统后才可以将磁盘挂载到挂载点,假设这里需要将/dev/sdb1挂载到/mnt,可以使用以下命令:

        [root@localhost ~]# mount /dev/sdb1 /mnt