11. Linux高级文件系统管理(2)

目录

11.9 Linux如何判断磁盘配额是否生效?

11.10 Linux LVM逻辑卷管理机制

11.11 Linux PV物理卷

建立物理卷

查看物理卷

删除物理卷

11.12 Linux VG卷组

建立卷组

激活卷组

查看卷组

增加卷组容量

减少卷组容量

删除卷组

11.13 Linux LV逻辑卷

建立逻辑卷

查看逻辑卷

调整逻辑卷大小

删除逻辑卷

11.14 Linux LVM(逻辑卷管理)的删除

11.15 Linux RAID(磁盘阵列)完全攻略

RAID 简介

RAID 0

RAID 1

RAID 10 或 RAID 01

RAID 5

软 RAID 和硬 RAID

11.16 使用图形界面来配置RAID

RAID 1 配置

RAID 5配置

11.17 使用mdadm命令来配置RAID

建立分区

mdadm命令建立 RAID 5

格式化与挂载RAID

生成mdadm配置文件

设置开机后自动挂载

启动或停止RAID

模拟分区出现故障

移除错误分区

添加新的备份分区


 

11.9 Linux如何判断磁盘配额是否生效?

 

我们的磁盘配额已经生效,接下来测试一下是否会限制我们的用户。以 lamp1 用户为例,

因为 lamp1 用户除容量被限制外,也限制了文件个数。先测试文件个数是否被限制了,命令如下:

[root@1ocalhost ~]# chmod 777 /disk/
#给/disk目录赋予权限,lamp1用户要拥有写权限
[root@localhost ~]# su - lamp1
#切换成lamp1用户
[lamp1@1ocalhost ~]$ cd /disk/
#进入/disk目录
[lamp1@1ocalhost disk]$ touch 11
#建立文件
[lamp1@localhost disk]$ touch 22
[lamp1@localhost disk]$ touch 33
[lamp1@localhost disk]$ touch 44
[lamp1@1ocalhost disk]$ touch 55
[lamp1@localhost disk]$ touch 66
[lamp1@localhost disk]$ touch 77
[lamp1@localhost disk]$ touch 88
[lamp1@1ocalhost disk]$ touch 99

sdb1: warning, user file quota exceeded.
#有警告信息了,因为软限制是 8 个
[lamp1@localhost disk]$ ls
11 22 33 44 55 66 77 88 99 aquota. group aquota.user lost+found
#虽然警告了,但是第9个文件依然建立
[lamp1@localhost disk]$ touch 10
[lamp1@localhost disk]$ touch 111

sdb1: write failed, user file limit reached.
touch:无法创建"111":超出磁盘配额
#超出磁盘配额
[lamp1@localhost disk]$ ls
10 11 22 33 44 55 66 77 88 99 aquota. group aquota.user lost+found
#第11个文件没有建立

还记得吗?磁盘配额的概念是指定的普通用户在指定的分区中使用磁盘空间和文件个数的限制。所以一定要记得切换用户和建立文件的目录,否则默认全部写入 / 分区,而我们并没有在 / 分区上设定配额。

我们切换到 root 身份,使用 repquota 命令查看一下:

[root@localhost ~]# repquota -uvs /disk/
*** Report for user quotas on device /dev/sdbl Block grace time: 8days; Inode grace time: 8days
Block limits File limits
User used soft hard grace used soft hard grace
root -- 13 0 0 2 0 0
lampl -+ 0 40000 50000 10 8 10 7days
lamp2 -- 0 245M 293M 0 0 0
lamp3 -- 0 245M 293M 0 0 0
Statistics:
Total blocks: 7
Data blocks: 1
Entries: 4
Used average: 4.000000

看到了吗? lamp1 用户的文件个数的 grace 字段开始倒数了。

删除一个文件,然后建立一个大于 50MB 的文件,看看磁盘容量是否被限制了。命令如下:

[lamp1@localhost disk]$ rm -rf 10 #删除文件10,空出文件个数
[lamp1@localhost disk]$ dd if=/dev/zero of=/disk/tesffile bs=1M count=60

#建立tesffile文件,指定文件大小为60MB
sdb1: warning, user block quota exceeded.
sdb1: write failed, user block limit reached.
dd:正在写入"/disk/111":超出磁盘配额
#报错,超出磁盘配额
记录了 49+0的读入
记录了 48+0的写出
51200000字节(51 MB)已复制,0.538582 秒,95.1 MB/秒
[lamp1 @localhost disk]$ ll -h tesffile
-rw-rw-r-- 1 lamp1 lamp1 49M 4月 17 02:52 tesffile
#查看一下tesffile文件的大小,并没有超出50MB的硬限制

在 dd 命令中,if 用于指定输入项,这里我们用 /dev/zero 作为输入项,会不停地向目标文件中写 0;of 用于指定输出项,这里用 /disk/testfilef 作为目标文件;bs 指定每次复制 1MB 数据;count 指定复制 60 次。也就是建立一个大小为 60MB 的 testfile 文件,但是这个文件大小超出了磁盘容量硬限制,所以只建立了 49MB,证明容量限制也生效了。

 

11.10 Linux LVM逻辑卷管理机制

 

我们在实际使用 Linux 服务器的时候,总会有一个让人头疼的问题,随着业务的增加,文件系统负载会越来越大,当到了空间不足的情况时,如果我们还在使用传统的分区方式管理硬盘,就不得不将现有的所有分区全部删除,并重新规划新的存储方案。

不仅如此,分区到底应该分多大呢?分得太大,会浪费硬盘空间;分得太小,又会面临不够使用的情况。如果在安装系统时规划不合理,这种困扰就会经常出现。如果真出现了分区不够用的情况,应该怎么解决呢?

在以往(2.4 内核以前)要想调整分区大小,要么先新建立一个更大的分区,然后复制旧分区中的内容到新分区,最后使用软链接来替代旧分区;要么使用调整分区大小的工具(如 parted),parted 虽然可以调整分区大小,但是它需要卸载分区之后才可以进行,也就是说需要停止服务。

其实,从一开始,我们就需要有一种管理机制来帮助我们动态地管理存储,LVM 就提供了这种功能。LVM 最大的好处就是可以随时调整分区的大小,分区中的现有数据不会丟失,并且不需要卸载分区、停止服务。

LVM 是 Logical Volume Manager 的简称,译为中文就是逻辑卷管理。它是 Linux 下对硬盘分区的一种管理机制。LVM 适合于管理大存储设备,并允许用户动态调整文件系统的大小。此外,LVM 的快照功能可以帮助我们快速备份数据。LVM 为我们提供了逻辑概念上的磁盘,使得文件系统不再关心底层物理磁盘的概念。

Linux LVM 允许我们在逻辑卷在线的状态下将其复制到另一设备上,此成功被称为快照功能。快照允许我们在复制的同时,保证运行关键任务的 Web 服务器或数据库服务继续工作。

LVM 是在硬盘分区之上建立一个逻辑层,这个逻辑层让多个硬盘或分区看起来像一块逻辑硬盘,然后将这块逻辑硬盘分成逻辑卷之后使用,从而大大提高了分区的灵活性。我们把真实的物理硬盘或分区称作物理卷(PV);由多个物理卷组成一块大的逻辑硬盘,叫作卷组(VG);将卷组划分成多个可以使用的分区,叫作逻辑卷(LV)。而在 LVM 中最小的存储单位不再是 block,而是物理扩展块(Physical Extend,PE)。我们通过图 1 看看这些概念之间的联系。


11. Linux高级文件系统管理(2)_第1张图片
图 1 LVM 示意图
 

  • 物理卷(Physical Volume,PV):就是真正的物理硬盘或分区。
  • 卷组(Volume Group,VG):将多个物理卷合起来就组成了卷组。组成同一个卷组的物理卷可以是同一块硬盘的不同分区,也可以是不同硬盘上的不同分区。我们可以把卷组想象为一块逻辑硬盘。
  • 逻辑卷(Logical Volume,LV):卷组是一块逻辑硬盘,硬盘必须分区之后才能使用,我们把这个分区称作逻辑卷。逻辑卷可以被格式化和写入数据。我们可以把逻辑卷想象为分区。
  • 物理扩展(Physical Extend,PE):PE 是用来保存数据的最小单元,我们的数据实际上都是写入 PE 当中的。PE 的大小是可以配置的,默认是 4MB。


也就是说,我们在建立 LVM 的时候,需要按照以下步骤来进行:

  1. 把物理硬盘分成分区,当然也可以是整块物理硬盘;
  2. 把物理分区建立为物理卷(PV),也可以直接把整块硬盘都建立为物理卷。
  3. 把物理卷整合为卷组(VG)。卷组就已经可以动态地调整大小了,可以把物理分区加入卷组,也可以把物理分区从卷组中删除。
  4. 把卷组再划分为逻辑卷(LV),当然逻辑卷也是可以直接调整大小的。我们说逻辑卷可以想象为分区,所以也需要格式化和挂载。

创建 LVM 的过程,会按照以上步骤,在后续章节中逐个讲解。

其实,在安装 Linux 系统时,我们采用的图形安装界面就可以直接把硬盘配置成 LVM(RAID 也可以在安装时直接配置),但当时我们只分配了基本分区。那是因为 LVM 最主要的作用是调整分区大小,所以就算在安装时已经安装了 LVM,我们还是需要学习 LVM 的命令(后续章节会详解介绍)。

 

 

11.11 Linux PV物理卷

 

虽然使用图形界面方式建立 LVM 更加方便,但是 LVM 最主要的作用是在不丢失数据合不停机的情况下调整分区大小,所以我们一定会在系统安装完成之后,使用命令模式进行 LVM 调整。

第一步,就是要建立所需的物理分区,创建方式就是使用 fdisk 交互命令。需要注意的是,分区的系统 ID 不再是 Linux 默认的分区 ID 83,而要改成 LVM 的 ID 8e。在 /dev/sdb 硬盘中还有空闲空间,在这块硬盘中新建立 3 个分区,每 个分区的大小为 1GB。命令如下:

[root@localhost ~]# fdisk /dev/sdb #建立分区的命令省略
Command {m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000ebd
Device Boot Start End Blocks Id System
/dev/sdbl 1 65 522081 83 Linux
/dev/sdb2 66 2610 20442712+ 5 Extended
/dev/sdb5 66 197 1060258+ 83 Linux
/dev/sdb6 198 329 1060258+ 83 Linux
/dev/sdb7 330 461 1060258+ 83 Linux
#建立了/dev/sdb5 ~ 7三个分区
Command (m for help): t
Partition number (1-7): 5
Hex code (type L to list codes): 8e
Changed system type of partition 5 to 8e (Linux LVM)
#把/dev/sdb5的分区ID改为8e,其他两个分区照做,改好后,查询结果如下:
Command (m for help): p
Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000ebd
Device Boot Start End Blocks Id System
/dev/sdb1 1 65 52.2081 83 Linux
/dev/sdb2 66 2610 20442712+ 5 Extended
/dev/sdb5 66 197 1060258+ 8e Linux LVM
/dev/sdb6 198 329 1060258+ 8e Linux LVM
/dev/sdb7 330 461 1060258+ 8e Linux LVM #保存退出
[root@localhost ~]# partprobe #记得重新读取分区表,否则重启系统

建立物理卷

建立物理卷的命令如下:

[root@localhost ~]# pvcreate [设备文件名]

在建立物理卷时,我们既可以把整块硬盘都建立成物理卷,也可以把某个分区建立成物理卷。如果要把整块硬盘都建立成物理卷,则命令如下:

[root@localhost ~]# pvcreate /dev/sdb

在我们的使用中要把分区建立成物理卷,所以执行以下命令:

[root@localhost ~]# pvcreate /dev/sdb5
Writing physical volume data to disk "/dev/sdb5" Physical volume "/dev/sdb5" successfully created
[root@localhost ~]# pvcreate /dev/sdb6
Writing physical volume data to disk "/dev/sdb6" Physical volume "/dev/sdb6" successfully created
[root@localhost ~]# pvcreate /dev/sdb7
Writing physical volume data to disk "/dev/sdb7" Physical volume 7dev/sdb7' successfully created

查看物理卷

查看物理卷的命令有两个,第一个是 pvscan,用来查询系统中哪些硬盘或分区是物理卷。命令如下:

[root@localhost ~]# pvscan
PV /dev/sdb5 Ivm2 [1.01 GiB]
PV /dev/sdb6 Ivm2 [1.01 GiB]
PV /dev/sdb7 Ivm2 [1.01 GiB]
Total: 3 [3.03 GiB] /in no VG: 0 [0 ] / in no VG: 3 [3.03 GiB]

可以看到,在我们的系统中,/dev/sdb5~7 这三个分区是物理卷。最后一行的意思是:共有 3 个物理卷[大小]/使用了 0 个卷[大小]/空闲 3 个卷[大小]。

第二个查询命令是 pvdisplay,它可以查看到更详细的物理卷状态,命令如下:

[root@localhost ~]# pvdisplay
"/dev/sdb5" is a new physical volume of "1.01 GiB"
—NEW Physical volume 一
PV Name /dev/sdb5
#PV名
VG Name
#属于的VG名,还没有分配,所以空白
PV Size 1.01 GiB
#PV 的大小
Allocatable NO
#是否已经分配
PE Size 0
#PE大小,因为还没有分配,所以PE大小也没有指定
Total PE 0
#PE总数
Free PE 0
#空闲 PE数
Allocated PE 0
#可分配的PE数
PV UUID CEsVz3-t0sD-e1w0-wkHZ-iaLq-06aV-xtQNTB
#PV的UUID
…其它两个PV省略…

删除物理卷

如果不再需要物理卷,则使用 pvremove 命令删除,命令如下:

[root@localhost ~]# pvremove /dev/sdb7
Labels on physical volume "/dev/sdb7" successfully wiped
#当然,在我们的使中还要用到/dev/sdb7物理卷,所以实验完成后,记得把它再添加回来

在删除物理卷时,物理卷必须不属于任何卷组,也就是需要先将物理卷从卷组中删除,再删除物理卷。其实所有的删除就是把创建过程反过来,建立时不能少某个步骤,删除时也同样不能跳过某一步直接删除。

 

11.12 Linux VG卷组

 

前面章节中,物理分区已经建立,同时也把物理分区建立成了逻辑卷,按照步骤,接下来就建立卷组了。

前面说过,可以把卷组想象成基本分区中的硬盘,是由多个物理卷组成的。卷组就已经可以动态地调整空间大小了,当卷组空间不足时,可以向卷组中添加新的物理卷。

建立卷组

建立卷组使用的命令是 vgcreate,具体命令格式如下:

[root@localhost ~]# vgcreate [-s PE 大小] 卷组名 物理卷名

[-s PE 大小] 选项的含义是指定 PE 的大小,单位可以是 MB、GB、TB 等。如果不写,则默认 PE 大小是 4MB。这里的卷组名指的就是要创建的卷组的名称,而物理卷名则指的是希望添加到此卷组的所有硬盘区分或者整个硬盘。

我们有三个物理卷 /dev/sdb5~7,先把 /dev/sdb5 和 /dev/sdb6 加入卷组,留着 /dev/sdb7 一会实验调整卷组大小,命令如下:

[root@localhost ~]# vgcreate -s 8MB scvg /dev/sdb5 /dev/sdb6
Volume group "scvg" successfully created
我们把/dev/sdb和/dev/sdb6两个物理卷加入了卷组scvg,并指定了PE的大小是8MB

激活卷组

卷组创建完毕后,可以通过 vgchange 命令来激活卷组,而无法重启系统。

vgchange 命令的基本格式如下:

#激活卷组
[root@localhost ~]# vgchange -a y 卷组名
#停用卷组
[root@localhost ~]# vachange -a n 卷组名

通过使用 vgchange 命令,我们可以激活 scvg 卷组。

查看卷组

查看卷组的命令同样有两个:vgscan 命令主要用于查看系统中是否有卷组;而 vgdisplay 命令则用于查看卷组的详细状态。命令如下:

[root@1ocalhost ~]# vgscan
Reading all physical volumes. This may take a while...
Found volume group "scvg" using metadata type lvm2 #scvg卷组确实存在
[root@localhost ~]# vgdisplay
---Volume group ---
VG Name scvg 卷组名
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
#卷组访问状态
VG Status resizable
#卷组状态
MAX LV 0
#最大逻辑卷数
Cur LV 0
Open LV 0
Max PV 0
#最大物理卷数
Cur PV 2
#当前物理卷数
Act PV 2
VG Size 2.02 GiB
#卷组大小
PE Size 8.00 MiB
#PE大小
Total PE 258
#PE总数
Alloc PE / Size 0/0
#已用 PE 数量/大小
Free PE / Size 258 / 2.02GiB
#空闲PE数量/大小
VG UUID Fs0dPf-LV7H-0Ir3-rthA-3UxC-LX5c-FLFriJ

增加卷组容量

我们现在要把 /dev/sdb7 加入卷组,使用的命令是 vgextend。命令如下:

[root@localhost ~]# vgextend scvg /dev/sdb7
Volume group "scvg" successfully extended
#把/dev/sdb7物理卷也加入scvg卷组
[root@localhost ~]# vgdisplay
---Volume group ---
VG Name scvg
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 3
Act PV 3
VG Size 3.02 GiB
#卷组容量增加
PE Size 8.00 MiB
Total PE 387
#PE 总数增加
Alloc PE / Size 0/0
Free PE / Size 387 / 3.02 GiB
VG UUID Fs0dPf-LV7H-0Ir3-rthA-3UxC-LX5c-FLFriJ

减少卷组容量

既然可以增加卷组容量,当然也可以减少卷组容量,我们使用 vgreduce 命令在卷组中删除物理卷。命令如下:

[root@localhost ~]# vgreduce scvg /dev/sdb7
Removed "/dev/sdb7" from volume group "scvg"
#在卷组中删除/dev/sdb7物理卷
[root@localhost ~]# vgreduce -a
#删除所有未使用的物理卷

当然,删除之后记得再添加回来,以便下面再用于实验。

删除卷组

删除卷组的命令是 vgremove。命令如下:

[root@localhost ~]# vgremove scvg
Volume group "scvg" successfully removed

只有在删除卷组之后,才能删除物理卷。还要注意的是,scvg 卷组中还没有添加任何逻辑卷,如果拥有了逻辑卷,则记得先删除逻再删除卷组。再次强调,删除就是安装的反过程,每一步都不能跳过。

当然,删除之后记得再建立回来,否则逻辑卷的实验无法完成。命令如下:

[root@localhost ~]# vgcreate -s 8MB scvg /dev/ sdb5 /dev/sdb6 /dev/sdb7
Volume group "scvg" successfully created
#这次三个物理卷就一起加入卷组了

 

11.13 Linux LV逻辑卷

 

本节讲解如何将卷组划分为逻辑卷,我们可以把逻辑卷想象成分区,那么这个逻辑卷当然也需要被格式化和挂载。另外,逻辑卷也是可以动态调整大小的,而且数据不会丟失,也不用卸载逻辑卷。

建立逻辑卷

我们现在已经建立了 3GB 大小的卷组 scvg,接下来需要在卷组中建立逻辑卷。命令格式如下:

[root@localhost ~]# lvcreate [选项] [-n 逻辑卷名] 卷组名

选项:

  • -L 容量:指定逻辑卷大小,单位为 MB、GB、TB 等;
  • -l 个数:按照 PE 个数指定逻辑卷大小,这个参数需要换算容量,太麻烦;
  • -n 逻辑卷名:指定逻辑卷名;


我们建立一个 1.5GB 大小的 lamplv 逻辑卷,命令如下:

[root@localhost ~]# lvcreate -L 1.5G -n lamplv scvg
Logical volume "lamplv" created
#在scvg卷组中建立一个1.5GB大小的lamplv逻辑卷


建立完逻辑卷,还要在格式化和挂载之后才能正常使用。格式化和挂载命令与操作普通分区时是一样的,不过需要注意的是,逻辑卷的设备文件名是"/dev/卷组名/逻辑卷名",如逻辑卷 lamplv 的设备文件名就是"/dev/scvg/lamplv"。具体命令如下:

[root@localhost ~]# mkfs -t ext4 /dev/scvg/lamplv
#格式化
[root@localhost ~]# mkdir /disklvm
[root@localhost ~]# mount /dev/scvg/lamplv /disklvm/

#建立挂载点,并挂载
[root@localhost ~]# mount
…省略部分输出…
/dev/mapper/scvg-lamplv on /disklvm type ext4(rw)
#已经挂载了

当然,如果需要开机后自动挂载,则要修改 /etc/fstab 文件。

查看逻辑卷

查看命令同样有两个,第一个命令 lvscan 只能看到系统中是否拥有逻辑卷,命令如下:

[root@localhost ~]# lvscan
ACTIVE '/dev/scvg/lamplv' [1.50 GiB] inherit
#能够看到激活的逻辑卷,大小是1.5GB


第二个命令 lvdisplay 可以看到逻辑卷的详细信息,命令如下:

[root@localhost ~]# lvdisplay
---Logical volume---
LV Path /dev/scvg/lamplv
逻辑卷的设备文件名
LV Name lamplv
#逻辑卷名
VG Name scvg
#所属的卷组名
LV UUID 2kyKmn-Nupd-CldB-8ngY-NsI3-b8hV-QeUuna
LV Write Access read/write
LV Creation host, time localhost, 2013-04-18 03:36:39 +0800
LV Status available
# open 1
LV Size 1.50 GiB
#逻辑卷大小
Current LE 192
Segments 2
Allocation inherit
Read ahead sectors auto
-currently set to 256
Block device 253:0

调整逻辑卷大小

我们可以使用 lvresize 命令调整逻辑卷的大小,不过我们一般不推荐减少逻辑卷的空间,因为这非常容易导致逻辑卷中的文件系统的数据丟失。所以,除非我们已经备份了逻辑卷中的数据,否则不要减少逻辑卷的空间。

lvresize 命令格式如下:

[root@localhost ~]# lvresize [选项] 逻辑卷的设备文件名

选项:

  • -L 容量:安装容量调整大小,单位为 KB、GB、TB 等。使用 + 増加空间,- 代表减少空间。如果直接写容量,则代表设定逻辑卷大小为指定大小;
  • -l 个数:按照 PE 个数调整逻辑卷大小;


我们先在 /disklvm 分区中建立一些测试文件,一会儿调整完大小,再看看数据是否丟失了。

[root@localhost ~]# cd /disklvm/
[root@localhost disklvm]# touch testf
[root@localhost disklvm]# mkdir testd
[root@localhost disklvm]# ls

lost+found testd testf

lamplv 逻辑卷的大小是 1.5GB,而 scvg 卷组中还有 1.5GB 的空闲空间,那么增加 lamplv 逻辑卷的大小到 2.5GB。命令如下:

[root@localhost disklvm]# lvresize -L 2.5G /dev/scvg/lamplv
Extending logical volume lamplv to 2.50 GiB Logical volume lamplv successfully resized
#增加lamplv逻辑卷的大小到2. 5GB,当然命令也可以这样写
[roots localhost disklvm] # lvresize -L +1G /dev/scvg/lamplv
[root@localhost disklvm]# lvdisplay

---Logical volume ---
LV Path /dev/scvg/lamplv
LV Name lamplv
VG Name scvg
LV UUID 2kyKmn-Nupd-CldB-8ngY-Ns13-b8hV-QeUuna
LV Write Access read/write
LV Creation host, time localhost, 2013-04-18 03:36:39 +0800 LV Status available
# open 1
LV Size 2.50 GiB
#大小改变了
Current LE 320
Segments 3
Allocation inherit
Read ahead sectors auto
-currently set to 256
Block device 253:0


逻辑卷的大小已经改变了,但是好像有如下一些问题:

[root@localhost disklvm]# df -h /disklvm/
文件系统 容量 已用 可用 已用% %挂载点
/dev/mapper/scvg-lamplv 1.5G 35M 1.4G 3%/ disklvm

怎么 /disklvm 分区的大小还是 1.5GB 啊?刚刚只是逻辑卷的大小改变了,如果要让分区使用这个新逻辑卷,则还要使用 resize2fs 命令来调整分区的大小。不过这里就体现出了 LVM 的优势:我们不需要卸载分区,直接就能调整分区的大小。

resize2fs命令的格式如下:

[root@localhost ~]# resize2fs [选项] [设备文件名] [调整的大小]

选项:

  • -f:强制调整;
  • 设备文件名:指定调整哪个分区的大小;
  • 调整的大小:指定把分区调整到多大,要加 M、G 等单位。如果不加大小,则会使用整个分区;


我们已经把逻辑卷调整到 2.5GB,这时就需要把整个逻辑卷都加入 /disklvm 分区中,命令如下:

[root@localhost ~]# resize2fs /dev/scvg/lamplv
resize2fs 1.41.12(17-May-2010)
Filesystem at /dev/scvg/lamplv is mounted on/ disklvm; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of/dev/scvg/lamplv to 655360 (4k) blocks.
The filesystem on /dev/scvg/lamplv is now 655360 blocks long.
#已经调整了分区大小
[root@localhost ~]# df -h /disklvm/
文件系统 容量 已用 可用 已用% %挂载点
/dev/mapper/scvg-lamplv 2.5G 35M 2.4G 2% /disklvm
#分区大小已经是2.5GB 了
[root@localhost ~]# ls /disklvm/
lost+found testd testf
#而且数据并没有丟失

如果要减少逻辑卷的容量,则只需把增加步骤反过来再做一遍就可以了。不过我们并不推荐减少逻辑卷的容量,因为这有可能导致数据丟失。

删除逻辑卷

删除了逻辑卷,其中的数据就会丟失,所以要确定你真的需要删除这个逻辑卷。命令格式如下:

[root@localhost ~]#lvremove 逻辑卷的设备文件名

我们删除 lamplv 逻辑卷,记得在删除时要先卸载。 命令如下:

[root@localhost ~]# umount /dev/scvg/lamplv
[root@localhost ~]# Ivremove /dev/scvg/lamplv

Do you really want to remove active logical volume lamplv? [y/n]: n
#如果这里选择y,就会执行删除操作,逻辑卷内的所有数据都会被清空
Logical volume lamplv not removed

 

11.14 Linux LVM(逻辑卷管理)的删除

 

创建好 LVM 之后,如果经过一段时间的运行,我们发现 LVM 技术并未像有些人吹嘘的那样为系统的管理和维护工作带来很大的方便,可以手动删除它。

与创建 LVM 的顺序恰好相反,在释放 LVM 所占磁盘空间的操作中,首先要删除卷组上所定义的逻辑卷(LV),之后删除这个卷组(VG),最后才能删除所有的物理卷(PV)。接下来,还是通过个实例来演示这些操作的全过程。

首先,要删除一个逻辑卷,就必须先将这个逻辑卷从系统中卸载掉。例如,使用 umount 命令卸载挂载在 /disklvm 目录上的逻辑卷,执行命令如下:

[root@localhost ~]# umount /disklvm

随后,你需要使用如下的 df 系统再次列出所有挂载的文件系统信息:

[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 8.7G 7.0G 1.3G 85% /
......
/dev/md0 1004M 18M 936M 2% /oradata

从显示结果中可以看到,再也找不到任何挂载的逻辑卷了,这表明挂载在 /disklvm 目录上的逻辑卷 lamplv 已经被卸载了。

现在,就可使用 lvremove 命令移除设备文件 /dev/scvg/lamplv 所对应的逻辑卷了。在系统提示处输入 【y】 确认要移除 lamplv 逻辑卷,执行命令如下所示:

[root@localhost ~]# lvremove /dev/scvg/lamplv
Do you really want to remove active logical volume "lamplv"? [y/n]:y
Logical volume "lamplv" successfully removed

之后,你可以使用 vgdisplay 命令再次列出 scvg 卷组的详细信息:

[root@localhost ~]# vgdisplay scvg
---Volume group ---
VG Name scvg
......
Cur LV 0
Open LV 0
Max PV 0
......

通过对比你会发现,Cur LV 和 Open LV 的值,都从原来的 1 变为了 0,这就进一步证实了原来在 scvg 卷组上定义的逻辑卷已经全都被删除了。

接下来, 可以使用 vgremove 命令删除 scvg 卷组,执行命令如下:

[root@localhost ~]# vgremove scvg
Volume group "scvg" successfully removed

可以看到,vgdog 卷组己经被成功地删除了,但是为了慎重起您可以使用 vgdisplay 再次列出 vgdog 卷组的详细信息,如下所示:

[root@localhost ~]# vgdisplay scvg
Volume group "scvg" not found

显示结果表明,系统已经找不到 scvg 卷组了,这就进一步证实了 scvg 卷组已经被删除了。

注意,一些 Linux 教程认为在删除了卷组之后就算完成了全部所需的操作,但是最好还是要移除所有分区上的物理卷的卷标。因此,最好使用 pvremove 命令同时移除 /dev/sdb5、 /dev/sdb6 和 /dev/sdb7 这 3 个分区上的物理卷的卷标,执行命令如下:

[root@localhost ~]# pvremove /dev/sdb5 /dev/sdb6 /dev/sdb7
Labels on physical volume "/dev/sdb5" successfully wiped
Labels on physical volume "/dev/sdb6" successfully wiped
Labels on physical votume "/dev/sdb7" successfuily wiped

完成了以上操作之后,我们不但删除了逻辑卷和卷组,而且还释放了物理卷所使用的所有磁盘空间,即将这些磁盘空间归还给了 Linux 系统。

 

 

11.15 Linux RAID(磁盘阵列)完全攻略

 

LVM 最大的优势在于可以在不卸载分区和不损坏数据的情况下进行分区容量的调整,但是万一硬盘损坏了,那么数据一定会丟失。 本节讲的 RAID(磁盘阵列)的优势在于硬盘读写性能更好,而且有一定的数据冗余功能。

RAID 功能已经内置在 Linux 2.0及以后的内核中,为了使用这项功能,还需要特定的工具来管理 RAID,在绝对多数 Linux 发行版本中,更多的是使用 mdadm,读者可以自行下载并安装这个工具。

RAID 简介

RAID(Redundant Arrays of Inexpensive Disks,磁盘阵列),翻译过来就是廉价的、具有冗余功能的磁盘阵列。其原理是通过软件或硬件将多块较小的分区组合成一个容量较大的磁盘组。这个较大的磁盘组读写性能更好,更重要的是具有数据冗余功能。

那什么是数据冗余呢?从字面上理解,冗余就是多余的、重复的。在磁盘阵列中,冗余是指由多块硬盘组成一个磁盘组,在这个磁盘组中,数据存储在多块硬盘的不同地方,这样即使某块硬盘出现问题,数据也不会丟失,也就是磁盘数据具有了保护功能。

读者也可以这样理解,RAID 用于在多个硬盘上分散存储数据,并且能够“恰当”地重复存储数据,从而保证其中某块硬盘发生故障后,不至于影响整个系统的运转。RAID 将几块独立的硬盘组合在一起,形成一个逻辑上的 RAID 硬盘,这块“硬盘”在外界(用户、LVM 等)看来,和真实的硬盘一样,没有任何区别。

RAID 的组成可以是几块硬盘,所以我们在讲解原理时使用硬盘举例,但是大家要知道不同的分区也可以组成 RAID。

RAID 根据组合方式的不同,有多种设计解决方案,以下介绍几种常见的 RAID 方案(RAID级别)。

RAID 0

RAID 0 也叫 Stripe 或 Striping(带区卷),是 RAID 级别中存储性能最好的一个。RAID 0 最好由相同容量的两块或两块以上的硬盘组成。如果组成 RAID 0 的两块硬盘大小不一致,则会影响 RAID 0 的性能。

这种模式下会先把硬盘分隔出大小相等的区块,当有数据需要写入硬盘时,会把数据也切割成相同大小的区块,然后分别写入各块硬盘。这样就相当于把一个文件分成几个部分同时向不同的硬盘中写入,数据的读/写速度当然就会非常快。

从理论上讲,由几块硬盘组成 RAID 0,比如由 3 块硬盘组成 RAID 0,数据的写入速度就是同样的数据向一块硬盘中写入速度的3倍。我们画一张 RAID 0 的示意图,如图 1 所示。


11. Linux高级文件系统管理(2)_第2张图片
图 1 RAID 0 示意图


解释一下这张示意图。我们准备了 3 块硬盘组成了 RAID 0,每块硬盘都划分了相等的区块。当有数据要写入 RAID 0 时,首先把数据按照区块大小进行分割,然后再把数据依次写入不同的硬盘。每块硬盘负责的数据写入量都是整体数据的 1/3,当然写入时间也只有原始时间的 1/3。所以,从理论上讲,由几块硬盘组成 RAID 0,数据的写入速度就是数据只写入一块硬盘速度的几倍。

RAID 0 的优点如下:

  • 通过把多块硬盘合并成一块大的逻辑硬盘,实现了数据跨硬盘存储。
  • 通过把数据分割成等大小的区块,分别存入不同的硬盘,加快了数据的读写速度。数据的读/写性能是几种 RAID 中最好的。
  • 多块硬盘合并成 RAID 0,几块小硬盘组成了更大容量的硬盘,而且没有容量损失。RAID 0 的总容量就是几块硬盘的容量之和。


RAID 0 有一个明显的缺点,那就是没有数据冗余功能,RAID 0 中的任何一块硬盘损坏,RAID 0 中所有的数据都将丟失。也就是说,由几块硬盘组成 RAID 0,数据的损毁概率就是只写入一块硬盘的几倍。

我们刚刚说了,组成 RAID 0 的硬盘的大小最好都是一样的。那有人说我只有两块不一样大小的硬盘,难道就不能组成 RAID 0 吗?

答案是可以的。假设有两块硬盘,一块大小是 100GB,另一块大小是 200GB。由这两块硬盘组成 RAID 0,那么当最初的 200G 数据写入时,是分别存放在两块硬盘当中的;但是当数据大于 200GB 之后,第一块硬盘就写满了,以后的数据就只能写入第二块硬盘中,读/写性能也就随之下降了。

一般不建议企业用户使用 RAID 0,因为数据损毁的概率更高。如果对数据的读/写性能要求非常高,但对数据安全要求不高时,RAID 0 就非常合适了。

RAID 1

RAID 1也叫 Mirror 或 Mirroring(镜像卷),由两块硬盘组成。两块硬盘的大小最好一致,否则总容量以容量小的那块硬盘为主。RAID 1 就具备了数据冗余功能,因为这种模式是把同一份数据同时写入两块硬盘。

比如有两块硬盘,组成了 RAID 1,当有数据写入时,相同的数据既写入硬盘 1,也写入硬盘 2。这样相当于给数据做了备份,所以任何一块硬盘损坏,数据都可以在另一块硬盘中找回。RAID 1 的示意图如图 2 所示。


11. Linux高级文件系统管理(2)_第3张图片
图 2 RAID 1 示意图


RAID 1 具有了数据冗余功能,但是硬盘的容量却减少了 50%,因为两块硬盘当中保存的数据是一样的,所以两块硬盘际上只保存了一块硬盘那么多的数据,这也是我们把 RAID 1 称作镜像卷的原因。

RAID 1 的优点如下:

  • 具备了数据冗余功能,任何一块硬盘出现故障,数据都不会丟失。
  • 数据的读取性能虽然不如RAID 0,但是比单一硬盘要好,因为数据有两份备份在不同的硬盘上,当多个进程读取同一数据时,RAID会自动分配读取进程。


RAID 1 的缺点也同样明显:

  • RAID 1 的容量只有两块硬盘容量的 50%,因为每块硬盘中保存的数据都一样。
  • 数据写入性能较差,因为相同的数据会写入两块硬盘当中,相当于写入数据的总容量变大了。虽然 CPU 的速度足够快,但是负责数据写入的芯片只有一个。

RAID 10 或 RAID 01

我们发现,RAID 0 虽然数据读/写性能非常好,但是没有数据冗余功能;而 RAID 1 虽然具有了数据冗余功能,但是数据写入速度实在是太慢了(尤其是软 RAID)。

那么,我们能不能把 RAID 0 和 RAID 1 组合起来使用?当然可以,这样我们就即拥有了 RAID 0 的性能,又拥有了 RAID 1 的数据冗余功能。

我们先用两块硬盘组成 RAID 1,再用两块硬盘组成另一个 RAID 1,最后把这两个 RAID 1组成 RAID 0,这种 RAID 方法称作 RAID 10。那先组成 RAID 0,再组成 RAID 1 的方法我们作 RAID 01。我们通过示意图 3 来看看 RAID 10。


11. Linux高级文件系统管理(2)_第4张图片
图 3 RAID 10 示意图


我们把硬盘 1 和硬盘 2 组成了第一个 RAID 1,把硬盘 3 和硬盘 4 组成了第二个 RAID 1,这两个 RAID 1组成了 RAID 0。因为先组成 RAID 1,再组成 RAID 0,所以这个 RAID 是 RAID 10。

当有数据写入时,首先写入的是 RAID 0(RAID 0 后组成,所以数据先写入),所以数据 1 和数据 3 写入了第一个 RAID 1,而数据 2 和数据 4 写入了第二个 RAID 1。当数据 1 和数据 3 写入第一个 RAID 1 时,

因为写入的是 RAID 1,所以在硬盘 1 和硬盘 2 中各写入了一份。数据 2 和数据 4 也一样。

这样的组成方式,既有了 RAID 0 的性能优点,也有了 RAID 1 的数据冗余优点。但是大家要注意,虽然我们有了 4 块硬盘,但是由于 RAID 1 的缺点,所以真正的容量只有 4 块硬盘的 50%,另外的一半是用来备份的。

RAID 5

RAID 5 最少需要由 3 块硬盘组成,当然硬盘的容量也应当一致。当组成 RAID 5 时,同样需要把硬盘分隔成大小相同的区块。当有数据写入时,数据也被划分成等大小的区块,然后循环向 RAID 5 中写入。

每次循环写入数据的过程中,在其中一块硬盘中加入一个奇偶校验值(Parity),这个奇偶校验值的内容是这次循环写入时其他硬盘数据的备份。当有一块硬盘损坏时,采用这个奇偶校验值进行数据恢复。通过示意图来看看 RAID 5 的存储过程,如图 4 所示。


11. Linux高级文件系统管理(2)_第5张图片
图 4 RAID 5 示意图


在这张示意图中,我们使用三块硬盘组成了 RAID 5。当有数据循环写入时,每次循环都会写入一个奇偶校验值(Parity),并且每次奇偶校验值都会写入不同的硬盘。这个奇偶校验值就是其他两块硬盘中的数据经过换算之后产生的。因为每次奇偶校验值都会写入不同的硬盘,所以任何一块硬盘损坏之后,都可以依赖其他两块硬盘中保存的数据恢复这块损坏的硬盘中的数据。

需要注意的是,每次数据循环写入时,都会有一块硬盘用来保存奇偶校验值,所以在 RAID 5 中可以使用的总容量是硬盘总数减去一块的容量之和。

比如,在这张示意图中,由三块硬盘组成了 RAID 5,但是真正可用的容量是两块硬盘的容量之和,也就是说,越多的硬盘组成 RAID 5,损失的容量占比越小,因为不管由多少块硬盘组成 RAID 5,奇偶校验值加起来只占用一块硬盘。而且还要注意,RAID 5 不管是由几块硬盘组成的,只有损坏一块硬盘的情况才能恢复数据,因为奇偶校验值加起来只占用了一块硬盘,如果损坏的硬盘超过一块,那么数据就不能再恢复了。

RAID 5 的优点如下:

  • 因为奇偶校验值的存在,RAID 5 具有了数据冗余功能。
  • 硬盘容量损失比 RAID 1 小,而且组成 RAID 5 的硬盘数量越多,容量损失占比越小。
  • RAID 5的数据读/写性能要比 RAID 1 更好,但是在数据写入性能上比 RAID 0 差。


RAID 5 的缺点如下:

  • 不管由多少块硬盘组成 RAID 5,只支持一块硬盘损坏之后的数据恢复。
  • RAID 5 的实际容量是组成 RAID 5 的硬盘总数减去一块的容量之和。也就是有一块硬盘用来保存奇偶校验值,但不能保存数据。


从总体上来说,RAID 5 更像 RAID 0 和 RAID 1 的折中,性能比 RAID 1 好,但是不如 RAID 0;数据冗余比 RAID 0 好,而且不像 RAID 1 那样浪费了 50% 的硬盘容量。

软 RAID 和硬 RAID

我们要想在服务器上实现 RAID,可以采用磁盘阵列卡(RAID 卡)来组成 RAID,也就是硬 RAID。RAID 卡上有专门的芯片负责 RAID 任务,因此性能要好得多,而且不占用系统性能,缺点是 RAID 卡比较昂贵。

如果我们既不想花钱又想使用 RAID,那就只能使用软 RAID 了。软 RAID 是指通过软件实现 RAID 功能,没有多余的费用,但是更加耗费服务器系统性能,而数据的写入速度比硬 RAID 慢。

 

11.16 使用图形界面来配置RAID

 

RAID 配置起来要比 LVM 方便,因为它不像 LVM 那样分了物理卷、卷组和逻辑卷三层,而且每层都需要配置。我们在图形安装界面中配置 RAID 1和 RAID 5,先来看看 RAID 1 的配置方法。

RAID 1 配置

配置 RAID 1 时同样需要启动图形安装程序,在分区界面进行配置,如图 1 所示。


11. Linux高级文件系统管理(2)_第6张图片
图 1 选择驱动器


我们已经知道,可以使用相同大小的硬盘配置 RAID,也可以使用相同大小的分区配置 RAID,方法都是一样的。我们在实验中就使用相同大小的两个分区创建 RAID 1 吧。

在选择驱动器界面单击"创建"按钮,进入"生成存储"界面,如图 2 所示。


11. Linux高级文件系统管理(2)_第7张图片
图 2 生成存储


在"生成存储"界面中,在"创建软件 RAID"选项组中选择"RAID 分区"单选按钮,单击"创建"按钮,进入"添加分区"界面,如图 3 所示。


11. Linux高级文件系统管理(2)_第8张图片
图 3 添加分区


我们要创建两个 2GB 大小的分区,用来组成 RAID 1。所以,在"添加分区"界面中,文件系统类型选择"software RAID (软RAID)",分区大小指定为 2GB。单击"确定"按钮后,第一个 RAID 分区就建立完成了。同样,第二个 RAID 分区也这样建立。两个 RAID 分区都建立完成后,如图 4 所示。


11. Linux高级文件系统管理(2)_第9张图片
图 4 RAID分区建立完成


这时再单击"创建"按钮,进入"生成存储"界面,如图 5 所示。


11. Linux高级文件系统管理(2)_第10张图片
图 5 生成 RAID 存储


这时我们发现刚刚是灰色的不能选择的"RAID 设备"单选按钮已经可以选择了,证明我们现有的 RAID 分区具备了组成 RAID 设备的条件。我们选择"RAID 设备"单选按钮,然后单击"创建"按钮,就进入"创建 RAID 设备"界面,如图 6 所示。


11. Linux高级文件系统管理(2)_第11张图片
图 6 创建RAID设备


在这里,挂载点选择"/"分区,也就是说 / 分区是由两个等大小的分区组成的 RAID 1 设备,文件系统类型 选择"ext4",RAID设备选择"md0"(第一个 RAID 设备),RAID 级别选择"RAID1",同时记得勾选组成 RAID 1的两个分区 sda1 和 sda2。单击"确定"按钮,RAID 1 就建立完成了,如图 7 所示。


11. Linux高级文件系统管理(2)_第12张图片
图 7 RAID 1建立完成


这里需要注意,只有 / 分区是 RAID 1,其他分区还没有分配。而且要想正确地安装 Linux,最少还需要分配 swap 分区。

RAID 5配置

RAID 5 分配置和 RAID 1 的配置一致,只不过 RAID 1 只需要两个等大小的 RAID 分区,而 RAID 5 却需要最少三个等大小的 RAID 分区。我们先建立三个等大小的 RAID 分区,如图 8 所示。


11. Linux高级文件系统管理(2)_第13张图片
图 8 选择驱动器


接下来单击"创建"按钮,进入"生成存储"界面,如图 9 所示。


11. Linux高级文件系统管理(2)_第14张图片
图 9 生成存储


在这里同样需要选择"RAID 设备"单选按钮,然后单击"创建"按钮,进入"创建 RAID 设备"界面,如图 10 所示。


11. Linux高级文件系统管理(2)_第15张图片
图 10 创建 RAID 设备


在"创建 RAID 设备"界面中,挂载点仍然选择 / 分区,不过 RAID 级别选择的是 RAID 5,同时勾选组成 RAID 5 的三个分区,单击"确定"按钮,RAID 5 的 / 分区就建立完成了。

 

11.17 使用mdadm命令来配置RAID

 

图形界面确实方便,不过 RAID 和 LVM 一样,主要的应用还是在命令行当中,因为如果硬盘出现了数据损坏,总不能重新安装吧!

本节,我们学习在命令行界面中如何分配和使用 RAID,这次我们仍然使用相同大小的分区配置最为常见的 RAID 5。

建立分区

建立三个 2GB 大小的分区,构建 RAID 5。不过我们多建立了一个 2GB 大小的分区,这个分区用作备份分区。

备份分区的作用是什么呢? RAID 最大的好处就是具有数据冗余功能,当有一块硬盘或分区损坏时,数据不会丟失,只要插入新的硬盘或分区,依赖其他分区就会主动重建损坏的硬盘或分区中的数据。不过这仍然需要关闭服务器,手工插拔硬盘。

如果在组成 RAID 的时候就加入了备份硬盘或备份分区,那么当硬盘或分区损坏时,RAID 会自动用备份硬盘或备份分区代替损坏的硬盘或分区,然后立即重建数据,而不需要人为手工参与。这样就避免了服务器停机和人为手工参与,非常方便,唯一的问题就是需要多余的硬盘或分区作为备份设备。

也就是说,我们在这个实验中需要 4 个 2GB 大小的分区,其中 3 个组成 RAID 5,1 个作为备份分区。建立分区的过程这里不再详细解释,建立完分区之后,可以使用 fdisk -l 命令査看。命令如下:

[root@localhost ~]#fdisk -l
...省略部分输出...
Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xba384969
Device Boot Start End Blocks ld System
/dev/sdb1 1 2610 20964793+ 5 Extended
/dev/sdb5 1 262 2104452 83 Linux
/dev/sdb6 263 524 2104483+ 83 Linux
/dev/sdb7 525 786 2104483+ 83 Linux
/dev/sdb8 787 1048 2104483+ 83 Linux

我们建立了 /dev/sdb5、/dev/sdb6、/dev/sdb7 和 /dev/sdb8 共 4 个 2GB 大小的分区。

mdadm命令建立 RAID 5

建立 RAID 使用 mdadm 命令,命令格式如下:

[root@localhost ~]# mdadm [模式] [RAID设备文件名] [选项]

模式:

  • Assemble:加入一个已经存在的阵列;
  • Build:创建一个没有超级块的阵列;
  • Create:创建一个阵列,每个设备都具有超级块;
  • Manage:管理阵列,如添加设备和删除损坏设备;
  • Misc:允许单独对阵列中的设备进行操作,如停止阵列;
  • Follow or Monitor:监控RAID状态; Grow:改变RAID的容量或阵列中的数目;


选项:

  • -s,-scan:扫描配置文件或/proc/mdstat文件,发现丟失的信息;
  • -D,-detail:查看磁盘阵列详细信息;
  • -C,-create:建立新的磁盘阵列,也就是调用 Create模式;
  • -a,-auto=yes:采用标准格式建立磁阵列
  • -n,-raicklevices=数字:使用几块硬盘或分区组成RAID
  • -l,-level=级别:创建RAID的级别,可以是0,1,5
  • -x,-spare-devices=数字:使用几块硬盘或分区组成备份设备
  • -a,-add 设备文件名:在已经存在的RAID中加入设备
  • -r,-remove 设备文件名名:在已经存在的RAID中移除设备
  • -f,-fail设备文件名:把某个组成RAID的设备设置为错误状态
  • -S,-stop:停止RAID设备
  • -A,-assemble:按照配置文件加载RAID


我们准备创建的是 RAID 5,所以使用以下命令创建:

[root@localhost ~]# mdadm -create -auto=yes /dev/md0-level=5 \
-raid-devices=3 -spare-devices=1 /dev/sdb5/dev/sdb6 /dev/sdb7 /dev/sdb8

其中,/dev/md0 是第一个 RAID 设备的设备文件名,如果还有 RAID 设备,则可以使用 /dev/md[0~9] 来代表。我们建立了一个 RAID 5,使用了三个分区,并建立了一个备份分区。先查看一下新建立的 /dev/md0,命令如下:

[root@localhost ~]# mdadm --detail /dev/md0
/dev/md0:
#设备文件名
Version : 1.2
Creation Time : Tue Apr 23 23:13:48 2013
#创建时间
Raid Level : raid5
#RAID 级别
Array Size : 4206592 (4.01 GiB 4.31 GB) +RAID #总容量
Used Dev Size : 2103296 (2.01 GiB 2.15 GB)
#每个分区的容量
Raid Devices : 3
#组成 RAID 的设备数
Total Devices : 4
#总设备数
Persistence : Superblock is persistent
Update Time : Tue Apr 23 23:14:52 2013 State : clean
Active Devices : 3
#激活的设备数
Working Devices : 4
#可用的设备数
Failed Devices : 0
#错误的设备数
Spare Devices : 1
#备份设备数
Layout : left-symmetric
Chunk Size : 512K
Name : localhost.localdomain:0 (local to host localhost.localdomain) UOID : 15026b78:126a4930:89d8cf54:5bcb7e95 Events : 18
Number Major Minor RaidDevice State
0 8 21 0 active sync /dev/sdb5
1 8 22 1 active sync /dev/sdb6
4 8 23 2 active sync /dev/sdb7
#三个激活的分区
3 8 24 - spare /dev/sdb8
#备份分区


再查看一下 /proc/mdstat 文件,这个文件中也保存了 RAID 的相关信息。命令如下:

[root@localhost ~]# cat /proc/mdstat
Personalities:[raid6] [raid5] [raid4]
md0:active raid5 sdb9[4](S) sdb5[0] sdb8[3] sdb6[1]
#RAID名 级别 组成RAID的分区,[数字]是此分区在RAID中的顺序
#(S)代表备份分区
4206592 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
#总block数 等级是5 区块大小 阵列算法 [组成设备数/正常设备数]
unused devices:

格式化与挂载RAID

RAID 5 已经创建,但是要想正常使用,也需要格式化和挂载。格式化命令如下:

[root@localhost ~]# mkfs -t ext4 /dev/md0

挂载命令如下:

[root@localhost ~]# mkdir /raid
#建立挂载点
[root@localhost ~]# mount /dev/md0 /raid/
#挂载/dev/md0
[root@localhost ~]# mount
…省略部分输出…
/dev/md0 on /raid type ext4(rw)
#查看一下,已经正常挂载

生成mdadm配置文件

在 CentOS 6.x 中,mdadm 配置文件并不存在,需要手工建立。我们使用以下命令建立 /etc/mdadm.conf 配置文件:

[root@localhost ~]# echo Device /dev/sdb[5-8] >>/etc/mdadm.conf
#建立/etc/mdadm.conf配置立件,并把组成RAID的分区的设备文件名写入
#注意:如果有多个RAID,则要把所有组成RAID的设备都放入配置文件中;否则RAID设备重启后会丟失
#比如组成RAID 10,就既要把分区的设备文件名放入此文件中,也翻组成RAID 0的RAID 1设备文件名放入
[root@localhost ~]# mdadm -Ds >>/etc/mdadm.conf
#查询和扫描RAID信息,并追加进/etc/mdadm.conf文件
[root@localhost ~]# cat /etc/mdadm.conf
Device /dev/sdb5 /dev/sdb6 /dev/sdb7 /dev/sdb8
ARRAY /dev/md0 metadata: 1.2 spares=1 name=l(xalhost.localdomain:0 UUID=dd821fe5:8597b126:460a3afd:857c7989
#查看文件内容

设置开机后自动挂载

自动挂载也要修改 /etc/fstab 配置文件,命令如下:

[root@localhost ~]# vi /etc/fstab
/dev/mdO /raid
ext4 defaults 12
#加入此行

如果要重新启动,则一定要在这一步完成之后再进行,否则会报错。

启动或停止RAID

RAID 设备生效后,不用手工启动或停止。但是,如果需要卸载 RAID 设备,就必须手工停止 RAID。这里我们学习一下启动和停止 RAID 的方法。先看看停止命令:

[root@localhost ~]# mdadm -S /dev/md0
#停止/dev/md0设备

当然,如果要删除 RAID,则要非常小心,要把所有和 RAID 相关的内容全部删除,才能保证系统不报错。需要进行的步骤如下:

[root@localhost ~]# umount /dev/md0
#卸载RAID
[root@localhost ~】# vi /etc/fstab
/dev/md0 /raid ext4 defaults 12
#删除此行
[root@localhost ~]# mdadm -S /dev/md0
mdadm: stopped /dev/md0
#停止RAID
[root@localhost ~]# vi /etc/mdadm.conf
ARRAY /dev/md0 metadata: 1.2 spares=1 name=localhost.localdomain:0 UUID=dd821fe5:8597b126:460a3afd:857c7989
#删除或者注释此行

如果仅仅是停止,而不是删除,就没有这么麻烦了,只需先下载,再停止即可。那停止完成之后,怎么再启动呢?启动 RAID 的命令如下:

[root@localhost ~]# mdadm -As /dev/md0
mdadm: /dev/md0 has been started with 3 drives and 1 spare.
#启动/dev/md0
[root@localhost ~]# mount /dev/md0 /raid/
#启动RAID后,记得挂载

模拟分区出现故障

我们的 RAID 虽然配置完成了,但是它真的生效了吗?我们模拟磁盘报错,看看备份分区是否会自动代替错误分区。mdadm 命令有一个选项 -f,这个选项的作用就是把一块硬盘或分区变成错误状态,用来模拟 RAID 报错。命令如下:

[root@localhost ~]# mdadm /dev/mdO -f /dev/sdb7 mdadm: set /dev/sdb7 faulty in /dev/mdO、
#模拟/dev/sdb7分区报错
[root@1ocalhost ~】# mdadm -D /dev/mdO /dev/mdO:
...省略部分输出...
Active Devices : 2
Working Devices : 3
Failed Devices : 1
#1个设备报错了
Spare Devices : 1
...省略部分输出...
Number Major Minor RaidDevice State
0 8 21 0 active sync /dev/sdb5
1 8 22 1 active sync /dev/sdb6
3 8 24 2 spare rebuilding /dev/sdb8
#/dev/sdb8分区正在准备修复
4 8 23 - faulty spare /dev/sdb7
#/dev/sdb7已经报错了

要想看到上面的效果,査看时要快一点,否则修复就可能完成了。因为有备份分区的存在,所以分区损坏了,是不用管理员手工的。如果修复完成,再查看,就会出现下面的情况:

[root@localhost ~]# mdadm /dev/mdO
Number Major Minor RaidDevice State
0 8 21 0 active sync /dev/sdb5
1 8 22 1 active sync /dev/sdb6
3 8 24 2 active sync /dev/sdb8
4 8 23 - faulty spare /dev/sdb7

备份分区/dev/sdb8已经被激活,但是 /dev/sdb7分区失效。

移除错误分区

既然分区已经报错了,我们就把 /dev/sdb7 分区从 RAID 中删除。如果这是硬盘,就可以进行更换硬盘的处理了。

移除命令如下:

[root@localhost ~]# mdadm /dev/md0
-remove/dev/sdb7
mdadm: hot removed /dev/sdb7 from /dev/mdO

添加新的备份分区

既然分区已经报错,那么我们还需要加入一个新的备份分区,以备下次硬盘或分区出现问题。既然要加入新的备份分区,当然还需要再划分出一个 2GB 大小的分区出来,命令如下:

[root@localhost ~]#fdisk -l
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 *512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes 1512 bytes
Disk identifier: 0x151a68a9
Device Boot Start End Blocks Id System
/dev/sdb1 1 2610 20964793+ 5 Extended
/dev/sdb5 1 262 2104452 83 Linux
/dev/sdb6 263 524 2104483+ 83 Linux
/dev/sdb7 525 786 2104483+ 83 Linux
/dev/sdb8 787 1048 2104483+ 83 Linux
/dev/sdb9 1049 1310 2104483+ 83 Linux

我们新建了 /dev/sdb9 分区,然后把它加入 /dev/md0 作为备份分区,命令如下:

[root@localhost ~]# mdadm /dev/md0 -add /dev/sdb9
mdadm: added /dev/sdb9
#把/dev/sdb9加入/dev/md0
[root@localhost ~]# mdadm -D /dev/md0
...省略部分输出...
Number Major Minor RaidDevice State
0 8 21 0 active sync /dev/sdb5
1 8 22 1 active sync /dev/sdb6
3 8 24 2 active sync /dev/sdb8
4 8 25 - spare /dev/sdb9
#查看一下,/dev/sdb9已经变成了备份分区

 

 

 

你可能感兴趣的:(Ubuntu,linux)