• 150455

    文章

  • 1009

    评论

  • 13

    友链

  • 最近新加了换肤功能,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

第九课:《Linux就该这么学》课堂笔记


“工作马马虎虎,只想在兴趣和游戏中寻觅快活,充其量只能获得一时的快感,绝不能尝到从心底涌出的惊喜和快乐,但来自工作的喜悦并不像糖果那样—放进嘴里就甜味十足,而是需要从苦劳与艰辛中渗出,因此当我们聚精会神,孜孜不倦,克服艰辛后的成就感,世上没有哪种喜悦可以类比”。——稻盛和夫

“更何况人类生活中工作占据了较大的比重,如果不能从劳动中、工作中获得充实感,那么即使从别的地方找到快乐,最终我们仍然会感到空虚和缺憾”。——稻盛和夫

————————————————————————————————————————

蓝色字体:需要输入的命令

红色字体:重点关注的解释和说明 

学习重点: 

 

6.7  磁盘容量配额

 

本书在前面曾经讲到,Linux系统的设计初衷就是让许多人一起使用并执行各自的任务,从而成为多用户、多任务的操作系统。但是,硬件资源是固定且有限的,如果某些用户不断地在Linux系统上创建文件或者存放电影,硬盘空间总有一天会被占满。针对这种情况,root管理员就需要使用磁盘容量配额服务来限制某位用户或某个用户组针对特定文件夹可以使用的最大硬盘空间或最大文件个数,一旦达到这个最大值就不再允许继续使用。可以使用quota命令进行磁盘容量配额管理,从而限制用户的硬盘可用容量或所能创建的最大文件个数。quota命令还有软限制和硬限制的功能。

Ø   软限制:当达到软限制时会提示用户,但仍允许用户在限定的额度内继续使用。

Ø   硬限制:当达到硬限制时会提示用户,且强制终止用户的操作。

RHEL 7系统中已经安装了quota磁盘容量配额服务程序包,但存储设备却默认没有开启对quota的支持,此时需要手动编辑配置文件,RHEL 7系统中的/boot目录能够支持quota磁盘配额技术。另外,对于学习过早期的Linux系统,或者具有RHEL 6系统使用经验的读者来说,这里需要特别注意。早期的Linux系统要想让硬盘设备支持quota磁盘容量配额服务,使用的是usrquota参数,而RHEL 7系统使用的则是uquota参数。在重启系统后使用mount命令查看,即可发现/boot目录已经支持quota磁盘配额技术了:

 

[root@linuxprobe ~]# vim /etc/fstab

#

# /etc/fstab

# Created by anaconda on Wed May 4 19:26:23 2017

#

# Accessible filesystems, by reference, are maintained under '/dev/disk'

# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

#

/dev/mapper/rhel-root                  /            xfs       defaults        1 1

UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot         xfs       defaults,uquota  1 2

/dev/mapper                            /rhel-swap   swap swap defaults         0 0

/dev/cdrom                             /media/cdrom iso9660   defaults         0 0

/dev/sdb1                              /newFS       xfs       defaults         0 0

/dev/sdb2                              swap         swap      defaults         0 0

[root@linuxprobe ~]# reboot

[root@linuxprobe ~]# mount | grep boot

/dev/sda1 on /boot type xfs (rw,relatime,seclabel,attr2,inode64,usrquota)

 

接下来创建一个用于检查quota磁盘容量配额效果的用户tom,并针对/boot目录增加其他人的写权限,保证用户能够正常写入数据:

 

[root@linuxprobe ~]# useradd tom

[root@linuxprobe ~]# chmod -Rf o+w /boot

 

6.7.1  xfs_quota命令

xfs_quota命令是一个专门针对XFS文件系统来管理quota磁盘容量配额服务而设计的命令,格式为“xfs_quota [参数] 配额 文件系统”。其中,-c参数用于以参数的形式设置要执行的命令;-x参数是专家模式,让运维人员能够对quota服务进行更多复杂的配置。接下来我们使用xfs_quota命令来设置用户tom/boot目录的quota磁盘容量配额。具体的限额控制包括:硬盘使用量的软限制和硬限制分别为3MB6MB;创建文件数量的软限制和硬限制分别为3个和6个。

 

[root@linuxprobe ~]# xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=3 ihard=6 

tom' /boot

[root@linuxprobe ~]# xfs_quota -x -c report /boot

User quota on /boot (/dev/sda1)   Blocks

User ID Used Soft Hard Warn/Grace

---------- --------------------------------------------------

root 95084    0    0    00 [--------]

tom  0        3072 6144 00 [--------]

 

当配置好上述的各种软硬限制后,尝试切换到这个普通用户,然后分别尝试创建一个体积为5MB8MB的文件。可以发现,在创建8MB的文件时受到了系统限制:

 

[root@linuxprobe ~]# su - tom

[tom@linuxprobe ~]$ dd if=/dev/zero of=/boot/tom bs=5M count=1

1+0 records in

1+0 records out

5242880 bytes (5.2 MB) copied, 0.123966 s, 42.3 MB/s

[tom@linuxprobe ~]$ dd if=/dev/zero of=/boot/tom bs=8M count=1

dd: error writing ‘/boot/tom’: Disk quota exceeded

1+0 records in

0+0 records out

6291456 bytes (6.3 MB) copied, 0.0201593 s, 312 MB/s

 

6.7.2  edquota命令

edquota命令用于编辑用户的quota配额限制,格式为“edquota [参数] [用户] ”。在为用户设置了quota磁盘容量配额限制后,可以使用edquota命令按需修改限额的数值。其中,-u参数表示要针对哪个用户进行设置;-g参数表示要针对哪个用户组进行设置。edquota命令会调用ViVim编辑器来让root管理员修改要限制的具体细节。下面把用户tom的硬盘使用量的硬限额从5MB提升到8MB

 

[root@linuxprobe ~]# edquota -u tom

Disk quotas for user tom (uid 1001):

 Filesystem blocks  soft   hard   inodes   soft   hard

 /dev/sda   6144    3072   8192   1        3      6

[root@linuxprobe ~]# su - tom

Last login: Mon Sep 7 16:43:12 CST 2017 on pts/0

[tom@linuxprobe ~]$ dd if=/dev/zero of=/boot/tom bs=8M count=1

1+0 records in

1+0 records out

8388608 bytes (8.4 MB) copied, 0.0268044 s, 313 MB/s

[tom@linuxprobe ~]$ dd if=/dev/zero of=/boot/tom bs=10M count=1

dd: error writing ‘/boot/tom’: Disk quota exceeded

1+0 records in

0+0 records out

8388608 bytes (8.4 MB) copied, 0.167529 s, 50.1 MB/s

 

 

6.8  软硬方式链接

 

当引领大家学习完本章所有的硬盘管理知识之后,刘遄老师终于可以放心大胆地讲解Linux系统中的“快捷方式”了。在Windows系统中,快捷方式就是指向原始文件的一个链接文件,可以让用户从不同的位置来访问原始的文件;原文件一旦被删除或剪切到其他地方后,会导致链接文件失效。但是,这个看似简单的东西在Linux系统中可不太一样。

Linux系统中存在硬链接和软连接两种文件。

Ø   链接(hard link):可以将它理解为一个“指向原始文件inode的指针”,系统不为它分配独立的inode和文件。所以,硬链接文件与原始文件其实是同一个文件,只是名字不同。我们每添加一个硬链接,该文件的inode连接数就会增加1;而且只有当该文件的inode连接数为0时,才算彻底将它删除。换言之,由于硬链接实际上是指向原文件inode的指针,因此即便原始文件被删除,依然可以通过硬链接文件来访问。需要注意的是,由于技术的局限性,我们不能跨分区对目录文件进行链接。

Ø   软链接(也称为符号链接[symbolic link]):仅仅包含所链接文件的路径名,因此能链接目录文件,也可以跨越文件系统进行链接。但是,当原始文件被删除后,链接文件也将失效,从这一点上来说与Windows系统中的“快捷方式”具有一样的性质。

ln命令

ln命令用于创建链接文件,格式为“ln [选项] 目标”,其可用的参数以及作用如表6-6所示。在使用ln命令时,是否添加-s参数,将创建出性质不同的两种“快捷方式”。因此如果没有扎实的理论知识和实践经验做铺垫,尽管能够成功完成实验,但永远不会明白为什么会成功。

6-6                                               ln命令中可用的参数以及作用

参数

作用

-s

创建“符号链接”(如果不带-s参数,则默认创建硬链接)

-f

强制创建文件或目录的链接

-i

覆盖前先询问

-v

显示创建链接的过程

 

为了更好地理解软链接、硬链接的不同性质,接下来创建一个类似于Windows系统中快捷方式的软链接。这样,当原始文件被删除后,就无法读取新建的链接文件了。

 

[root@linuxprobe ~]# echo "Welcome to linuxprobe.com" > readme.txt

[root@linuxprobe ~]# ln -s readme.txt readit.txt

[root@linuxprobe ~]# cat readme.txt 

Welcome to linuxprobe.com

[root@linuxprobe ~]# cat readit.txt 

Welcome to linuxprobe.com

[root@linuxprobe ~]# ls -l readme.txt 

-rw-r--r-- 1 root root 26 Jan 11 00:08 readme.txt

[root@linuxprobe ~]# rm -f readme.txt 

[root@linuxprobe ~]# cat readit.txt 

cat: readit.txt: No such file or directory

 

接下来针对一个原始文件创建一个硬链接,即相当于针对原始文件的硬盘存储位置创建了一个指针,这样一来,新创建的这个硬链接就不再依赖于原始文件的名称等信息,也不会因为原始文件的删除而导致无法读取。同时可以看到创建硬链接后,原始文件的硬盘链接数量增加到了2

 

[root@linuxprobe ~]# echo "Welcome to linuxprobe.com" > readme.txt

[root@linuxprobe ~]# ln readme.txt readit.txt

[root@linuxprobe ~]# cat readme.txt 

Welcome to linuxprobe.com

[root@linuxprobe ~]# cat readit.txt 

Welcome to linuxprobe.com

[root@linuxprobe ~]# ls -l readme.txt 

-rw-r--r-- 2 root root 26 Jan 11 00:13 readme.txt

[root@linuxprobe ~]# rm -f readme.txt 

[root@linuxprobe ~]# cat readit.txt 

Welcome to linuxprobe.com

 

 

复习题

 

1/home目录与/root目录内存放的文件有何相同点以及不同点?

答:这两个目录都是用来存放用户的家目录数据的,但是,/root目录存放的是root管理员的家目录数据。

 

2.假如一个设备的文件名称为/dev/sdb,可以确认它是主板第二个插槽上的设备吗?

答:不一定,因为设备的文件名称是由系统的识别顺序来决定的。

 

3.如果硬盘中需要5个分区,至少需要几个逻辑分区?

答:可以选用创建3个主分区+1个扩展分区的方法,然后把扩展分区再分成2个逻辑分区,即有了5个分区。

 

4/dev/sda5是主分区还是逻辑分区?

答:逻辑分区。

 

5.哪个服务决定了设备在/dev目录中的名称?

答:udev设备管理器服务。

 

6.用一句话来描述挂载操作。

答:当用户需要使用硬盘设备或分区中的数据时,需要先将其与一个已存在的目录文件进行关联,而这个关联动作就是“挂载”。

 

7.在配置quota磁盘容量配额服务时,软限制数值必须小于硬限制数值么?

答:不一定,软限制数值可以小于等于硬限制数值。

 

8.若原始文件被改名,那么之前创建的硬链接还能访问到这个原始文件么?

答:可以。

第7章

使用RAID与LVM磁盘阵列技术

本章讲解了如下内容:

Ø   RAID(独立冗余磁盘阵列);

Ø   LVM(逻辑卷管理器)。

 

在学习了第6章讲解的硬盘设备分区、格式化、挂载等知识后,本章将深入讲解各个常用RAIDRedundant Array of Independent Disks,独立冗余磁盘阵列)技术方案的特性,并通过实际部署RAID 10RAID 5+备份盘等方案来更直观地查看RAID的强大效果,以便进一步满足生产环境对硬盘设备的IO读写速度和数据冗余备份机制的需求。同时,考虑到用户可能会动态调整存储资源,本章还将介绍LVMLogical Volume Manager,逻辑卷管理器)的部署、扩容、缩小、快照以及卸载删除的相关知识。相信读者在学完本章内容后,便可以在企业级生产环境中灵活运用RAIDLVM来满足对存储资源的高级管理需求了。

 

7.1  RAID(独立冗余磁盘阵列)

 

近年来, CPU的处理性能保持着高速增长,Intel公司在2017年最新发布的i9-7980XE处理器芯片更是达到了18核心36线程。但与此同时,硬盘设备的性能提升却不是很大,因此逐渐成为当代计算机整体性能的瓶颈。而且,由于硬盘设备需要进行持续、频繁、大量的IO操作,相较于其他设备,其损坏几率也大幅增加,导致重要数据丢失的几率也随之增加。

1988年,加利福尼亚大学伯克利分校首次提出并定义了RAID技术的概念。RAID技术通过把多个硬盘设备组合成一个容量更大、安全性更好的磁盘阵列,并把数据切割成多个区段后分别存放在各个不同的物理硬盘设备上,然后利用分散读写技术来提升磁盘阵列整体的性能,同时把多个重要数据的副本同步到不同的物理硬盘设备上,从而起到了非常好的数据冗余备份效果。

任何事物都有它的两面性。RAID技术确实具有非常好的数据冗余备份功能,但是它也相应地提高了成本支出。就像原本我们只有一个电话本,但是为了避免遗失,我们将联系人号码信息写成了两份,自然要为此多买一个电话本,这也就相应地提升了成本支出。RAID技术的设计初衷是减少因为采购硬盘设备带来的费用支出,但是与数据本身的价值相比较,现代企业更看重的则是RAID技术所具备的冗余备份机制以及带来的硬盘吞吐量的提升。也就是说,RAID不仅降低了硬盘设备损坏后丢失数据的几率,还提升了硬盘设备的读写速度,所以它在绝大多数运营商或大中型企业中得以广泛部署和应用。

出于成本和技术方面的考虑,需要针对不同的需求在数据可靠性及读写性能上作出权衡,制定出满足各自需求的不同方案。目前已有的RAID磁盘阵列的方案至少有十几种,而刘遄老师接下来会详细讲解RAID 0RAID 1RAID 5RAID 104种最常见的方案。

7.1.1  RAID 0

RAID 0技术把多块物理硬盘设备(至少两块)通过硬件或软件的方式串联在一起,组成一个大的卷组,并将数据依次写入到各个物理硬盘中。这样一来,在最理想的状态下,硬盘设备的读写性能会提升数倍,但是若任意一块硬盘发生故障将导致整个系统的数据都受到破坏。通俗来说,RAID 0技术能够有效地提升硬盘数据的吞吐速度,但是不具备数据备份和错误修复能力。如图7-1所示,数据被分别写入到不同的硬盘设备中,即disk1disk2硬盘设备会分别保存数据资料,最终实现提升读取、写入速度的效果

7-1  RAID 0技术示意图

7.1.2  RAID 1

尽管RAID 0技术提升了硬盘设备的读写速度,但是它是将数据依次写入到各个物理硬盘中,也就是说,它的数据是分开存放的,其中任何一块硬盘发生故障都会损坏整个系统的数据。因此,如果生产环境对硬盘设备的读写速度没有要求,而是希望增加数据的安全性时,就需要用到RAID 1技术了。

在图7-2所示的RAID 1技术示意图中可以看到,它是把两块以上的硬盘设备进行绑定,在写入数据时,是将数据同时写入到多块硬盘设备上(可以将其视为数据的镜像或备份)。当其中某一块硬盘发生故障后,一般会立即自动以热交换的方式来恢复数据的正常使用。

7-2  RAID 1技术示意图

RAID 1技术虽然十分注重数据的安全性,但是因为是在多块硬盘设备中写入了相同的数据,因此硬盘设备的利用率得以下降,从理论上来说,图7-2所示的硬盘空间的真实可用率只有50%,由三块硬盘设备组成的RAID 1磁盘阵列的可用率只有33%左右,以此类推。而且,由于需要把数据同时写入到两块以上的硬盘设备,这无疑也在一定程度上增大了系统计算功能的负载。

那么,有没有一种RAID方案既考虑到了硬盘设备的读写速度和数据安全性,还兼顾了成本问题呢?实际上,单从数据安全和成本问题上来讲,就不可能在保持原有硬盘设备的利用率且还不增加新设备的情况下,能大幅提升数据的安全性。刘遄老师也没有必要忽悠各位读者,下面将要讲解的RAID 5技术虽然在理论上兼顾了三者(读写速度、数据安全性、成本),但实际上更像是对这三者的“相互妥协”。

7.1.3  RAID 5

7-3所示,RAID5技术是把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。RAID 5磁盘阵列组中数据的奇偶校验信息并不是单独保存到某一块硬盘设备中,而是存储到除自身以外的其他每一块硬盘设备上,这样的好处是其中任何一设备损坏后不至于出现致命缺陷;图7-3parity部分存放的就是数据的奇偶校验信息,换句话说,就是RAID 5技术实际上没有备份硬盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据。RAID这样的技术特性“妥协”地兼顾了硬盘设备的读写速度、数据安全性与存储成本问题。

7-3  RAID5技术示意图

7.1.4  RAID 10

鉴于RAID 5技术是因为硬盘设备的成本问题对读写速度和数据的安全性能而有了一定的妥协,但是大部分企业更在乎的是数据本身的价值而非硬盘价格,因此生产环境中主要使用RAID 10技术。

顾名思义,RAID 10技术是RAID 1+RAID 0技术的一个“组合体”。如图7-4所示,RAID 10技术需要至少4块硬盘来组建,其中先分别两两制作成RAID 1磁盘阵列,以保证数据的安全性;然后再对两个RAID 1磁盘阵列实施RAID 0技术,进一步提高硬盘设备的读写速度。这样从理论上来讲,只要坏的不是同一组中的所有硬盘,那么最多可以损坏50%的硬盘设备而不丢失数据。由于RAID 10技术继承了RAID 0的高读写速度和RAID 1的数据安全性,在不考虑成本的情况下RAID 10的性能都超过了RAID 5,因此当前成为广泛使用的一种存储技术。

7-4  RAID 10技术示意图

7.1.5  部署磁盘阵列

在具备了上一章的硬盘设备管理基础之后,再来部署RAIDLVM就变得十分轻松了。首先,需要在虚拟机中添加4块硬盘设备来制作一个RAID 10磁盘阵列,如图7-5所示。

7-5  为虚拟机系统模拟添加4块硬盘设备

这几块硬盘设备是模拟出来的,不需要特意去买几块真实的物理硬盘插到电脑上。需要注意的是,一定要记得在关闭系统之后,再在虚拟机中添加硬盘设备,否则可能会因为计算机架构的不同而导致虚拟机系统无法识别添加的硬盘设备。

mdadm命令用于管理Linux系统中的软件RAID硬盘阵列,格式为“mdadm [模式] <RAID设备名称> [选项] [成员设备名称]”。

当前,生产环境中用到的服务器一般都配备RAID阵列卡,尽管服务器的价格越来越便宜,但是我们没有必要为了做一个实验而去单独购买一台服务器,而是可以学会用mdadm命令在Linux系统中创建和管理软件RAID磁盘阵列,而且它涉及的理论知识的操作过程与生产环境中的完全一致。mdadm命令的常用参数以及作用如表7-1所示。

7-1                                             mdadm命令的常用参数和作用

参数

作用

-a

检测设备名称

-n

指定设备数量

-l

指定RAID级别

-C

创建

-v

显示过程

-f

模拟设备损坏

-r

移除设备

-Q

查看摘要信息

-D

查看详细信息

-S

停止RAID磁盘阵列

 

接下来,使用mdadm命令创建RAID 10,名称为“/dev/md0”。

6章中讲到,udevLinux系统内核中用来给硬件命名的服务,其命名规则也非常简单。我们可以通过命名规则猜测到第二个SCSI存储设备的名称会是/dev/sdb,然后依此类推。使用硬盘设备来部署RAID磁盘阵列很像是将几位同学组成一个班级,但总不能将班级命名为/dev/sdbcde吧。尽管这样可以一眼看出它是由哪些元素组成的,但是并不利于我们的记忆和阅读。更何况如果我们是使用1050100个硬盘来部署RAID磁盘阵列呢?

此时,就需要使用mdadm中的参数了。其中,-C参数代表创建一个RAID阵列卡;-v参数显示创建的过程,同时在后面追加一个设备名称/dev/md0,这样/dev/md0就是创建后的RAID磁盘阵列的名称;-a yes参数代表自动创建设备文件;-n 4参数代表使用4块硬盘来部署这个RAID磁盘阵列;而-l 10参数则代表RAID 10方案;最后再加上4块硬盘设备的名称就搞定了。

 

[root@linuxprobe ~]# mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sdb /dev/sdc 

/dev/sdd /dev/sde

mdadm: layout defaults to n2

mdadm: layout defaults to n2

mdadm: chunk size defaults to 512K

mdadm: size set to 20954624K

mdadm: Defaulting to version 1.2 metadata

mdadm: array /dev/md0 started.

 

其次,把制作好的RAID磁盘阵列格式化为ext4格式。

 

[root@linuxprobe ~]# mkfs.ext4 /dev/md0

mke2fs 1.42.9 (28-Dec-2013)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=128 blocks, Stripe width=256 blocks

2621440 inodes, 10477312 blocks

523865 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=2157969408

320 block groups

32768 blocks per group, 32768 fragments per group

8192 inodes per group

Superblock backups stored on blocks:

32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,

4096000, 7962624

Allocating group tables: done

Writing inode tables: done

Creating journal (32768 blocks): done

Writing superblocks and filesystem accounting information: done

 

再次,创建挂载点然后把硬盘设备进行挂载操作。挂载成功后可看到可用空间为40GB

 

[root@linuxprobe ~]# mkdir /RAID

[root@linuxprobe ~]# mount /dev/md0 /RAID

[root@linuxprobe ~]# df -h

Filesystem              Size  Used Avail Use% Mounted on

/dev/mapper/rhel-root   18G   3.0G  15G   17% /

devtmpfs               905M      0 905M    0% /dev

tmpfs                  914M    84K 914M    1% /dev/shm

tmpfs                  914M   8.9M 905M    1% /run

tmpfs                  914M      0 914M    0% /sys/fs/cgroup

/dev/sr0               3.5G   3.5G    0  100% /media/cdrom

/dev/sda1              497M   119M 379M   24% /boot

/dev/md0               40G     49M  38G    1% /RAID

 

最后,查看/dev/md0磁盘阵列的详细信息,并把挂载信息写入到配置文件中,使其永久生效。

 

[root@linuxprobe ~]# mdadm -D /dev/md0

/dev/md0:

Version : 1.2

Creation Time : Tue May 5 07:43:26 2017

Raid Level : raid10

Array Size : 41909248 (39.97 GiB 42.92 GB)

Used Dev Size : 20954624 (19.98 GiB 21.46 GB)

Raid Devices : 4

Total Devices : 4

Persistence : Superblock is persistent

Update Time : Tue May 5 07:46:59 2017

State : clean

Active Devices : 4

Working Devices : 4

Failed Devices : 0

Spare Devices : 0

Layout : near=2

Chunk Size : 512K

Name : localhost.localdomain:0 (local to host localhost.localdomain)

UUID : cc9a87d4:1e89e175:5383e1e8:a78ec62c

Events : 17

Number Major Minor RaidDevice State

0 8 16 0 active sync /dev/sdb

1 8 32 1 active sync /dev/sdc

2 8 48 2 active sync /dev/sdd

3 8 64 3 active sync /dev/sde

[root@linuxprobe ~]# echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab

 

7.1.6  损坏磁盘阵列及修复

之所以在生产环境中部署RAID 10磁盘阵列,是为了提高硬盘存储设备的读写速度及数据的安全性,但由于我们的硬盘设备是在虚拟机中模拟出来的,因此对读写速度的改善可能并不直观,因此刘遄老师决定给各位读者讲解一下RAID磁盘阵列损坏后的处理方法,这样大家在步入运维岗位后遇到类似问题时,也可以轻松解决。

在确认有一块物理硬盘设备出现损坏而不能继续正常使用后,应该使用mdadm命令将其移除,然后查看RAID磁盘阵列的状态,可以发现状态已经改变。

 

[root@linuxprobe ~]# mdadm /dev/md0 -f /dev/sdb

mdadm: set /dev/sdb faulty in /dev/md0

[root@linuxprobe ~]# mdadm -D /dev/md0

/dev/md0:

Version : 1.2

Creation Time : Fri May 8 08:11:00 2017

Raid Level : raid10

Array Size : 41909248 (39.97 GiB 42.92 GB)

Used Dev Size : 20954624 (19.98 GiB 21.46 GB)

Raid Devices : 4

Total Devices : 4

Persistence : Superblock is persistent

Update Time : Fri May 8 08:27:18 2017

State : clean, degraded

Active Devices : 3

Working Devices : 3

Failed Devices : 1

Spare Devices : 0

Layout : near=2

Chunk Size : 512K

Name : linuxprobe.com:0 (local to host linuxprobe.com)

UUID : f2993bbd:99c1eb63:bd61d4d4:3f06c3b0

Events : 21

Number Major Minor RaidDevice State

0 0 0 0 removed

1 8 32 1 active sync /dev/sdc

2 8 48 2 active sync /dev/sdd

3 8 64 3 active sync /dev/sde

0 8 16 – faulty      /dev/sdb

 

RAID 10级别的磁盘阵列中,当RAID 1磁盘阵列中存在一个故障盘时并不影响RAID 10磁盘阵列的使用。当购买了新的硬盘设备后再使用mdadm命令来予以替换即可,在此期间我们可以在/RAID目录中正常地创建或删除文件。由于我们是在虚拟机中模拟硬盘,所以先重启系统,然后再把新的硬盘添加到RAID磁盘阵列中。

 

[root@linuxprobe ~]# umount /RAID

[root@linuxprobe ~]# mdadm /dev/md0 -a /dev/sdb

[root@linuxprobe ~]# mdadm -D /dev/md0

/dev/md0:

 Version : 1.2

 Creation Time : Mon Jan 30 00:08:56 2017

 Raid Level : raid10

 Array Size : 41909248 (39.97 GiB 42.92 GB)

 Used Dev Size : 20954624 (19.98 GiB 21.46 GB)

 Raid Devices : 4

 Total Devices : 4

 Persistence : Superblock is persistent

 Update Time : Mon Jan 30 00:19:53 2017

 State : clean 

 Active Devices : 4

 Working Devices : 4

 Failed Devices : 0

 Spare Devices : 0

 Layout : near=2

 Chunk Size : 512K

 Name : localhost.localdomain:0 (local to host localhost.localdomain)

 UUID : d3491c05:cfc81ca0:32489f04:716a2cf0

 Events : 56

 Number Major Minor RaidDevice State

 4 8 16 0 active sync /dev/sdb

 1 8 32 1 active sync /dev/sdc

 2 8 48 2 active sync /dev/sdd

 3 8 64 3 active sync /dev/sde

[root@linuxprobe ~]# mount –a

 

7.1.7  磁盘阵列+备份盘

RAID 10磁盘阵列中最多允许50%的硬盘设备发生故障,但是存在这样一种极端情况,即同一RAID 1磁盘阵列中的硬盘设备若全部损坏,也会导致数据丢失。换句话说,在RAID 10磁盘阵列中,如果RAID 1中的某一块硬盘出现了故障,而我们正在前往修复的路上,恰巧该RAID1磁盘阵列中的另一块硬盘设备也出现故障,那么数据就被彻底丢失了。刘遄老师可真不是乌鸦嘴,这种RAID 1磁盘阵列中的硬盘设备同时损坏的情况还真被我的学生遇到过。

在这样的情况下,该怎么办呢?其实,我们完全可以使用RAID备份盘技术来预防这类事故。该技术的核心理念就是准备一块足够大的硬盘,这块硬盘平时处于闲置状态,一旦RAID磁盘阵列中有硬盘出现故障后则会马上自动顶替上去。这样很棒吧!

为了避免多个实验之间相互发生冲突,我们需要保证每个实验的相对独立性,为此需要大家自行将虚拟机还原到初始状态。另外,由于刚才已经演示了RAID 10磁盘阵列的部署方法,我们现在来看一下RAID 5的部署效果。部署RAID 5磁盘阵列时,至少需要用到3块硬盘,还需要再加一块备份硬盘,所以总计需要在虚拟机中模拟4块硬盘设备,如图7-6所示。

7-6  在虚拟机中模拟添加4块硬盘设备

现在创建一个RAID 5磁盘阵列+备份盘。在下面的命令中,参数-n 3代表创建这个RAID 5磁盘阵列所需的硬盘数,参数-l 5代表RAID的级别,而参数-x 1则代表有一块备份盘。当查看/dev/md0(即RAID 5磁盘阵列的名称)磁盘阵列的时候就能看到有一块备份盘在等待中了。

 

[root@linuxprobe ~]# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/

sdd /dev/sde

mdadm: layout defaults to left-symmetric

mdadm: layout defaults to left-symmetric

mdadm: chunk size defaults to 512K

mdadm: size set to 20954624K

mdadm: Defaulting to version 1.2 metadata

mdadm: array /dev/md0 started.

[root@linuxprobe ~]# mdadm -D /dev/md0

/dev/md0:

Version : 1.2

Creation Time : Fri May 8 09:20:35 2017

Raid Level : raid5

Array Size : 41909248 (39.97 GiB 42.92 GB)

Used Dev Size : 20954624 (19.98 GiB 21.46 GB)

Raid Devices : 3

Total Devices : 4

Persistence : Superblock is persistent

Update Time : Fri May 8 09:22:22 2017

State : clean

Active Devices : 3

Working Devices : 4

Failed Devices : 0

Spare Devices : 1

Layout : left-symmetric

Chunk Size : 512K

Name : linuxprobe.com:0 (local to host linuxprobe.com)

UUID : 44b1a152:3f1809d3:1d234916:4ac70481

Events : 18

Number Major Minor RaidDevice State

     0   8    16       0      active sync /dev/sdb

     1   8    32       1      active sync /dev/sdc

     4   8    48       2      active sync /dev/sdd

     3   8    64       -      spare       /dev/sde

 

现在将部署好的RAID 5磁盘阵列格式化为ext4文件格式,然后挂载到目录上,之后就可以使用了。

 

[root@linuxprobe ~]# mkfs.ext4 /dev/md0

mke2fs 1.42.9 (28-Dec-2013)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=128 blocks, Stripe width=256 blocks

2621440 inodes, 10477312 blocks

523865 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=2157969408

320 block groups

32768 blocks per group, 32768 fragments per group

8192 inodes per group

Superblock backups stored on blocks:

32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,

4096000, 7962624

Allocating group tables: done

Writing inode tables: done

Creating journal (32768 blocks): done

Writing superblocks and filesystem accounting information: done

[root@linuxprobe ~]# echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab

[root@linuxprobe ~]# mkdir /RAID

[root@linuxprobe ~]# mount -a

 

最后是见证奇迹的时刻!我们再次把硬盘设备/dev/sdb移出磁盘阵列,然后迅速查看/dev/md0磁盘阵列的状态,就会发现备份盘已经被自动顶替上去并开始了数据同步。RAID中的这种备份盘技术非常实用,可以在保证RAID磁盘阵列数据安全性的基础上进一步提高数据可靠性,所以,如果公司不差钱的话还是再买上一块备份盘以防万一。

 

[root@linuxprobe ~]# mdadm /dev/md0 -f /dev/sdb

mdadm: set /dev/sdb faulty in /dev/md0

[root@linuxprobe ~]# mdadm -D /dev/md0

/dev/md0:

Version : 1.2

Creation Time : Fri May 8 09:20:35 2017

Raid Level : raid5

Array Size : 41909248 (39.97 GiB 42.92 GB)

Used Dev Size : 20954624 (19.98 GiB 21.46 GB)

Raid Devices : 3

Total Devices : 4

Persistence : Superblock is persistent

Update Time : Fri May 8 09:23:51 2017

State : active, degraded, recovering

Active Devices : 2

Working Devices : 3

Failed Devices : 1

Spare Devices : 1

Layout : left-symmetric

Chunk Size : 512K

Rebuild Status : 0% complete

Name : linuxprobe.com:0 (local to host linuxprobe.com)

UUID : 44b1a152:3f1809d3:1d234916:4ac70481

Events : 21

Number Major Minor RaidDevice State

     3   8    64       0      spare rebuilding /dev/sde

     1   8    32       1      active sync      /dev/sdc

     4   8    48       2      active sync      /dev/sdd

     0   8    16       -      faulty           /dev/sdb


695856371Web网页设计师②群 | 喜欢本站的朋友可以收藏本站,或者加入我们大家一起来交流技术!

0条评论

Loading...


发表评论

电子邮件地址不会被公开。 必填项已用*标注

自定义皮肤 主体内容背景
打开支付宝扫码付款购买视频教程
遇到问题联系客服QQ:419400980
注册梁钟霖个人博客