运维开发宝典014-交换分区(swap)/文件系统/磁盘阵列

​ 大家好,我是云计算磊哥,从业20年的IT老鸟。运维培训15年,总结了一套从入门到精通的全运维开发宝典手册。准备用300天时间写一套博文,手把手从安装软件讲起,从行业到产品,从过去到未来,从理论到操作,从视频到文档工具,一站式。从零基础入门到20k运维开发工程师岗位诸多就业问题。多方位全方面的给你讲清楚云计算这个行业该如何做。关注我。后续更精彩。


在这里插入图片描述

大家好,上篇文章让我们对存储管理有一个全面的了解,本文探讨三个知识点,交换分区,文件系统,磁盘阵列看完后可掌握的能力

  1. 操作能力:能查看 Swap 分区、EXT/XFS 文件系统信息;能创建、挂载文件系统,设置挂载选项;能创建软链接、硬链接;了解硬 RAID 的基本操作逻辑。
  2. 问题排查与修复能力:能识别并修复 EXT 文件系统的常见故障(如分区只读、超级块损坏);能根据场景选择合适的 RAID 类型,理解不同 RAID 的故障应对方式。
  3. 理论应用能力:理解 Swap 分区的工作机制、EXT/XFS 文件系统的结构差异、日志式文件系统的优势;能根据业务需求(速度 / 安全)选择合适的文件系统和 RAID 类型。

1.交换分区

​ 当系统的物理内存不足时,就需要将物理内存中的一部分空间释放出来以供当前运行的程序使用。被释放的空间可能来自一些很长时间没有运行的程序,它们被临时保存到Swap交换分区中,等到需要再次运行时,再从Swap分区中恢复保存的数据到内存中。注意,Linux系统总是在物理内存不足时,才对Swap交换分区进行使用。

​ 查看当前的交换分区可使用free命令,添加“-m”参数规定单位为M字节,具体如下所示。

[root@localhost ~]# free -m
total         used     free    shared  buff/cache  available
Mem:1823      668      608     9   546     929
**Swap: 2047  0        2047**

该Swap分区大小2047M,使用0M,空闲2047M,也可以使用“Swapon -s”命令查看交换分区大小及使用情况,具体如下所示。

[root@localhost ~]# swapon -s
Filename    Type  Size  Used Priority
/dev/dm-1      partition   2097148  0 -1

​ 交换分区可以在基本分区、逻辑卷与文件上创建,使用mkswap命令格式化即可。

1.在基本分区中增加交换分区

使用fdisk命令创建一个基本分区,使用mkswap命令对其格式化,然后获取UUID,添加在/etc/fstable文件中。

首先创建一个新的分区sdf1,在设置完扇区大小后,输入t参数后,输入82,type选择linux swap

2.在逻辑卷中增加交换分区

在swapvg卷组中创建一个大小为100M的lv-swap逻辑卷,使用mkswap格式化该逻辑卷。

2.EXT文件系统基本结构

​ EXT(Extended file system,扩展文件系统)已经发展到ETX4,其中ETX2与EXT3已经淘汰,它们都属于索引式文件系统。索引式文件系统好比带有目录的本书,索引信息也会占用存储空间。EXT文件系统的结构如图所示。

​ 在图中,硬盘的每一个分区都有一个引导扇区和一个文件系统;文件系统又分为多个块组(Block Group);块组又分为超级块(Super Block)、组描述表(GDT)、块位图(Block Bitmap)、索引节点位图(inode Bitmap)、索引节点表(inode Table)、数据块(Data Blocks);索引节点表记录文件的属性(文件的元数据,metadata),包含索引节点号、文件类型、权限、链接次数、文件所有者、大小、时间戳等信息。
在这里插入图片描述

查看EXT文件系统信息

​ 使用dumpe2fs命令查看当前文件系统的信息,包括文件系统的卷名、文件系统的UUID、文件系统的特性等信息,具体如下所示。

[root@localhost ~]#  dumpe2fs /dev/sdd1

dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name: <none>
Last mounted on: <not available>
Filesystem UUID: 613e7941-3d1c-4daf-a984-4113a20bb7d3
Filesystem magic number: 0xEF53
Filesystem revision #:1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash 
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux

​ 上节已经介绍了逻辑卷概念、创建逻辑卷、卷组扩容及缩减、逻辑卷扩容、LVM快照应用环境、Swap交换分区、EXT文件系统基本结构和查看EXT文件系统信息,下面将介绍EXT日志式文件系统、修复EXT文件系统、XFS文件系统查看及修复、mount命令、文件链接、磁盘阵列和恢复文件的内容。

3.EXT日志式文件系统

在EXT文件系统上,新建一个文件的过程如下。

(1)确定使用者对于新创建文件的目录有w与x的权限;

(2)根据索引节点位图找到没有使用的索引节点号码,并将文件的权限和属性写入。

(3)根据块位图找到没有使用的块号码,将文件的实际数据写入块中,且更新索引节点的块指向信息;

(4)将刚才写入的 索引节点与块信息同步更新索引节点位图与块位图,并更新超级块的内容。

一般将索引节点表与数据块称为数据存放区域,将超级块、块位图与索引节点位图等称为元数据,因为超级块、块位图及索引节点位图的数据是经常变动的,每次新增加、移除、编辑都可能会影响到这三个部分的数据。

​ 如果在执行上述第4步时,突然断电或系统内核发生错误,可能写入的信息仅有索引节点表及数据块,最后的同步更新步骤并没有完成,这会造成metadata的内容与实际信息不一致。当出现这种不一致的情况后,系统会自动修复。若没有日志,系统会全盘扫描,该过程消耗较长的时间。若手动修复,则需要逐一排查,直到找到不一致文件。这样的情况造就了日志式文件系统的兴起。

(1)准备:当系统要写入一个文件时,会先在日志记录区块中记录某个文件准备写入的信息。

(2)实际写入:写入文件的权限与数据,更新元数据。

(3)结束:完成数据与元数据的更新后,在日志记录区块中完成文件的记录。

​ 采用这种方式后,万一数据记录过程中出现了问题,系统只要去检查日志记录区块,就可以知道哪个文件出了问题,针对该问题做一致性检查,而不必检查整个文件系统,这样就可以实现文件系统的快速修复。这就是日志式文件系统的基础功能。

4.修复EXT文件系统

例1:系统无法启动,当检查到/dec/vda2时提示:unexpected inconsistency;run fsck manually。

系统提供有两种解决方法:第一种是用户提供root密码,使用fsck命令修复;第二种是按Ctrl+d组合键重新启动,但没有解决问题。

例2:运行中的服务器的某一个分区出现只读,导致进程无法写入这个分区。例如,Nginx进程无法写日志文件到此分区,手动测试touch文件到此分区显示:cannot touch ‘xxxxx’:Read-only file system。

磁盘只读的原因一般有两种:一是没有正常关机;二是硬盘故障。

如果出问题的是根分区,只能下线报修磁盘。如果是其他分区,则可以尝试用以下3步解决问题。

(1)卸载分区;

(2)使用“fsck.ext4 -fy”命令修复分区;

(3)挂载分区,检查是否可以正常读写。如果仍旧不可以正常读写,请报修磁盘。

例3\:修复超级块

如果超级块损坏,则需要找到备份的超级块,然后利用备份的超级块恢复超级块。

5.XFS文件系统查看及修复

​ EXT文件系统支持度最高,但创建文件系统慢、修复慢、存储容量有限。XFS文件系统同样是一种日志式文件系统,与EXT文件系统相比有如下特性。

• 高容量,支持大存储;

• 高性能,创建/修复文件系统快;

• 索引节点与块都是系统需要用到时才动态配置产生。

​ XFS文件系统有3个区:数据区 (data section)文件系统日志区(log section),实时运行区(realtime section)。

​ 数据区与EXT文件系统类似,包括索引节点、数据块、超级块等信息。

​ 使用xfs_info命令可以查看XFS文件系统信息。

mount命令

​ mount挂载命令在面章节中已经简单介绍,本小节对其做深入的讲解。使用mount命令把文件系统为XFS的sdd1设备挂载到data01目录上,可以添加“-t”参数选择文件系统类型,添加“-o”挂载选项为noexec(不允许执行二进制文件)。挂载完成后,将/usr/bin/date复制到/data01目录中,使用ll查看date的执行权限为可执行,但实际执行时却不能执行,具体如下所示。

[root@localhost ~]# mount -t xfs -o noexec /dev/sdd1 /data01/
[root@localhost ~]# cp -rf /usr/bin/date /data01/
[root@localhost ~]# ll /data01/
-rwxr-xr-x. 1 root root 62200 May  9 13:49 /date

[root@localhost ~]# /data01/date
bash: /data01/date: Permission denied
当挂载选项为defaults时,系统会默认给予若干选项,具体如下所示。

[root@localhost ~]# mount -o defaults /dev/sde1 /mnt/data02
[root@localhost ~]# mount |grep sde1
/dev/sde1 on /mnt/data02 type xfs (rw,relatime,seclabel,attr2,inode64,noquota)

​ 使用man工具查看mount中defaults的定义,当用户使用defaults选项时,它可以支持rw、suid、dev等挂载选项,具体如下所示。

defaults:Use default options: rw, suid, dev, exec, auto, nouser, async.

5.文件链接

​ 在Linux系统中,文件链接分为两种,一种是符号链接(Symbolic Link),另一种是硬链接(Hard Link)。下面分别讲解这两种链接。

1.符号链接

符号链接是指包含所链接文件的路径名,类似于Windows系统中的快捷方式,具体如下所示。

[root@localhost ~]# echo abc > file01
[root@localhost ~]# ln -s /file01 /home/file02

[root@localhost ~]# ll /home/file02 
lrwxrwxrwx. 1 root root 7 May 10 02:25 /home/file02 -> /file01

[root@localhost ~]# ll -i file01 /home/file02 
67146822 -rw-r--r--. 1 root root 4 May 10 02:25 file01
101899842 lrwxrwxrwx. 1 root root 7 May 10 02:25 /home/file02 -> /file01

注意:符号链接可以链接目录文件,也可以跨文件系统进行链接。

2.硬链接

​ 硬链接是指链接文件与原始文件的索引节点相同,即两者是同一个文件。每添加一个硬链接,该文件的索引节点连接数就会增加1;只有当该文件的索引节点连接数为0时,该文件才彻底删除,具体如下所示。

[root@localhost ~]# echo "linux" > /etc/file01
[root@localhost ~]# cat /etc/file01 
linux

[root@localhost ~]# ln /etc/file01 /usr/file01-h
[root@localhost ~]# ll -i /etc/file01 /usr/file01-h 
34584243 -rw-r--r--. 2 root root 6 May 10 17:19 /etc/file01
34584243 -rw-r--r--. 2 root root 6 May 10 17:19 /usr/file01-h

在使用硬链接时,需要注意以下两点。

• 不允许给目录创建硬链接;

• 硬链接只有在同一个文件系统中才能创建。

磁盘阵列

​ 2017年10月,Intel公司发布处理器i9-7980XE(Extreme Edition),该处理器为18核32线程,可以打造每秒万亿次的浮点运算机。与此同时,硬盘的性能却没有很大的提升,木桶最大装水量取决于最短的一块木板,与木桶原理类似,硬盘成为计算机整体性能提升的瓶颈。

​ 美国加州大学伯克利分校的 D. A. Patterson 教授等首次在论文中提出了 RAID(Redundant Array of Independent Disks,廉价磁盘冗余阵列)概念。RAID技术是通过几种特定方式把若干硬盘组合成一个大的磁盘阵列,以提升读写能力与读写速度。

​ RAID磁盘阵列类型有很多种,此处简单介绍几种常见的类型。

1.RAID0

RAID 0也称为条带集或者条带卷,它是至少把2块硬盘串联在一起,组成一个卷组,并把数据分成若干小份,同时写入每个硬盘,如图所示。

在这里插入图片描述

​ 在图中,每个字母代表一个数据块,数据块分别存入到4块硬盘。在理想条件下,硬盘越多,读写速率越快,且率用率为100%。RAID 0是所有磁盘阵列类型中读写速率最快的,但不具备容错能力,一旦其中一块硬盘出现故障,整个系统的数据都会受到影响。RAID 0通常应用在对数据要求不高的,但对速率要求高的场景。

2.RAID1

​ RAID 1也称为镜像集,一般以2块硬盘为一组,数据同时写到这2块硬盘上,其中一份可视为数据的镜像,如图所示。
在这里插入图片描述

​ 在图中,数据写入硬盘时为一式两份,一份作为原数据,一份作为镜像。Raid 1具有容错能力,当某块硬盘出现故障,数据会自动以热交换的方式恢复正常。比Raid 0相比,Raid 1的读写速度较慢,硬盘利用率为50%。

3.RAID5

​ RAID 5也称为带奇偶校验的条带集,至少需要3块以上硬盘。数据奇偶验证信息分别存放在每一行的某个硬盘上,任何一个设备出现故障,并不会影响整个系统的数据,如图所示。

在这里插入图片描述

​ RAID 5占用一块硬盘存储奇偶验证信息,所以硬盘利用率为(n-1)/n。由于要保存奇偶验证信息,其读写速率比RAID 0稍慢,但有一定的容错能力,3块硬盘允许坏1块。RAID 5可以理解为是RAID 0和RAID 1的折中方案,既保证读写速率,又在一定程度上兼顾了数据的安全。

​ 一旦RAID 5某一块硬盘故障,所丢失的数据就需要通过奇偶验证信息计算,导致整体读写速率减慢。如果更换一块新的硬盘,数据会有一个重建的过程,耗费时间视数据量在几十分到数小时不等。如果在这个过程中又有其他硬盘出现故障,数据就会丢失。

4.RAID6

​ RAID 6也称为带奇偶校验的条带集双校验,至少需要4块硬盘,硬盘利用率为(n-2)/n,如图所示。
在这里插入图片描述

​ RAID 6读写速度快,有一定的容错能力,4块硬盘可允许坏2块。RIAD 6 在服务器上比较少见,一般出现在专用的存储设备上。

​ RAID的实现方式有如下两种。

硬RAID:需要RAID卡,有CPU,处理速度快。

软RAID:通过操作系统实现。

​ 实际环境中通过使用硬RAID,软RAID使用非常少。软RAID实验略。硬RAID大家可以根据服务器的型号自行搜索网络视频(如dell服务器r960操作RAID5)。因厂家不同操作步骤极其简单,但也有一点点界面不同。了解一款设备的RAID制作即可举一反三了。配套视频教程。添加链接描述
出现在专用的存储设备上。

​ RAID的实现方式有如下两种。

硬RAID:需要RAID卡,有CPU,处理速度快。

软RAID:通过操作系统实现。

​ 实际环境中通过使用硬RAID,软RAID使用非常少。软RAID实验略。硬RAID大家可以根据服务器的型号自行搜索网络视频(如dell服务器r960操作RAID5)。因厂家不同操作步骤极其简单,但也有一点点界面不同。了解一款设备的RAID制作即可举一反三了。配套视频教程。添加链接描述

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐