linux软raid如何实现

52次阅读
没有评论

共计 23858 个字符,预计需要花费 60 分钟才能阅读完成。

自动写代码机器人,免费开通

丸趣 TV 小编给大家分享一下 linux 软 raid 如何实现,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

1 什么是 RAID,RAID 的级别和特点;

什么是 RAID 呢?全称是“A Case for Redundant Arrays of Inexpensive Disks (RAID)”,在 1987 年,由加州大学伯克利大学发表的论文而来,其实就是这个标题的缩写就是 RAID; 中译为“磁盘阵列”;

RAID 就是把几个物理磁盘组合在一起成为一个大的虚拟物理磁盘,主要目的和用途主要有:把若干小容量物理磁盘组成一个大容量虚拟存储设备(以前的物理磁盘的容量都比较小);提高物理存储效率(读、写),或提供冗余以提高数据存储的安全性。

根据应用方向的不同,RAID 也分不不同级别,有 LINEAR、RAID0、RAID1、RAID5、RAID10、RAID4、RAID6、MULTIPATH。常用的有 RAID0、RAID1、RAID5、RAID10(其实就是 0 +1)、LINEAR

1.1 什么是硬件 RAID 和软 RAID;

RAID 还分为硬件 RAID 和软件 RAID,硬件 RAID 是通过 RAID 卡来实现的,而软件 RAID 是通过软件来实现的;在企业级应用领域,大部份都是硬件 RAID。而软件 RAID 由于性价比高,大多被中小型企业所采用;

硬件 RAID 是通过 RAID 卡把若干同等容量大小的硬盘,根据使用方向的不同,聚合起来成为一个大的虚拟 RAID 设备(或 RAID0,或 RAID1, 或者 RAID5,或 RAID10……),如果每个硬盘容量不一致,以最小容量的硬盘为基础;它的成员是整个硬盘;

软 RAID 是软把若干同等容量大小的硬盘或分区,根据使用方向的不同,聚合起来成为一个大的虚拟 RAID 设备(或 RAID0,或 RAID1, 或者 RAID5,或 RAID10……),如果每个硬盘或分区容量不一致,以最小容量的硬盘或分区为基础。软 RAID 的成员是整个硬盘或分区;

RAID 总的来说还是应用在生产型项目领域中,一般在商用办公或个人娱乐应用并未被大规模采用。应有领域大多要求性价比级的低端服务器或 PC-SERVER;

1.2 RAID 的级别及特点;

RAID 有几种级别,LINEAR,RAID0 (striping), RAID1 (mirroring), RAID4, RAID5, RAID6, RAID10, MULTIPATH, and FAULTY. 其中我们常用有 RAID0、RAID1、RAID5、RAID10。

下面我们说说常用的 RAID0、RAID1、RAID5 以及 RAID10;

1.21 什么是软 RAID0 及特点;

RAID0 是把两个或两个以上的容量相同的硬盘或分区,通过 RAID 控制器(硬 RAID 是通过 RAID 卡来实现的,软 RAID 是通过软件来实现的),结合为一个在容量上是 RAID0 下成员的容量的总和,在写入时,要向每个硬盘或分区同时写入数据。

在硬 RAID 中,RAID0 的成员是以整个硬盘为单位的,把两个硬盘或两个以上的硬盘通过 RAID 卡绑定成为一个虚拟的磁盘设备,而每个硬盘就是 RAID0 的成员;

在软 RAID0 中,RAID0 的成员是整个硬盘或分区,容量是加入 RAID0 的所有成员容量的总和。在 RAID0 中每个成员的容量都是相同一致的。比如我们把 /dev/sdb、/dev/sdc、/dev/sdd 三个容量大小为 80G 的硬盘做成 RAID0,这时 RAID0 设备的容量就是三个硬盘的总和 80×3=240G。当然我们也可以,在写入数据时,系统要向每个硬盘同时写入数据,是以条块的形式写入。比如我们存一份数据 linuxsir.tar.gz 到 RAID0 的设备中,这份数据是分拆成若干份被分散的写入到 RAID0 中的每个成员中。只有 RAID0 中的每个成员正常运行,并且 RAID0 也正常运行的情况下,这份数据才是完整的。RAID0 中任何一个成员(硬盘分区)有有问题时,RAID0 便不能运行,同时数据也不是完整的;

RAID0 在读写速度上是比较快的,是普通不做 RAID 的两倍左右(注:实际速度和机器的硬件配置有关),所以 RAID0 常被用于对存储效率要求较高,但对数据安全性要求不高的应用解决方案中;

安全性:RAID0 中有任何一个成员出现故障,整个 RAID0 就不能被激活。数据不能保障;

1.22 什么是软 RAID1 及特点;

RAID1 就是把若干相同容量的硬盘或分区,成员与成员之间是镜像关系。在容量上,RAID1 设备是单个成员的容量。比如两个 80G 的硬盘做成 RAID1, 这个 RAID1 的设备容量仍是 80G。比如我们写入一个份数据 linuxsir.tar.bz2 到 RAID1 设备时,其实是向 RAID 的每个成员都写了一份。比如 RAID1 设备下有两个成员 /dev/sdb 和 /dev/sdc,我们写入 linuxsir.tar.bz2 到 RAID1 时,/dev/sdb 和 /dev/sdc 都有一份完整的 linuxsir.tar.bz2。所以 RAID1 是冗余的阵列,一般被用于安全性要求比较高的应用中。

因为 RAID1 在由于镜像冗余,所以磁盘利用效率并不高,或者说是“浪费”。这种方案相对来说性价比并不高,一般很少应用。数据读写效率要比 RAID0 慢。

安全性:RAID1 中只要有一个成员是健康的,RAID1 完全可以激活,而且数据绝对是完整安全的。如果所有的成员有故障,RAID1 也就报废了。哈哈,这不是废话吗?

1.23 什么是软 RAID5 及特点;

软 RAID5 也是冗余安全的,RAID5 是把至少三个硬盘或分区通过软件虚拟成为一个大的存储设备。在容量上是(n-1)x 单个硬盘(分区)容量,比如我们用三块 80G 硬盘做成 RAID5, 容量就是两块容量的和 160G。在写入上,数据被分拆成若干份,分别向 RAID5 的每个成员下写入。比如把 linuxsir.tar.bz2 写入 RAID5 时,要先把 linuxsir.tar.bz2 分拆成若干份,分别写入 RAID5 成员中。因为涉及到冗余,所以数据在读入速度上并不是很快,没办法和 RAID0 相比,但 RAID5 的写入数据速度没有 RAID1 和 RAID0 快,也没有不做 RAID 的磁盘写入速度要快;

因为 RAID5 在容量损失比较小,有冗余安全保障,另外写入速度比较快,从整体上来看,性价比比较高,所以被大范围内采用;

安全性:当 RAID5 中的成员中有一个发生故障时,RAID5 一样能启动和正常运行,只要 n -1(注 n 3)块硬盘或分区的不出故障,RAID5 上的数据就是安全,对于一个文件存到 RAID5 设备中,只有成员是 n -1(注 n 3)无故障时,这份文件才是完整的。比如 RAID5 有四个硬盘(或分区)做的,当一个硬盘或分区挂掉了,并不影响整个 RAID5 上数据的完整性和安全性。

1.24 什么是软 RAID10 及特点;

软 RAID10 也是冗余安全阵列,是 RAID0+ 1 的集成,RAID10 是把至少四个硬盘或分区通过软件虚拟成为一个大的存储设备。在容量是:n/2x 单个硬盘(分区)容量,比如我们用四块 80G 硬盘做成 RAID5, 容量就是两块容量的和 4 /2×80=160G。做 RAID10 所需要的硬盘或分区个数是偶数的。

RAID10, 有 RAID1 的镜像特点,还有 RAID0 的速度。可以这么理解 RAID10, 比如有四个硬盘做成的 RAID10, 过程是先把每两个硬盘做成 RAID1, 然后再两个 RAID1 的基础上再做成 RAID0。从理论上来说,RAID10 应该继承 RAID0 的速度和 RAID1 的冗余安全。但经过我在软 RAID0、RAID1、RAID5、RAID10 的测试过程中发现 RAID10 的写入速度是最慢的,测试方法是用超过 1G 的大文件几盘复制。结果发现速度由高低的顺序是:RAID0 不做 RAID RAID1 RAID5 RAID10

2 在 Linux 中,软 RAID 的创建和管理;

在 Linux 中,软 RAID 是通 mdadm 来创建和管理的,mdadm 是一个专用创建和管理 RAID 的软件,在 Linux 中,大多发行版本已经默认安装,mdadm 能创建任何级别的软 RAID;

在本节中,RAID 创建并不是目的,我们还要查看学会 RAID 的状态,启动、停止 RAID。还要学会使用 RAID。所以 RAID 的使用应该包括创建、管理和使用。RAID 的使用就是在 RAID 设备上创建文件系统,然后供存储应用;

流程是:

[RAID 创建]- [RAID 管理]- [RAID 的使用]
                            |
                  [RAID 的维护]

2.1 RAID 的创建方法;

创建 RAID 有两个方法,

第一种方法:用 mdadm 通过 - C 或 –create 参数来创建 RAID。这种方法,是把 RAID 信息写到每个 RAID 成员的 superblocks(超级块)中,在每个 RAID 成员的超级块中,都会记录 RAID 的级别、成员、RAID 的 UUID 等…… 这种方法把 RAID 的信息记录在各个成员的 superblocks(超级块)中。这种方法对于重装系统或系统发生灾难来来说,有利于现有 RAID 的恢复;这种方法是最常用的;

第二种方法:用 mdadm 通过 - B 或 –build 参数来创建 RAID。这种方法并不把 RAID 的信息写入 RAID 成员的 superblocks(超级块中),所以我们无法通过查看 RAID 成员信息来获得 RAID 的级别,以及 RAID 的成员等;这种方法对于重装系统或系统发生灾难来来说,不利于现有 RAID 的恢复;如果你想用第二种方法来创建 RAID,可以在下面的语法中,把 - C 或 –create 换成 - B 或 –build。

语法:创建把 RAID 信息写入 RAID 每个成员的 superblocks(超级块)中;

mdadm -C   -v  /dev/mdX   -lY   -nZ  RAID 成员

mdadm  –create  –verbose  /dev/mdX   –level=Y    –RAID-devices=Z    RAID 成员
注:

-C 是 –create 的缩写,表示创建的意思;这种方法是创建把 RAID 信息写入每个 RAID 成员 superblocks(超级块)的方法。这是最常用的方法。
-v 和 –verbose,显示创建过程中详细的事件;

如果把 - C 或 –create 换成 - B 或 –build,就是创建 RAID 的另一种方法,不把 RAID 信息写入 RAID 成员的 superblocks(超级块)中,如果您试用,请自己尝试;

RAID 设备:/dev/mdX,RAID 设备在 Linux 中,大多是 /dev/md0,/dev/md1…… 第一个设备从 /dev/md0 开始。比如你已经有 RAID0 设备是 /dev/md0,你再想做一个 RAID5,那就是 /dev/md1,以此类推;

RAID 级别:用 -lY 或 –level= Y 表示,Y 是 RAID 的级别。RAID 的级别有 RAID0 就用 0 表示,RAID1 就用 1 表示,RAID5 就用 RAID5 表示,RAID10 就用 10 表示。RAID 的级别是根据自己的使用方向和现有磁盘和分区个数来定位。如果你就想高速读写、大容量,对数据安全性要求不高,那就用 RAID0,如果对数据要求较高,可以用 RAID1 或 RAID5,再者就是 RAID10。比如 -l0 或 –level= 0 表示 RAID0,-l5 或 –level= 5 表示 RAID5, -l1 或 –level= 1 表示 RAID1,-l10 或 –level=10 表示 RAID10;

-nZ 或 –RAID-devices=Z 表示 RAID 成员的个数,比如我们把三个硬盘分分区做成一个 RAID,那就是 3 个设备。就要写成这样 -n3 或 –RAID-devices=3;值得注意的是 RAID0 和 RAID1 至少需要两个设置,RAID5 至少需要三个设备,RAID10 至少四个设备;

RAID 成员:也就是 RAID 的组成设备,要一个一个的列出来,每个设备后要用空格来隔开;比如我们把 /dev/sdb、/dev/sdc、/dev/sdd 三个硬盘做成 RAID0,在 RAID 设备这块,我们要写成 /dev/sdb /dev/sdc /dev/sdd;软件 RAID 的成员还可以是分区,比如 /dev/sdb1、/dev/sdc1 ……

举例一:我们要做一个 RAID0, 成员是 /dev/sdb、/dev/sdc 两个硬盘设备。我们要运行如下命令;

mdadm  -C  –verbose  /dev/md0 -l0 -n2 /dev/sdb /dev/sdc

mdadm -C  –verbose   /dev/md0   –level=0  –RAID-devices=2  /dev/sdb /dev/sdc
如果我们想把 /dev/sdb1、/dev/sdc1 和 /dev/sdd1 三个分区做成 RAID0 呢?

mdadm  -C  -v  /dev/md0 -l0 -n3 /dev/sd[bcd]1

mdadm -C  –verbose   /dev/md0   –level=0  –RAID-devices=3  /dev/sdb1 /dev/sdc1  /dev/sdd1
举例二:我们要做一个 RAID5,成员是 /dev/sdb、/dev/sdc、/dev/sdd 三个设备,我们要运行如下命令;

mdadm  -C  -v  /dev/md0 -l5 -n3 /dev/sd[bcd]

mdadm -C  –verbose   /dev/md0   –level=5  –RAID-devices=3  /dev/sdb /dev/sdc  /dev/sdd 
如果我们想把 /dev/sdb1、/dev/sdc1 和 /dev/sdd1 三个分区做成 RAID5 呢?

mdadm  -C  -v  /dev/md0 -l5 -n3 /dev/sd[bcd]1 

mdadm -C  –verbose   /dev/md0   –level=5  –RAID-devices=3  /dev/sdb1 /dev/sdc1  /dev/sdd1
创建完成后,RAID 也就立即启动了。我们会发现有类似如下一行的提示信息:

mdadm: array /dev/md0 started.
我们要可以通过下面的命令来查看 RAID 的信息;

mdadm -Ds /dev/md0
mdadm -D /dev/md0

2.2 RAID 管理工具;

RAID 的管理包括创建、启动、状态查看等一系列工具;我们只说常用的使用方法;

2.21 RAID 的启动方法;

RAID 的启动有两种方法,一种是指定 RAID 设备和 RAID 成员的办法来启动 RAID,另一种办法是通过加载 RAID 默认的配置文件来启动。

第一种方法:不通过读取 mdadm.conf 来启动 RAID;适用情况是你没有配置 /etc/mdadm.conf 文件;

语法:

mdadm -A RAID 设备   RAID 成员
注:

-A 同 –assemble,意思是激活一个已经存在的 RAID;
RAID 设备,就是 /dev/md0 或 /dev/md1 …… 根据你所创建的 RAID 设备为准;
RAID 成员,就是你要启动的 RAID,其下属设备有哪些,要一个一个的列出来,中间以空格分开;

举例:比如我要启动一个 RAID,设备是 /dev/md0,其下有成员是 /dev/sdb 和 /dev/sdc;所以我要用下面的办法;

[root@linuxsir:~] mdadm  -A /dev/md0  /dev/sdb /dev/sdc
注:这种情况,是没有配置 RAID 的配置文件 /etc/mdadm.conf 时,所使用的启动方法;如果您已经配置好了 /etc/mdadm.conf 文件,就可以用 mdadm -As 来启动;

第二种方法:利用配置好的 /etc/mdadm.conf 来启动 RAID;

mdadm -A RAID 设备  

mdadm -As
注:这种启动方法的前提是要配置 /etc/mdadm.conf 文件,要把您系统中所有的 RAID,都写入这个文件,然后就可以简单的用这个命令来启动了;

-A 同 –assemble,意思是激活一个已经存在的 RAID;
RAID 设备,就是 /dev/md0 或 /dev/md1 …… 根据你所创建的 RAID 设备为准;

举例:

[root@linuxsir:~] mdadm  -A /dev/md0
[root@linuxsir:~] mdadm -As
注:比如我配置好 /etc/mdadm.conf 后,启动 RAID 设备 /dev/md0,就用上面的办法。具体 mdadm.conf 的写法,请参见 RAID 的配置文件一节;

2.22 RAID 管理工具一些常用参数说明;

mdadm 参数  [RAID 设备]  [RAID 成员]

-A 或  –assemble   激活一个 RAID;
-S 和 –stop   停止正在运行的设备;
-s 或 –scan   扫描 RAID 设备;
-D 或 –detail 查看 RAID 的详细信息;
–examine   查看 RAID 成员的详细信息;
注:其中 [] 中的选项是可选的。

举例:

[root@linuxsir:~]# mdadm -As  
[root@linuxsir:~]# mdadm -Ss
[root@linuxsir:~]# mdadm -Ds
[root@linuxsir:~]# mdadm –examine /dev/sdb
注:上面的些标例,都是在配置好 /etc/mdadm.conf 的情况下,运行的,如果您没配置好 mdadm.conf 文件,请指定 RAID 设备及其成员;其中,–As 是搜索 /etc/mdadm.conf,然后根据 mdadm.conf 配置好的 RAID 信息来启动 RAID。-Ss 是搜索正在运行的 RAID,然后停止。-Ds 搜索 RAID,查看 RAID 信息;–examine /dev/sdb 是查看其中一块硬盘的 RAID 信息,这个很有用。比如你忘记了 RAID 的成员和 UUID,想恢复现有的 RAID,就要用这个来查看,然后重新让 RAID 启动起来。

比如系统有一个 RAID,但在 /etc/mdadm.conf 中没有相应的记录 RAID 信息。我不知道这个 RAID 是哪个类型的,是 RAID0,还是 RAID1,还是 RAID5??到底机器中有几个 RAID?如果您是一个新接手的管理员,应该想知道这些信息。那就一个一个硬盘,一个一个的分区查看过去。从中找出系统中所有的 RAID。然后一个一个的恢复。这时就要用到 –examine 这个参数了;

[root@linuxsir:~]# fdisk -l 

[root@linuxsir:~]# # mdadm   –examine   /dev/sdb
/dev/sdb:
          Magic : a92b4efc
        Version : 00.90.00
           UUID : 35e1a3e6:ed59c368:e5bc9166:5004fe52
  Creation Time : Wed Aug  1 07:11:43 2007
     RAID Level : RAID0
  Used Dev Size : 0
   RAID Devices : 2
  Total Devices : 2
Preferred Minor : 0

    Update Time : Thu Aug  2 07:43:30 2007
          State : active
Active Devices : 2
Working Devices : 2
Failed Devices : 0
  Spare Devices : 0
       Checksum : 8f8a235e – correct
         Events : 0.29

     Chunk Size : 64K

      Number   Major   Minor   RAIDDevice State
this     0       8       16        0      active sync   /dev/sdb

   0     0       8       16        0      active sync   /dev/sdb
   1     1       8       32        1      active sync   /dev/sdc
注:

首先:我们用 fdisk -l 查看一下机器中所有硬盘和分区,如果不能完全列出,请指定具体硬盘。
其次:我们查看一下某个硬盘或分区上是否有 RAID 信息,比如我查看的是 /dev/sdb,结果显示出,/dev/sdb 是 RAID0 设备的一个成员,/dev/sdb 和 /dev/sdc 共同组成的 RAID0;

得到这些信息有何用呢?我们就可以激活 RAID,或重写 /etc/mdadm.conf,让 RAID 重新运行起来。在此过程中,千万不要用 - C 或 –create 参数来重新创建 RAID,否则你以前存在的 RAID 就被破坏,里面的数据当然也会一无所有!!!切记。在一个有数据的 RAID 中,不能随便用 -C 参数。如果用了 - C 或 –create 就是创建一个新的 RAID 设备!

2.3 RAID 的配置文件;

RAID 并不是一定要配置文件,但有配置文件,会方便管理,比如 RAID 最精简的方法执行、状态查看………… 也需要 RAID 的配置文件。如果不没有配置文件,还要指定 RAID 成员;

RAID 的配置文件是 mdadm.conf 位于 /etc 目录,如果你没有这个文件,可以自己创建一个;当我们做好 RAID 后,首先要配置这个文件;把你所有的 RAID 配置信息都写入这个文件。我们可以自己手工编写。参照 mdadm.conf 配置文件的示例就比较方便。

你也可以用下面的办法,要先做好 /etc/mdamd.conf 的备份;

[root@linuxsir~] mv  /etc/mdadm.conf /etc/mdadm.conf.bak

第一步:搜索 RAID;

搜索 RAID 是以激活 RAID 为前掉条件,否则下面的命令不会有什么作用;请参见激活 RAID 的办法;

语法:

mdadm -Ds
注:其中 -D 表示 –detail,-s 表示 –scan,两者结合起来就 -Ds;
提示:运行查询 RAID 的时,要首先激活 RAID;

举例:

[root@linuxsir~] mdadm -Ds 
ARRAY /dev/md0 level=RAID0 num-devices=2 UUID=35e1a3e6:ed59c368:e5bc9166:5004fe52
第二步:查询 RAID 的详细信息;主要是查看 RAID 的成员有哪些;

语法:

mdadm -D RAID 设备
举例:

下面查询已经启动了的 RAID 设备 /dev/md0 的详细信息;

[root@linuxsir~] mdadm -D  /dev/md0  

/dev/md0:
        Version : 00.90.03
  Creation Time : Wed Aug  1 07:11:43 2007
     RAID Level : RAID0
     Array Size : 156249856 (149.01 GiB 160.00 GB)
   RAID Devices : 2
  Total Devices : 2
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Thu Aug  2 07:22:27 2007
          State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
  Spare Devices : 0

     Chunk Size : 64K

           UUID : 35e1a3e6:ed59c368:e5bc9166:5004fe52
         Events : 0.21

    Number   Major   Minor   RAIDDevice State
       0       8       16        0      active sync   /dev/sdb
       1       8       32        1      active sync   /dev/sdc
注:通过查询详细信息,我们得到 /dev/md0 是 RAID0,下面两个成员 /dev/sdb 和 /dev/sdc;UUID 为 35e1a3e6:ed59c368:e5bc9166:5004fe52;这个 RAID 是有超级块的;

第三步:书写 RAID 的配置文件 mdadm.conf;

[root@linuxsir~] mdadm -Ds   /etc/mdadm.conf   注:把查询出来的 RAID 信息写到 mdadm.conf 中;
[root@linuxsir~]more /etc/mdadm.conf   注:看看有没有内容写进来?
ARRAY /dev/md0 level=RAID0 num-devices=2 UUID=35e1a3e6:ed59c368:e5bc9166:5004fe52
因为我们在前面已经通过 mdadm -D /dev/md0 得知其下有成员 /dev/sdb 和 /dev/sdc 两块硬盘。所以我们要修改一下 mdamd.conf 的内容。要在加上 /dev/md0 的成员 /dev/sdb 和 /dev/sdc;用编辑器打开 /etc/mdadm.conf;

在下面类似的一行;

ARRAY /dev/md0 level=RAID0 num-devices=2 UUID=35e1a3e6:ed59c368:e5bc9166:5004fe52
修改成

ARRAY /dev/md0 level=RAID0 num-devices=2 UUID=35e1a3e6:ed59c368:e5bc9166:5004fe52 devices=/dev/sdb,/dev/sdc
其实也就是把 /dev/md0 这个 RAID 设备的成员指定出来,每个设备之间要用, 号隔开。或者写成 devices=/dev/sd[bc]类似的写法也行;

我们来看一下 /dev/md0 这行,其中 /dev/md0 这行是一个 RAID0 设备,由两个成员组成,/dev/md0 的 UUID 为 UUID=35e1a3e6:ed59c368:e5bc9166:5004fe52,两个成员分别是 /dev/sdb 和 /dev/sdc 两个硬盘;

其实我们无论添加多少 RAID 设备,都可以通过这种方法写入 RAID 配置文件 /etc/mdadm.conf 中,每个 RAID 设备一行;写好后,我们要重启一下 RAID;

[root@linuxsir~] mdadm -Ss

[root@linuxsir~] mdadm –stop –scan
mdadm: stopped /dev/md0

[root@linuxsir~] mdadm -As 

[root@linuxsir~] mdadm  –assemble –scan 

mdadm: /dev/md0 has been started with 2 drives.
注:-S 和 –stop 相同,表示停止 RAID。而 - s 和 –scan 相同,表示扫描 RAID。- A 和 –assemble 表示激活 RAID;这些参数都比较简单,查查 man 和 help 就知道了;

激活 RAID 后,我们要通过查看 RAID 的状态来判断 RAID 是否正常和健康……

3 RAID 设备的使用:RAID 设备分区、文件系统初始化,挂载方法;

既然我们已经把 RAID 设备做好了,我们就要使用这个设备。RAID 做好后,类似一个没有格式化的新硬盘。如果我们拿到新硬盘时第一步是做什么?对,是分区和格式化,安装操作系统。RAID 做好后,没有文件系统,一样是没办法用的,所以我们做好 RAID 后,要来创建文件系统;RAID 只不过是把几个硬盘或分区绑定在一起成为一个大的虚拟物理存储设备。如果我们要对这个大的虚拟设备进行使用,就要在这个设备上创建文件系统才行。Linux 目前可用的文件系统有 reiserfs、xfs、ext3,我推荐 reiserfs 和 xfs,感觉这个比较安全点。虽然现在有超强的 zfs,但我认为还是处于小白鼠阶段。对于重量级应用来说,我们还是观察一段时间再说。

RAID 做好后,我们要为它进行文件系统初始化,当初始化完成后,我们就可以挂载使用了。在一般情况下,我们可以把做好的 RAID 挂载到 /home,我们可以把所有的存储性文件。

在 Linux 中, 创建文件系统的工具有 mkfs.xfs(创建 xfs 文件系统),mkfs.jfs(创建 JFS 文件系统),mkfs.reiserfs(创建 reiserfs 文件系统),mkfs.ext3(创建 ext3 文件系统)……。我们推荐的是 reiserfs 和 xfs,不推荐 ext2 或 ext3,为什么不推荐?因为实践是检验真理的唯一标准,性能不如人、安全性不如人,怎么用?我不是 ext 文件系统的专家,我只用最方便,维护起来比较容易的文件系统。

RAID 也可以分区来使用,但以我看来,大可不必,凡是能用到 RAID 的,大多是服务器领域。我们可以把 RAID 做成后,挂载到 /home 目录上。有关数据存储的都放在 RAID 上。操作系统并不安装在 RAID 上,当操作系统发生故障的时候,我们仅仅是修复或重装操作系统,对数据存储的 RAID 没有任何影响。就是重装操作系统,我们也能在几分钟之内恢复 RAID。

如果您想把 RAID 再进进行分区使用,可以用 fdisk、parted 或 cfdisk 来进行分区工作,也可以尝试 LVM 的来对分区进行管理,LVM 能自动调整分区的大小。当然,我不会推荐 RAID+LVM,或对 RAID 进行分区操作。

RAID 做好后,我们就像使用物理硬盘一样使用它,比如根据前面的例子,把 /dev/sdb 和 /dev/sdc 两个硬盘做成 RAID0,其设备为 /dev/md0,我们就可以对 /dev/md0 进行和物理硬盘一样的操作。如果我们不分区,只是进行创建文件系统,那就比较简单了。

比如我们在 /dev/md0 上创建 reiserfs 文件系统,我们可以用 mkfs.reiserfs 命令来完成。

第一步:查看 /dev/md0 设备是否存在,以及它的容量;

[root@linuxsir:~]# fdisk -l /dev/md0

Disk /dev/md0: 159.9 GB, 159999852544 bytes
2 heads, 4 sectors/track, 39062464 cylinders
Units = cylinders of 8 * 512 = 4096 bytes

Disk /dev/md0 doesn t contain a valid partition table
注:我们可以看到 /dev/md0 设备有 158.0GB 的容量,不包含有效分区。如果您想要用分区操作,请用 fdisk /dev/md0、或 cfdisk /dev/md0 或 parted /dev/md0 来操作;

第二步:创建文件系统;

在这里我们是计划用 reiserfs 文件系统;

[root@linuxsir:~]# mkfs.reiserfs  /dev/md0 

mkfs.reiserfs 3.6.19 (2003 www.namesys.com)

A pair of credits:
Nikita Danilov  wrote  most of the core  balancing code, plugin infrastructure,
and directory code. He steadily worked long hours, and is the reason so much of
the Reiser4 plugin infrastructure is well abstracted in its details.  The carry 
function, and the use of non-recursive balancing, are his idea.

Oleg Drokin was the debugger for  V3 during most of the time that  V4 was under
development,  and was quite  skilled and fast at it.  He wrote  the large write
optimization of V3.

Guessing about desired format.. Kernel 2.6.21.5-smp is running.
Format 3.6 with standard journal
Count of blocks on the device: 39062464
Number of blocks consumed by mkreiserfs formatting process: 9404
Blocksize: 4096
Hash function used to sort names: r5
Journal Size 8193 blocks (first block 18)
Journal Max transaction length 1024
inode generation number: 0
UUID: 2b06b743-8a4e-4421-b857-68eb2176bc50
ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
        ALL DATA WILL BE LOST ON /dev/md0 !
Continue (y/n):y   注:在这里输入 y,就进行创建文件系统了;
Initializing journal – 0%….20%….40%….60%….80%….100%
Syncing..ok

Tell your friends to use a kernel based on 2.4.18 or later, and especially not a
kernel based on 2.4.9, when you use reiserFS. Have fun.

ReiserFS is successfully created on /dev/md0.
这样文件系统 reiserfs 就创建成功了。如果您想创建 xfs 文件系统,就用 mkfs.xfs /dev/md0,其它文件系统也类似 ……

第三步:挂载文件系统并使用;

[root@linuxsir:~]# mkdir /mnt/data
[root@linuxsir:~]# mount /dev/md0 /mnt/data 
[root@linuxsir:~]# df -lh /dev/md0

文件系统               容量   已用 可用 已用 % 挂载点
/dev/md0              150G   33M  149G   1% /mnt/RAID0
注:这样就就 /dev/md0 设备挂载到 /mnt/RAID0 上了。可以看到设备大小为 150G。已使用 33M,挂载点为 /mnt/RAID0。我们可以向设备里存储文件;

其实根据 Linux 文件系统的结构,以及最新 Linux 软件方便易用的特点。我们完全可以把 /home 独立出来。把 RAID 设备挂载到 /home 目录上。凡是涉及用户或数据存储的,都可以放在 /home 中,比如数据库,网络服务器有关数据存储的,都指定到 /home 中的文件夹中。所有的一切都是根据方便管理为前提。

如果您的 RAID 是在安装系统后创建的,如果挂载到 Linux 现有目录下,要先做好相应目录的数据迁移到 RAID 设备中,然后再把 RAID 挂载到 Linux 目录中。比如你想把 RAID 挂载到 /home 目录中,可以先创建一个临时的目录,把 RAID 挂到这个临时的目录上,接着再把 /home 目录下的文件都移到 RAID 上,然后再把 RAID 卸载,再重新挂载到 /home 中,这样 /home 的数据就完迁移了。

至于如何把操作系统安装或移到 RAID 上,不同的 Linux 发行版有不同的方法。Fedora 或 Redhat 在安装的过程中,就为我们提供了在 RAID1 上安装系统。其它的发行版是否支持,不太知道,Slackware 是不支持。如果您想把系统移植到 RAID1 中,可能需要安装好系统后,再进行移植。感觉软 RAID1 在一块硬盘上做,没太大的必要,如果要做 RAID1, 也要在两个硬盘上(或两个属于不同硬盘的分区上来做)。

如何开机挂载 RAID 设备,不同的发行版也有自己的方法,流程是先激活 RAID,然后才是挂载。

4 软 RAID 的高级进阶及维护;

RAID 做好以后,并不是万事大吉了,还要进行日常维护;比如某个硬盘(或分区)坏掉,我们可以在不停机的情况下换上。或者我们为 RAID 做一个冗余的硬盘或分区,当 RAID 发生故障时,冗余硬盘或分区自动推上工作,能实现零停机任务。

4.1 如何向已存在的 RAID 中,添加一块硬盘或分区;

RAID 有几种模式,比如创建、管理。下面我们所说的就是 RAID 的管理模式 Manage,也可以说是 RAID 的进阶应用。管理模式的目的,仅仅是为了把有问题的 RAID 成员换掉,或者为了管理的需要把其中一个 RAID 成员由另一个来替换,也可能是为了安全需要,让新增加的硬盘或分区当做 RAID 的备用 (spare) 成员;在管理模式中,RAID 的真正成员个数并不改变。比如我们做 RAID5 是,用的是三个硬盘或分区。在增加 RAID 成员时,RAID5 仍是三个成员,容量还是保持不变,如果三个 RAID 成员完全正常健康,新增加的成员,仅仅是备用 (spare) 成员。备用成员的用途就是当 RAID 的真正成员发生问题时,备用成员会马上启动,仅仅是起到安全的冗余的作用;

我们要向一个既已存在 RAID 中,添加或移除一个硬盘或分区,我们要用到 mdadm 工具的 -f 和 -r 以及 -a 参数;

mdadm /dev/mdX -f RAID 成员
mdadm /dev/mdX -r RAID 成员
mdadm /dev/mdX -a RAID 成员
注:

-f 同 –fail 表示把一个设备列为有问题的设备,以便用 - r 或 –remove 参数移除;
-r 同 –remove 表示把 RAID 中的一个成员移出 RAID;
-a 同 –add 表示向一个 RAID 中添加一个成员;
–re-add 重新把最近移除的 RAID 成员重新添加到 RAID 中;

值得一提的是,这些参数的运用,必须是在 RAID 正常运行的情况下进行。其中 RAID 设备是 /dev/mdX,X 是一个大于 0 的整数,RAID 成员是一个硬盘或分区。添加设备并不会把 RAID 的容量扩大,仅仅是为了添加备用成员,比如在 RAID1、RAID5 和 RAID10 中特加有用。当一个 RAID 成员发生故障的时候,要用这种办法来让新成员顶替工作;

举例:

[root@linuxsir:~]# mdadm /dev/md0 -f /dev/sdb3 
[root@linuxsir:~]# mdadm /dev/md0 -r /dev/sdb3
[root@linuxsir:~]# mdadm /dev/md0 -a /dev/sdb5
注:当我们想把一个 RAID 的成员 /dev/sdb3 移除 RAID 设备 /dev/md0 时,要首先标注它为有问题的(也可能是完全正常的,为了管理需要)。然后 用 - r 参数移除,接着用 -a 参数再添加一个设备 /dev/sdb5 到 RAID 设备 /dev/md0 中;

当我们用 mdadm -D /dev/md0 查看 RAID 的状态时,我们会看到 RAID 的详细信息。比如是否正常、RAID 成员…… 下面是我们需要掌握的;

Raid Level : 注:阵列级别;比如 Raid5
Array Size : 注:阵列容量大小;
Used Dev Size : 注:RAID 单位成员容量大小,也就是构成 RAID 的成员硬盘或分区的容量的大小;
Raid Devices : 注:RAID 成员的个数;
Total Devices : RAID 中下属成员的总计个数,因为还有冗余硬盘或分区,也就是 spare,为了 RAID 的正常运珩,随时可以推上去加入 RAID 的;
State : clean, degraded, recovering 注:状态,包括三个状态,clean 表示正常,degraded 表示有问题,recovering 表示正在恢复或构建;
Active Devices : 被激活的 RAID 成员个数;
Working Devices : 注:正常的工作的 RAID 成员个数;
Failed Devices : 出问题的 RAID 成员;
Spare Devices : 备用 RAID 成员个数,当一个 RAID 的成员出问题时,用其它硬盘或分区来顶替时,RAID 要进行构建,在没构建完成时,这个成员也会被认为是 spare 设备;
Rebuild Status : 注:RAID 的构建进度,比如 38% complete,表示构建到 38%;
UUID : 注:RAID 的 UUID 值,在系统中是唯一的;

Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1 注:表示这个成员是激活的;
1 8 18 1 active sync /dev/sdb2 注:表示这个成员是激活的;
4 8 19 2 spare rebuilding /dev/sdb3 注:未被激活,正在构建中的成页,正在传输数据;

3 8 49 – spare /dev/sdd1

注:spare /dev/sdd1 表示 /dev/sdd1 是 RAID 的备用成员,当 RAID 的正式成员 /dev/sdb1、/dev/sdb2 或 /dev/sdb3 中有一个出问题的时候,这个备用成员会自动进行工作的。这个并不是必须的,可以用添加 RAID 成员的办法来添加,也可以在创建的 RAID 的时候添加;

4.2 如何为一个现有 RAID 扩充容量;

在 RAID 的管理模式中,我们提到增加 RAID 成员的办法,如果 RAID 所有真正成员都是健康的,这个成员就进入备用 (spare) 状态。只有当真正成员有问题时,这个备用成员才启用顶替出问题的成员来工作。

但我们能不能向 RAID 添加一个新成员,并且让他成为 RAID 的真正成员,并且达到为 RAID 扩充容量呢?比如有一个 RAID5,用的是 3 个 20G 的分区做的,其总容量是(3-1)x20=40G,我们能否为这个 RAID5 新增加一个 20G 的分区,并且让其成为这个 RAID5 真正的成员,并且达到扩充容量的目的,也就是说让这个 RAID5 有四个真正的成员,其容量为(4-1)x20=60G。

在硬 RAID 中,这个工作比较容易,但在软 RAID 中,是否能实现呢?答案是肯定的,这种情况仅针对已经做好的 RAID,并且已经在存储过程中发现 RAID 容易不足的情况下使用。如果是一个新做的 RAID,我们发现计划错了,我们重新做一次就行了,没必要用扩容的办法。

我们为现有的 RAID 扩充容量,利用的就是 RAID 的 Grow 模式,中译为 RAID 的增长模式;应用范围是 RAID1、RAID4、RAID5、RAID6。

RAID 扩容流程:

向一个已经存在的 RAID 中添加一个成员 - 执行扩容指令
注:在这里我们要用到 RAID 的管理模式中的添加成员的办法。也就是用到 mdadm 中的 -a 参数,请参考上一节的内容。这时添加的成员是备用 (spare) 成员,我们要把备用成员“推”到位置上。这时我们要用到 mdadm 的 Grow 模式;

举例说明:

比如我们做的 RAID5, 由三个硬盘分区 /dev/sdb1、/dev/sdc1、/dev/sdd1 构成,这时的 RAID5 真正成员就是 3 个。当我们添加一个分区 /dev/sdb2 到这个 RAID5 时,新增加的这个 sdb2 就是这个 RAID5R 的备用 (spare) 成员。比如已有的 RAID5 的设备是 /dev/md0;

·   首先,查看 RAID 状态;
[root@linuxsir:~]# mdadm -D /dev/md0 
/dev/md0:
        Version : 00.90.03
  Creation Time : Tue Aug  7 01:55:23 2007
     Raid Level : raid5   注:RAID 级别;
     Array Size : 39069824 (37.26 GiB 40.01 GB) 注:RAID 容量是 39069824
  Used Dev Size : 19534912 (18.63 GiB 20.00 GB) 注:RAID 中每个成员的容量是 19534912 
   Raid Devices : 3 注:RAID 真正成员是 3 个设备构成;
  Total Devices : 3   注:总共设备是 3 个;
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Tue Aug  7 02:02:33 2007
          State : clean   注:状态正常;
Active Devices : 3   注:激活的设备是 3 个;其实就是 RAID 真正成员正常激活的个数;
Working Devices : 3   注:正常工作的设备是 3 个;
Failed Devices : 0   注:有问题的设备是 0 个;
  Spare Devices : 0 注:备用设备是 0 个;

         Layout : left-symmetric
     Chunk Size : 64K

           UUID : faea1758:0e2cf8e0:800ae4b7:b26f181d   注:RAID 的 UUID;
         Events : 0.16

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1   注:RAID 真正成员 /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1   注:RAID 真正成员 /dev/sdc1
       2       8       49        2      active sync   /dev/sdd1   注:RAID 真正成员 /dev/sdd1
·   其次,我们为这个 RAID5 添加一个成员;
把 /dev/sdb2 添加到 RAID 设备 /dev/md0,然后查看 RAID 的状态及详细信息;

[root@linuxsir:~]# mdadm /dev/md0 -a /dev/sdb2   注:添加分区 /dev/sdb2 到 /dev/md0 中;
mdadm: added /dev/sdb2  

[root@linuxsir:~]# mdadm -D /dev/md0   注:查看 /dev/md0 的详细信息;
/dev/md0:
        Version : 00.90.03
  Creation Time : Tue Aug  7 01:55:23 2007
     Raid Level : raid5   注:RAID 级别;raid5 
     Array Size : 39069824 (37.26 GiB 40.01 GB)   注:RAID 容量是 39069824
  Used Dev Size : 19534912 (18.63 GiB 20.00 GB)   注:RAID 中每个成员的容量是 19534912 
   Raid Devices : 3   注:RAID 真正成员是 3 个设备构成;
  Total Devices : 4   注:总共设备是 4 个;
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Tue Aug  7 02:14:13 2007
          State : clean   注:状态正常;
Active Devices : 3 注:激活的设备是 3 个;其实就是 RAID 真正成员正常激活的个数;
Working Devices : 4   注:正常工作的设备是 4 个;
Failed Devices : 0
  Spare Devices : 1

         Layout : left-symmetric
     Chunk Size : 64K

           UUID : faea1758:0e2cf8e0:800ae4b7:b26f181d
         Events : 0.18

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1   注:RAID 真正成员 /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1   注:RAID 真正成员 /dev/sdc1
       2       8       49        2      active sync   /dev/sdd1   注:RAID 真正成员 /dev/sdd1

       3       8       18        –      spare   /dev/sdb2   注:注:RAID 备用成员 /dev/sdb2
添加 /dev/sdb2 到 /dev/md0 后,我们发现 RAID 的组成设备总数由 3 个变成了 4 个,但真正成员个数并没有变化,多出了一个备用成员 /dev/sdb2。但 /dev/md0 的容量并没有变大。所以这时我们要为 RAID 来扩容,解决办法就是让 /dev/sdb2 成为 RAID 的真正成员,RAID 的容易由 40G 扩展到 60G;

·   第三,为 RAID 进行扩充容量;
在这里我们要用到 RAID 的 Grow 模式,也就是增长模式。扩充模式,极为简单,有 –size 参数,- n 参数 –size 是指大定 RAID 的大小,这个可以省略,具体由你所做的 RAID 级别而定。-n 代表 RAID 真正成员的个数。在这个例子中,RAID5 真正成员是 3 个,后来我们又添加了一个备用成员 /dev/sdb2 进去。我们所做的就是把这个备用成员“推”到真正成员的位置上。也就是说 RAID 的真正成员由 3 个变成 4 个。只是这一简单的指令,就可以让 RAID5 容量增加起来。

[root@linuxsir:~] # mdadm -G /dev/md0   -n4 

mdadm: Need to backup 384K of critical section..
mdadm: … critical section passed.
然后我们查看 RAID 的详细信息;

[root@linuxsir:~] # mdadm -D /dev/md0
/dev/md0:
        Version : 00.91.03
  Creation Time : Tue Aug  7 01:55:23 2007
     Raid Level : raid5
     Array Size : 39069824 (37.26 GiB 40.01 GB)   注:RAID 的容量,我们发现 RAID 的容量并没有增大,这是因为构建没有完成;等构建完成时就会改变过来;
  Used Dev Size : 19534912 (18.63 GiB 20.00 GB)
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Tue Aug  7 02:36:06 2007
          State : clean, recovering   注:正常,恢复中;
Active Devices : 4   注:RAID 的正式成员已经变到 4 个;
Working Devices : 4
Failed Devices : 0
  Spare Devices : 0 注:备用成员由 1 个,减少到 0 个;说明已经把 RAID 备用成员推到了 RAID 的正式成员中;

         Layout : left-symmetric
     Chunk Size : 64K

Reshape Status :  17% complete   注:RAID 重新构建状态,已经完成 17%;目前并未完成构建;
  Delta Devices : 1, (3- 4) 注:RAID 的正式成员增加一个,由 3 个到 4 个;

           UUID : faea1758:0e2cf8e0:800ae4b7:b26f181d
         Events : 0.100

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       2       8       49        2      active sync   /dev/sdd1
       3       8       18        3      active sync   /dev/sdb2 注:/dev/sdb2 已经由 spare 改变到 active,也就是说由备用
当执行完增容后,我们发现 RAID 的容量并没有增大,这是因为构建没有完成,等 RAID 完成构建后,RAID 的容量就会改变为 19534912x(4-1)=58604736K=60G;构建进度也可以 cat /proc/mdstat 来查看。

新增加一个 RAID 正式成员的办法,不会让 RAID 原有的数据丢失,也不会破坏原有的数据。所以这种办法对 RAID 已经存储大量数据,当容量发生危机时而不损失原有数据的前提下,所采用的一种安全可行的扩容办法;当然扩容后,你要修改 /etc/mdadm.conf;

4.3 RAID 正式成员个数达不到 RAID 启动要求时,如何启动 RAID;

可能存在这样一种状况,当 RAID 的一个正式成员挂掉后,这时 RAID 按以前说的常规办法是不能启动的。这时我们要强制启动,要用到 –run 参数;比如当做 RAID5 时,我们用到了三个硬盘或分区,当其中有一个挂掉,按 RAID5 的特点来说,数据一样是安全完整的,但 RAID5 启动按常规办法是必须要达到做 RAID 时所指定的正式成员个数,这时按常规启动办法是不行的,我们要用到 –run 参数;

我们举个例子。比如 RAID5 正式成员有 3 个 /dev/sdb1,/dev/sdb2,/dev/sdb3,我们只用 /dev/sdb1 和 /dev/sdb2 来启动 RAID5;

[root@linuxsir:~] # mdadm -A –run /dev/md0  /dev/sdb1 /dev/sdb2

5 软 RAID 设备使用方向的探讨;

对于软 RAID 是把几个同容量的物理磁盘或分区组成一个大的虚拟设备来用,我们应用方向是什么呢?通过 RAID 的定义,我们可以知道 RAID 是为了解决容量、读写效率以及磁盘冗余安全而提出来的。

5.1 仅仅是为了扩充存储可用空间,是否必需做 RAID;

如果是仅仅解决容量问题,我看大可不必用 RAID。因为 LVM 比 RAID 更为灵活,无论怎么做,都不会带来容易上的损失。而只有 RAID0 和 LINEAR 级别才不会带来容量上的损失,RAID1、RAID5 和 RAID10 由于要有安全冗余,所以 RAID 的容量必然减少;

LVM 技术能把所有空闲硬盘或分区结合在一起来使用,并不要求每个分区或硬盘大小容易是一致的,而 RAID 必须要求每个 RAID 成员容量大小相同,如果不相同,以最小的成员的容易计算,这个损失还不算,还要有安全冗余带来的容量损失,比如把两块 80G 的硬盘做成 RAID1, 这时的 RAID1 是一块硬盘的容量。LVM 做好后,也相当于一个空白的虚拟设备,可以在上面划成一个分区来使用,也可以划分几个,如果划成几个,我们还可以自动调整分区的大小。而 RAID 一但做好,如果再进行分区,分区的容量是没办法自由调整的;

有的弟兄会问,我是不是做好 RAID,然后在 RAID 上再做 LVM,也就是 RAID+LVM 模式。这种方案实现起来并不困难,但对于软 RAID 来说,这种方案是否真的价值?我们用 RAID 的目的无非是“容量 + 读写效率 + 安全”。我们有必要把做好的 RAID 再分割的四分五裂吗?我感觉没必要,因为对于存储设备来说,每增强一项管理技术,就意味着风险,这种风险一是来自于管理员技术水平,二是来自于设备老化。另外集中于不分区的存储设备,也能为数据迁移和系统管理带来方便;

5.2 在同一个硬盘做 RAID 是否有必要;

在同一块硬盘上做 RAID 是否有必要,如果您是想提高数据读写速度,还是有必要的。RAID0 就能为你带来这种高速存储的快感。如果您想在同一块硬盘上做软 RAID,想同时兼顾效率和安全,我看大可以免了。因为硬盘一坏掉,什么重要的数据都会一锅烂;

5.3 软 RAID 的合理使用方向;

目前支持 SATA 主板的机器只能技术最多四块硬盘。比如四个 80G 的 SATA 硬盘,IDE 硬盘也同理;我们要根据自己的使用方向来做 RAID。下面我根据一个示例来说明 RAID 的合理使用方向;

第一个硬盘分区情况:

/dev/sda1  20G 大小    
/dev/sda2  20G 大小    
/dev/sda3  20G 大小    
—–/dev/sda5  swap 分区  - 内存两倍大小
—–/dev/sda6   用于 /tmp  2G 大小;
—–/dev/sda7 
注:我们首先把操作系统安装到第一个分区 /dev/sda1,交换分区是 /dev/sda5,/dev/sda6 为临时 /tmp 的目录;那 /dev/sda1 和 sda2、sda3、sda7 是用做什么的呢?可以用来安装系统。我们设计的是仅安装系统,涉及数据保存的,都放到 RAID 上。比如我把 sda1 和 sda2 安装同样的系统,把由第二三四块硬盘做好的 RAID 挂在 /home 上,所有应用数据都存在 RAID 上。当 sda1 系统被破坏时,我们可以用最短的时间启用 sda2 的系统,并在 sda2 上装载由第二三四块硬盘上做的 RAID。

第二三四个硬盘,我们可以用来整块硬盘来做 RAID,不必为每块硬盘分区。比如为了读写效率,我们可以做成 RAID0, 为了安全,你可以做 RAID5。如果做 RAID0 设备的容量是 3x80G=240G,如果做 RAID5,RAID5 设备的容量是(3-1)x80=160G。有的弟兄可能会说,为什么我不能把磁盘进行分区,然后做 RAID0 呢?RAID10 也就是 RAID0+RAID1 的组合,安全和效率都有。这种方案也是可以的,但您必须做到,当有一个硬盘坏掉时,不会影响数据的整体安全性。也就是说,当一个硬盘坏掉时,另外两块硬盘组合起来,仍能组成一份完整的数据。当 RAID 中的一块硬盘坏掉时,我们能通过更换硬盘,简单的修复,就能让 RAID 正常运行起来,而且数据是完整的。如果您对数据安全极为重视的,在做软 RAID 的过程中,能做到这点,这个 RAID 方案就属于你。

所以在做软 RAID 时,首先要明白自己的目的是什么,然后再来根据目的判断自己的所要达到的效果。如果是简单追求的是读写效率,我们就不必考虑数据的安全性。如果是数据的安全性对我们来说极为重要,我们就要判断,当一块硬盘坏掉时,是否影响数据的完整性!比如,我们用两块硬盘来做 RAID5 或 RAID10,可以这样说,没有一点安全性的。无论您怎么分区和组合,也不会为您带来一点安全感。

6 常见问题及处理;

涉及一些补充和增订的内容,我们在这里一一列出;

6.1 如何清除一个 RAID 成员的超级块存储存的 RAID 信息;

RAID 成员在 superblock 中所存储的 RAID 信息是极为重要的,我们可以根据这个信息轻松恢复 RAID。

mdadm –zero-superblock RAID 成员;
如果你确认 RAID 成员这个成员对你没任何用处,你已经把这个成员移除 RAID,并且您想把这个设备另作他用。这时你可以清除其 superblock 的信息。比如;

[root@linuxsir:~] # mdadm –zero-superblock /dev/sdd3
这个示例就是清除 /dev/sdd3 中的超级块中所存储的 RAID 信息;

7 关于本文;

其实软 RAID 使用起来比较简单,难点在于后期的管理和维护。软 RAID 的使用教程,其实用几个命令足以能说的清楚。但一想到初学 Linux 的弟兄也可能象我当初学习 Linux 一样,总想找一个 Step By Step 的教程看着实现自己想要做的东西,基于这个大多数初学者的想法,我就写了这么一个看起来相对复杂的文章。

这篇文章看起来条理不够清晰,另外 mdadm 的模式也没有给大家说,而是把模式分拆开来放在具体的应用中。

我仅仅是用自己从新手理解的角度来写这篇文章,文中大量存在不规范的用语,这也是在情理之中的。最主要的是有些专业束语我不知道如何翻译才好。

以上是“linux 软 raid 如何实现”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

向 AI 问一下细节

丸趣 TV 网 – 提供最优质的资源集合!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-07发表,共计23858字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)