a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 70|回复: 0

[综合辅导] Linux认证辅导:关于LinuxRAID详细配置(2)

[复制链接]
发表于 2012-8-4 12:07:07 | 显示全部楼层 |阅读模式
Linux认证辅导:关于Linux RAID详细配置(2)1 @9 ]  l$ e9 A* p5 H( B: w
3 RAID设备的使用:RAID设备分区、文件系统初始化,挂载方法;
$ m7 o& ~2 ^, C' |- i7 ]( i% W* f  p既然我们已经把RAID设备做好了,我们就要使用这个设备。RAID做好后,类似一个没有格式化的新硬盘。如果我们拿到新硬盘时第一步是做什么?对,是分区和格式化,安装操作系统。RAID做好后,没有文件系统,一样是没办法用的,所以我们做好RAID后,要来创建文件系统;RAID只不过是把几个硬盘或分区绑定在一起成为一个大的虚拟物理存储设备。如果我们要对这个大的虚拟设备进行使用,就要在这个设备上创建文件系统才行。Linux 目前可用的文件系统有reiserfs、xfs、ext3,我推荐reiserfs和xfs,感觉这个比较安全点。虽然现在有超强的zfs,但我认为还是处于小白鼠阶段。对于重量级应用来说,我们还是观察一段时间再说。
+ _  h' ~  C: Q7 o% K5 cRAID做好后,我们要为它进行文件系统初始化,当初始化完成后,我们就可以挂载使用了。在一般情况下,我们可以把做好的RAID挂载到/home,我们可以把所有的存储性文件。
$ h8 W7 H% F1 c; c7 o' u2 k& a在Linux中,创建文件系统的工具有 mkfs.xfs(创建xfs文件系统), mkfs.jfs(创建JFS文件系统), mkfs.reiserfs (创建reiserfs文件系统), mkfs.ext3 (创建ext3文件系统)…… 。我们推荐的是reiserfs和xfs,不推荐ext2或ext3,为什么不推荐?因为实践是检验真理的唯一标准,性能不如人、安全性不如人,怎么用?我不是ext文件系统的专家,我只用最方便,维护起来比较容易的文件系统。
1 R7 e, l- Y3 Y- yRAID也可以分区来使用,但以我看来,大可不必,凡是能用到RAID的,大多是服务器领域。我们可以把RAID做成后,挂载到/home目录上。有关数据存储的都放在RAID上。操作系统并不安装在RAID上,当操作系统发生故障的时候,我们仅仅是修复或重装操作系统,对数据存储的RAID没有任何影响。就是重装操作系统,我们也能在几分钟之内恢复RAID。5 I% F/ l" O* d: [$ L# U
如果您想把RAID再进进行分区使用,可以用fdisk 、parted或cfdisk 来进行分区工作,也可以尝试LVM的来对分区进行管理,LVM能自动调整分区的大小。当然,我不会推荐RAID+LVM,或对RAID进行分区操作。
3 q% m3 H6 P4 wRAID做好后,我们就像使用物理硬盘一样使用它,比如根据前面的例子,把/dev/sdb和/dev/sdc两个硬盘做成RAID0,其设备为/dev/md0,我们就可以对/dev/md0进行和物理硬盘一样的操作。如果我们不分区,只是进行创建文件系统,那就比较简单了。
3 z/ A# ^- u  M- w9 `2 P比如我们在/dev/md0上创建reiserfs文件系统,我们可以用mkfs.reiserfs命令来完成。
: u4 Q4 \" W6 u第一步:查看/dev/md0设备是否存在,以及它的容量;
/ i8 N0 f9 _3 i) ^& a* i4 ^! N- t0 Y[root@linuxsir:~]# fdisk -l /dev/md0. t; r, |* e" L
Disk /dev/md0: 159.9 GB, 159999852544 bytes* |% n9 @, B" \4 F
2 heads, 4 sectors/track, 39062464 cylinders( r! ^+ d$ ?/ L
Units = cylinders of 8 * 512 = 4096 bytes
: S0 N& D, h' E+ w4 w) l2 l9 mDisk /dev/md0 doesn‘t contain a valid partition table) u0 @0 P+ {5 V& ?* e
注:我们可以看到/dev/md0设备有 158.0GB的容量,不包含有效分区。如果您想要用分区操作,请用fdisk /dev/md0 、或cfdisk /dev/md0 或parted /dev/md0来操作;6 e) _& B8 R- K
第二步:创建文件系统;& n; e; c, X# v/ r7 |; Q
在这里我们是计划用 reiserfs 文件系统;* A; r% z' R$ {0 M) Q) F! t) P
[root@linuxsir:~]# mkfs.reiserfs /dev/md0& X7 {% U  b1 H$ ^: X3 F
mkfs.reiserfs 3.6.19 (2003 www.namesys.com)5 D; Q1 W6 @0 r( g3 Q9 c2 x

. G. X# T  ~6 _  c) m+ [2 Z2 `4 }. R: y" v. b: J
A pair of credits:% b4 z: N, w! p! u% A" F" Z( `
Nikita Danilov wrote most of the core balancing code, plugin infrastructure,
' e+ b4 \' b( d, qand directory code. He steadily worked long hours, and is the reason so much of* U$ L/ r% Q$ T. X
the Reiser4 plugin infrastructure is well abstracted in its details. The carry, V* [' c7 z" @8 k$ u
function, and the use of non-recursive balancing, are his idea.( e- H% F; U7 e6 [2 q3 P
Oleg Drokin was the debugger for V3 during most of the time that V4 was under
0 z: g+ F9 Z( i5 X; S, E# B# |development, and was quite skilled and fast at it. He wrote the large write
- y. N3 s9 I+ j0 Y6 H' T* |optimization of V3.$ u5 G+ N( B& g
Guessing about desired format Kernel 2.6.21.5-smp is running.8 V, Z! {, S1 T
Format 3.6 with standard journal
! ]% \% Y  ^  T; H2 sCount of blocks on the device: 390624647 l1 _2 F) g0 n1 e- J
Number of blocks consumed by mkreiserfs formatting process: 9404; w* }  O; M, @: R1 j! {0 C; H
Blocksize: 4096* e) I4 J& [7 d0 X# u2 o% Y& l" M: F
Hash function used to sort names: “r5”$ c7 `! k/ V, b! l, f. n
Journal Size 8193 blocks (first block 18)
8 e4 C- ?. A7 kJournal Max transaction length 1024
/ K8 X  X: i# C3 w9 Iinode generation number: 0
0 d9 W: `# A0 e$ G1 yUUID: 2b06b743-8a4e-4421-b857-68eb2176bc50
  ~+ J9 ]" a( ^1 W  I3 x5 vATTENTION: YOU SHOULD REBOOT AFTER FDISK!9 j. T# P$ ~, T  ~: W
ALL DATA WILL BE LOST ON ’/dev/md0‘!
, J( E/ o8 @( i+ rContinue (y/n):y 注:在这里输入y ,就进行创建文件系统了;- T( R/ O8 D/ z7 l: K% i
Initializing journal - 0%…20%…40%…60%…80%…100%
3 \! M2 m7 {1 [# ISyncingok
( t, g. S4 x, x1 B. R' d& u0 kTell your friends to use a kernel based on 2.4.18 or later, and especially not a
! Z% }- k2 P' x% o3 Y( Kkernel based on 2.4.9, when you use reiserFS. Have fun.& c; L. F: y( T3 t  z; o
ReiserFS is successfully created on /dev/md0.. d: M; h# s9 U, A$ S
这样文件系统 reiserfs 就创建成功了。如果您想创建xfs文件系统,就用mkfs.xfs /dev/md0 ,其它文件系统也类似 ……3 \2 j6 w+ |2 U- \5 Y4 l
第三步:挂载文件系统并使用;
% K& i( M$ P6 h, T[root@linuxsir:~]# mkdir /mnt/data
( M6 x9 ?( f0 d% C9 _[root@linuxsir:~]# mount /dev/md0 /mnt/data* v& @5 `9 c) x) E9 _2 U1 h: {
[root@linuxsir:~]# df -lh /dev/md0
( B8 d7 s2 [+ W# }9 E/ s文件系统 容量 已用 可用 已用% 挂载点! \9 p5 T: V. p# x- k
/dev/md0 150G 33M 149G 1% /mnt/RAID03 C  n- f! A& z  R- A" c- Q
注: 这样就就/dev/md0 设备挂载到/mnt/RAID0上了。可以看到设备大小为150G。已使用33M,挂载点为/mnt/RAID0。我们可以向设备里存储文件;! ?2 g& u5 E8 e: }% v! c: z
其实根据Linux文件系统的结构,以及最新Linux软件方便易用的特点。我们完全可以把/home独立出来。把RAID设备挂载到/home目录上。凡是涉及用户或数据存储的,都可以放在/home中,比如数据库,网络服务器有关数据存储的,都指定到 /home中的文件夹中。所有的一切都是根据方便管理为前提。6 n3 Q& a2 t# q7 T7 b6 r
如果您的RAID是在安装系统后创建的,如果挂载到Linux现有目录下,要先做好相应目录的数据迁移到RAID设备中,然后再把RAID挂载到Linux目录中。比如你想把RAID挂载到/home目录中,可以先创建一个临时的目录,把RAID挂到这个临时的目录上,接着再把/home目录下的文件都移到 RAID上,然后再把RAID卸载,再重新挂载到/home中,这样/home的数据就完迁移了。! I4 y6 m7 Q) }0 [  d5 P: \
至于如何把操作系统安装或移到RAID上,不同的Linux发行版有不同的方法。Fedora或Redhat在安装的过程中,就为我们提供了在RAID1上安装系统。其它的发行版是否支持,不太知道,Slackware是不支持。如果您想把系统移植到RAID1中,可能需要安装好系统后,再进行移植。 感觉软RAID1在一块硬盘上做,没太大的必要,如果要做RAID1,也要在两个硬盘上(或两个属于不同硬盘的分区上来做)。" K- o* g- V  p0 k' D
如何开机挂载RAID设备,不同的发行版也有自己的方法,流程是先激活RAID,然后才是挂载。9 i7 ]/ i% F2 N8 v9 Z
4 软RAID的高级进阶及维护;( @% |6 _' A* D
RAID做好以后,并不是万事大吉了,还要进行日常维护;比如某个硬盘(或分区)坏掉,我们可以在不停机的情况下换上。或者我们为RAID做一个冗余的硬盘或分区,当RAID发生故障时,冗余硬盘或分区自动推上工作,能实现零停机任务。
  z, s! L+ a  A5 s; R- c+ d) v4.1 如何向已存在的RAID中,添加一块硬盘或分区;
- o- m+ ]( y% L4 p8 cRAID有几种模式,比如创建、管理。下面我们所说的就是RAID的管理模式Manage,也可以说是RAID的进阶应用。管理模式的目的,仅仅是为了把有问题的RAID成员换掉,或者为了管理的需要把其中一个RAID成员由另一个来替换,也可能是为了安全需要,让新增加的硬盘或分区当做RAID的备用(spare)成员;在管理模式中, RAID的真正成员个数并不改变。比如我们做RAID5是,用的是三个硬盘或分区。在增加RAID成员时,RAID5仍是三个成员,容量还是保持不变,如果三个RAID成员完全正常健康,新增加的成员,仅仅是备用(spare)成员。备用成员的用途就是当RAID的真正成员发生问题时,备用成员会马上启动,仅仅是起到安全的冗余的作用;
3 l* L( a. A5 k2 \5 y( K我们要向一个既已存在RAID中,添加或移除一个硬盘或分区,我们要用到mdadm 工具的 -f 和-r 以及-a 参数;8 W3 v- O$ V5 p! W
mdadm /dev/mdX -f RAID成员
7 L0 e; [9 S% j' R& ]mdadm /dev/mdX -r RAID成员. V# S( }& F( ]; y7 U4 o
mdadm /dev/mdX -a RAID成员1 ]& }8 f* z( P% R1 j6 r& p
注:9 E8 q0 ~8 [$ G  ^1 _* d% ?0 F8 y  Y
-f 同 --fail 表示把一个设备列为有问题的设备,以便用-r或--remove参数移除;
8 y; v" ~4 J5 C-r 同 --remove 表示把RAID中的一个成员移出RAID;6 W( c- C- f1 F! `% x
-a 同 --add 表示向一个RAID中添加一个成员;
0 R9 N) B& {) H0 c( c2 R--re-add 重新把最近移除的RAID成员重新添加到RAID中;
4 `3 r, ?& Q) K, b7 n5 H/ ]值得一提的是,这些参数的运用,必须是在RAID正常运行的情况下进行。其中RAID设备是/dev/mdX,X是一个大于0的整数,RAID成员是一个硬盘或分区。添加设备并不会把RAID的容量扩大,仅仅是为了添加备用成员,比如在RAID1、RAID5和RAID10中特加有用。当一个RAID成员发生故障的时候,要用这种办法来让新成员顶替工作;8 d/ }/ e% v1 L3 e9 a
举例:  _& Y2 x5 T0 f% h$ Z
[root@linuxsir:~]# mdadm /dev/md0 -f /dev/sdb3
9 w, S# ^1 C" O3 n3 r* e8 V: L: e[root@linuxsir:~]# mdadm /dev/md0 -r /dev/sdb39 g( D1 e9 t4 W
[root@linuxsir:~]# mdadm /dev/md0 -a /dev/sdb5+ O7 m' V3 c& k& c6 l2 l
注:当我们想把一个RAID的成员/dev/sdb3移除 RAID设备/dev/md0时,要首先标注它为有问题的(也可能是完全正常的,为了管理需要)。然后 用-r参数移除,接着用-a 参数再添加一个设备/dev/sdb5到RAID设备/dev/md0中;
/ C; n5 f+ q# T当我们用mdadm -D /dev/md0查看RAID的状态时,我们会看到RAID的详细信息。比如是否正常、RAID成员…… 下面是我们需要掌握的;9 v1 Q8 k" {1 b  j5 m: z  j+ @: c
Raid Level : 注:阵列级别;比如Raid59 V9 o  U$ [) N) x
Array Size : 注:阵列容量大小;' o! F8 S2 {& T9 S$ O& m% Q
Used Dev Size : 注:RAID单位成员容量大小,也就是构成RAID的成员硬盘或分区的容量的大小;. G& f: v) S" w% c9 n
Raid Devices : 注:RAID成员的个数;
7 K; v% T# L2 F4 H$ I1 rTotal Devices : RAID中下属成员的总计个数,因为还有冗余硬盘或分区,也就是spare,为了RAID的正常运珩,随时可以推上去加入RAID的;
; E8 H, E& s& IState : clean, degraded, recovering 注:状态,包括三个状态,clean表示正常, degraded 表示有问题, recovering 表示正在恢复或构建;' ?) E% ]1 o( Y. J2 L
Active Devices : 被激活的RAID成员个数;
! I4 Q) u5 e+ g' Y& C$ b% H+ J0 M+ fWorking Devices : 注:正常的工作的RAID成员个数;' H9 E9 ~, W/ o# K' Q" t7 p
Failed Devices : 出问题的RAID成员;
. Q( f: d! L% Y! P) USpare Devices : 备用RAID成员个数,当一个RAID的成员出问题时,用其它硬盘或分区来顶替时,RAID要进行构建,在没构建完成时,这个成员也会被认为是spare设备;9 u0 ~7 T0 [/ g" l5 g& ~  A1 I
Rebuild Status : 注:RAID的构建进度,比如 38% complete ,表示构建到 38%;. j) C4 o8 u+ |5 y6 {6 [0 [
UUID : 注:RAID的UUID值,在系统中是唯一的;5 A1 l7 y7 P; P; D5 R0 b8 X
Number Major Minor RaidDevice State, f8 {  d8 Q( H2 c3 L- w
0 8 17 0 active sync /dev/sdb1 注:表示这个成员是激活的;
0 v% b) S- |$ \! u" `' [+ D1 8 18 1 active sync /dev/sdb2 注:表示这个成员是激活的;; \' w( x; t2 O" k/ y
4 8 19 2 spare rebuilding /dev/sdb3 注:未被激活,正在构建中的成页,正在传输数据;1 G6 B2 a- }) s7 G
3 8 49 - spare /dev/sdd1
  C( n4 l! j. r# _6 M注:spare /dev/sdd1 表示/dev/sdd1是RAID的备用成员,当RAID的正式成员/dev/sdb1、/dev/sdb2或/dev/sdb3中有一个出问题的时候,这个备用成员会自动进行工作的。这个并不是必须的,可以用添加RAID成员的办法来添加,也可以在创建的RAID的时候添加;) k" [) |1 S  ~6 Z! s3 W9 o
4.2 如何为一个现有RAID扩充容量;
9 e1 y/ w; ?( l" E; v3 b! Y" H在RAID的管理模式中,我们提到增加RAID成员的办法,如果RAID所有真正成员都是健康的,这个成员就进入备用(spare)状态。只有当真正成员有问题时,这个备用成员才启用顶替出问题的成员来工作。
$ ?' @( F6 @( Z但我们能不能向RAID添加一个新成员,并且让他成为RAID的真正成员,并且达到为RAID扩充容量呢?比如有一个RAID5,用的是3个20G 的分区做的,其总容量是(3-1)x20=40G,我们能否为这个RAID5新增加一个20G的分区,并且让其成为这个RAID5真正的成员,并且达到扩充容量的目的,也就是说让这个RAID5有四个真正的成员,其容量为(4-1)x20=60G。
. ~# r8 b: y* V  p在硬RAID中,这个工作比较容易,但在软RAID中,是否能实现呢?答案是肯定的,这种情况仅针对已经做好的RAID,并且已经在存储过程中发现RAID容易不足的情况下使用。如果是一个新做的RAID,我们发现计划错了,我们重新做一次就行了,没必要用扩容的办法。
* T8 a2 C$ k" S我们为现有的RAID扩充容量,利用的就是RAID的Grow模式,中译为RAID的增长模式;应用范围是RAID1、RAID4、RAID5、RAID6。* G: p4 P% g; f  g6 a
RAID扩容流程:( x& m. x( G, @/ K. S" X" Y$ C' j' G
向一个已经存在的RAID中添加一个成员-》执行扩容指令
! y. a( y5 E; k0 W$ o注: 在这里我们要用到RAID的管理模式中的添加成员的办法。也就是用到mdadm 中的-a 参数,请参考上一节的内容。这时添加的成员是备用(spare)成员,我们要把备用成员“推”到位置上。这时我们要用到mdadm的Grow模式;
4 t, c/ \& @! ?5 d举例说明:+ [' W* J3 e8 E6 H% X
比如我们做的RAID5,由三个硬盘分区/dev/sdb1、/dev/sdc1、/dev/sdd1构成,这时的RAID5真正成员就是3个。当我们添加一个分区/dev/sdb2到这个RAID5时,新增加的这个sdb2就是这个RAID5R 的备用(spare)成员。比如已有的RAID5的设备是/dev/md0;
4 l3 R' }1 b6 J8 s& i$ n3 d$ \  P首先,查看RAID状态;
! Y  M' F% j4 E6 b1 m[root@linuxsir:~]# mdadm -D /dev/md0+ N- q; u3 R4 |' g
/dev/md0:- g, c/ `4 f; U/ y, ^  D
Version : 00.90.03
" O3 f! |/ B) A. s% OCreation Time : Tue Aug 7 01:55:23 2007
1 V- w$ I$ y3 |$ b( f* TRaid Level : raid5 注:RAID级别;9 s0 i! V; z1 k/ j- e, Q
Array Size : 39069824 (37.26 GiB 40.01 GB) 注:RAID容量是 39069824+ X, K4 W1 W3 A
Used Dev Size : 19534912 (18.63 GiB 20.00 GB) 注:RAID中每个成员的容量是19534912+ f* ^4 J7 P' t4 ?
Raid Devices : 3 注:RAID真正成员是3个设备构成;; C! Y* u% [% n4 H# B
Total Devices : 3 注: 总共设备是3个;+ H. l: a# q1 C7 d2 Q+ y! ?
Preferred Minor : 07 i: Z; O# h+ D8 Y5 u/ L( l5 E& l
Persistence : Superblock is persistent
. {5 e: J2 k4 S; _2 w4 |Update Time : Tue Aug 7 02:02:33 2007
% v/ S: d& M' `7 t9 cState : clean 注:状态正常;
& s! I' h0 o& U& E+ R5 _7 OActive Devices : 3 注:激活的设备是3个;其实就是RAID真正成员正常激活的个数;2 A3 i& G8 n* Q# {0 G/ ?7 @/ C
Working Devices : 3 注:正常工作的设备是3个;
6 l2 O: J: V1 I8 [Failed Devices : 0 注:有问题的设备是0个;
3 D3 O: W- L, lSpare Devices : 0 注:备用设备是0个;
4 O4 ~0 k/ M. Y3 D& R* |4 c# d% |( {Layout : left-symmetric5 b& |' m3 O5 a4 `' `
Chunk Size : 64K
; T, H& Q  a9 q/ M3 HUUID : faea1758:0e2cf8e0:800ae4b7:b26f181d 注:RAID的UUID;
! w& e3 @7 c3 l5 ?Events : 0.16
: ^. O6 k# v" rNumber Major Minor RaidDevice State2 `! h: A% n2 G) m/ x4 ]

( A* C  O# U# z6 q. ^
0 r' i7 h; a8 {; b7 P' [. ?  e2 j# L. P6 R

* h' _4 G* N- w8 Y4 }, r" m4 z" _0 8 17 0 active sync /dev/sdb1 注:RAID真正成员/dev/sdb1
$ s% @- Q- f+ N; t/ o/ n" P1 8 33 1 active sync /dev/sdc1 注:RAID真正成员/dev/sdc1
) V: v) W! q# e9 G! C2 8 49 2 active sync /dev/sdd1 注:RAID真正成员/dev/sdd1
! F2 A0 ]2 e$ o' q5 p其次,我们为这个RAID5添加一个成员;
) A3 P2 j3 ~1 J2 V. q把/dev/sdb2添加到RAID设备/dev/md0,然后查看RAID的状态及详细信息;- w5 }/ i+ h- F( o( ^' p! h6 |
[root@linuxsir:~]# mdadm /dev/md0 -a /dev/sdb2 注:添加分区/dev/sdb2到/dev/md0中;
0 w( t. _0 M1 h5 k! `mdadm: added /dev/sdb2
2 N' F+ R6 Z! L[root@linuxsir:~]# mdadm -D /dev/md0 注:查看/dev/md0的详细信息;! b, p* P- C& R/ D
/dev/md0:
1 w5 f- Q- \& K  ^* _% sVersion : 00.90.03( _) N* M2 s3 A; x8 {) b
Creation Time : Tue Aug 7 01:55:23 2007
$ o4 P. [( q2 z+ c1 O  W, P+ JRaid Level : raid5 注:RAID级别;raid5
0 U$ j5 C2 }/ L/ g) X. uArray Size : 39069824 (37.26 GiB 40.01 GB) 注:RAID容量是 39069824& t: r* B) x9 I  d3 N
Used Dev Size : 19534912 (18.63 GiB 20.00 GB) 注:RAID中每个成员的容量是19534912" C. q' H9 ]* O$ q/ U
Raid Devices : 3 注:RAID真正成员是3个设备构成;
8 b4 U+ s* V4 [$ Y5 RTotal Devices : 4 注: 总共设备是4个;
$ }2 R7 H$ Q- J$ q+ ?  }% yPreferred Minor : 0
; n) G/ l( J0 |- Z4 \- ^+ ZPersistence : Superblock is persistent
/ Y- y' }+ d  n- KUpdate Time : Tue Aug 7 02:14:13 2007) \0 K" V( g+ {- @
State : clean 注:状态正常;3 c" ~+ b& y' O* ]$ U9 n
Active Devices : 3 注:激活的设备是3个;其实就是RAID真正成员正常激活的个数;+ g/ L* l. @3 }! R8 @/ q
Working Devices : 4 注:正常工作的设备是4个;5 p% d0 [2 s/ m$ D8 i! Y6 B
Failed Devices : 06 z. r: G8 J. n
Spare Devices : 1) x& Z, y& v* c" W0 R
Layout : left-symmetric  C& ]$ y6 }  L; G4 [$ S
Chunk Size : 64K2 C  ?) ?8 s" U1 Q
UUID : faea1758:0e2cf8e0:800ae4b7:b26f181d
+ T! |! o, _+ b7 h0 u9 M9 ZEvents : 0.188 i! J+ \9 s- S" a& c7 y
Number Major Minor RaidDevice State/ J2 V8 l/ q: `) D8 b, Z. Y" q; J
0 8 17 0 active sync /dev/sdb1 注:RAID真正成员/dev/sdb1* y8 Y8 j, c  j3 j
1 8 33 1 active sync /dev/sdc1 注:RAID真正成员/dev/sdc1& `  x8 h. E' P% n
2 8 49 2 active sync /dev/sdd1 注:RAID真正成员/dev/sdd1
5 b. I! M" U! @: E% r3 8 18 - spare /dev/sdb2 注:注:RAID备用成员/dev/sdb26 B7 K* E$ M# I0 I
添加/dev/sdb2到/dev/md0后,我们发现RAID的组成设备总数由3个变成了4个,但真正成员个数并没有变化,多出了一个备用成员/dev/sdb2。但/dev/md0的容量并没有变大。 所以这时我们要为RAID来扩容,解决办法就是让/dev/sdb2成为RAID的真正成员,RAID的容易由 40G扩展到 60G;
2 h3 k* j; t$ |& I, |第三,为RAID进行扩充容量;% o) a$ m6 S1 N6 M0 M  d0 d, P8 B
在这里我们要用到RAID的Grow模式,也就是增长模式。扩充模式,极为简单,有--size参数,-n参数 --size是指大定RAID的大小,这个可以省略,具体由你所做的RAID级别而定。 -n 代表RAID真正成员的个数。在这个例子中,RAID5真正成员是3个,后来我们又添加了一个备用成员/dev/sdb2进去。我们所做的就是把这个备用成员“推”到真正成员的位置上。也就是说RAID的真正成员由3个变成4个。只是这一简单的指令,就可以让RAID5容量增加起来。: m' u! c* T. E% p. j: P
[root@linuxsir:~] # mdadm -G /dev/md0 -n4
6 P6 q+ f3 r) \4 I; Pmdadm: Need to backup 384K of critical section
% q7 K* r& d! r, x6 tmdadm: … critical section passed.# g2 l# h) g; O' k) _$ Y* \
然后我们查看RAID的详细信息;
5 I: q/ M' @' T) v3 k% r3 M0 }+ l[root@linuxsir:~] # mdadm -D /dev/md01 b/ r6 \( |5 e4 ~' Z
/dev/md0:
& o2 E. G  T" }, p! wVersion : 00.91.03, Z: M4 t' G2 \) B# q% z
Creation Time : Tue Aug 7 01:55:23 20078 r' Z2 j7 b; X" I
Raid Level : raid5
% R6 _8 x# {* J+ ]7 E9 [Array Size : 39069824 (37.26 GiB 40.01 GB) 注:RAID的容量,我们发现RAID的容量并没有增大,这是因为构建没有完成;等构建完成时就会改变过来;% h/ {  x. b+ C6 j3 j) n
Used Dev Size : 19534912 (18.63 GiB 20.00 GB)( c; \) y( n# }! \4 r' I, Q
Raid Devices : 4
! E1 b! V' p# e2 z  W4 J4 VTotal Devices : 4
6 i" y7 Q$ j" ~  `* GPreferred Minor : 0
0 @$ \2 A. v  ^! C) o) [* G7 S5 k9 E% RPersistence : Superblock is persistent
3 |1 |* T4 z% p6 q* sUpdate Time : Tue Aug 7 02:36:06 2007; U! P' ]- X+ D3 H9 L' W& _
State : clean, recovering 注:正常,恢复中;
" a+ v3 I  i- c. GActive Devices : 4 注:RAID的正式成员已经变到4个;
7 z" ]5 Y' A# M# O4 M6 m5 D4 D! xWorking Devices : 4
$ I; [* m( }; {Failed Devices : 0
8 G- \7 G, D$ v$ qSpare Devices : 0 注:备用成员由1个,减少到0个;说明已经把RAID备用成员推到了RAID的正式成员中;+ }3 w: X9 s, G3 O# O
Layout : left-symmetric
3 [: S2 r; d% G5 L. S; k: gChunk Size : 64K! f6 b$ D+ p* ^8 q2 R  T' M
Reshape Status : 17% complete 注:RAID重新构建状态,已经完成17%;目前并未完成构建;
0 [1 s4 `' ]* {$ i* g) r, bDelta Devices : 1, (3-》4) 注:RAID的正式成员增加一个,由3个到4个;
! g; L7 i4 X6 w  R" Y  xUUID : faea1758:0e2cf8e0:800ae4b7:b26f181d* t: S- ]' M3 {8 ~2 H! Y/ `
Events : 0.100% E4 W, a( F* p) H, O) {: a  z5 o' s/ `2 w
Number Major Minor RaidDevice State
, e, T7 B2 l( B8 ]- `% ~+ K0 8 17 0 active sync /dev/sdb17 a( q. C& ^1 B. F1 z( K2 t
1 8 33 1 active sync /dev/sdc1: A5 u: \* O' C* `. S
2 8 49 2 active sync /dev/sdd1
6 D& f) z) e4 G: i+ f; V: x: }, q3 8 18 3 active sync /dev/sdb2 注:/dev/sdb2已经由spare改变到 active ,也就是说由备用: G' ~, C4 v  N9 {* |
当执行完增容后,我们发现RAID的容量并没有增大,这是因为构建没有完成,等RAID完成构建后,RAID的容量就会改变为 19534912x(4-1)=58604736K=60G;构建进度也可以cat /proc/mdstat 来查看。
5 h) g+ W$ \4 v7 i, G$ B新增加一个RAID正式成员的办法,不会让RAID原有的数据丢失,也不会破坏原有的数据。所以这种办法对RAID已经存储大量数据,当容量发生危机时而不损失原有数据的前提下,所采用的一种安全可行的扩容办法; 当然扩容后,你要修改 /etc/mdadm.conf;: }" _/ Z* ^/ M! h$ S; F
4.3 RAID正式成员个数达不到RAID启动要求时,如何启动RAID;. X4 f2 v, ?8 q; F
可能存在这样一种状况,当RAID的一个正式成员挂掉后,这时RAID按以前说的常规办法是不能启动的。这时我们要强制启动,要用到--run 参数;比如当做RAID5时,我们用到了三个硬盘或分区,当其中有一个挂掉,按RAID5的特点来说,数据一样是安全完整的,但RAID5启动按常规办法是必须要达到做RAID时所指定的正式成员个数,这时按常规启动办法是不行的,我们要用到--run参数;
* N1 \! U, a3 Q/ [我们举个例子。比如RAID5正式成员有3个/dev/sdb1,/dev/sdb2,/dev/sdb3,我们只用/dev/sdb1和/dev/sdb2来启动RAID5;4 X) e/ V3 `, L4 S% B6 Z& Y5 W# p
[root@linuxsir:~] # mdadm -A --run /dev/md0 /dev/sdb1 /dev/sdb26 \3 U- |. C: b5 |+ z$ n3 u
5 软RAID设备使用方向的探讨;5 e" O: D6 y/ N' X
对于软RAID是把几个同容量的物理磁盘或分区组成一个大的虚拟设备来用,我们应用方向是什么呢?通过RAID的定义,我们可以知道RAID是为了解决容量、读写效率以及磁盘冗余安全而提出来的。% j4 f: t) q/ E* V
5.1 仅仅是为了扩充存储可用空间,是否必需做RAID;
5 a3 }8 X4 X( s5 P$ u1 J2 F如果是仅仅解决容量问题,我看大可不必用RAID。因为LVM比RAID更为灵活,无论怎么做,都不会带来容易上的损失。而只有RAID0和 LINEAR 级别才不会带来容量上的损失,RAID1、RAID5和RAID10由于要有安全冗余,所以RAID的容量必然减少;8 Q3 k8 \- a8 }+ D+ U
+ F) b* J$ D. [% F, I% @

+ t% S+ `2 u' ]; dLVM 技术能把所有空闲硬盘或分区结合在一起来使用,并不要求每个分区或硬盘大小容易是一致的,而RAID必须要求每个RAID成员容量大小相同,如果不相同,以最小的成员的容易计算,这个损失还不算,还要有安全冗余带来的容量损失,比如把两块80G的硬盘做成RAID1,这时的RAID1是一块硬盘的容量。LVM做好后,也相当于一个空白的虚拟设备,可以在上面划成一个分区来使用,也可以划分几个,如果划成几个,我们还可以自动调整分区的大小。而RAID一但做好,如果再进行分区,分区的容量是没办法自由调整的;
+ g: Z' t, o. ?有的弟兄会问,我是不是做好RAID,然后在RAID上再做LVM,也就是RAID+LVM模式。这种方案实现起来并不困难,但对于软RAID来说,这种方案是否真的价值? 我们用RAID的目的无非是“容量+读写效率+安全”。我们有必要把做好的RAID再分割的四分五裂吗? 我感觉没必要,因为对于存储设备来说,每增强一项管理技术,就意味着风险,这种风险一是来自于管理员技术水平,二是来自于设备老化。另外集中于不分区的存储设备,也能为数据迁移和系统管理带来方便;
. `  q" d3 x" m* X( r3 I5.2 在同一个硬盘做RAID是否有必要;
8 ]+ m- b5 h' E* E& W  l在同一块硬盘上做RAID是否有必要,如果您是想提高数据读写速度,还是有必要的。RAID0就能为你带来这种高速存储的快感。如果您想在同一块硬盘上做软RAID,想同时兼顾效率和安全,我看大可以免了。因为硬盘一坏掉,什么重要的数据都会一锅烂;9 @' F2 @: a& U! q
5.3 软RAID的合理使用方向;" n9 U1 ]' P& V) e+ J% P
目前支持SATA主板的机器只能技术最多四块硬盘。比如四个80G的SATA硬盘,IDE硬盘也同理;我们要根据自己的使用方向来做RAID。下面我根据一个示例来说明RAID的合理使用方向;% v8 P1 G' a& _( p; O
第一个硬盘分区情况:# W; t7 y% p7 V, y; T' ~+ W+ i# R
/dev/sda1 20G大小
& D- H) {$ a4 L* d/dev/sda2 20G大小
9 @! `$ ]: W( y! B# K: z5 I/dev/sda3 20G大小! F. ~$ ~, O' }; l, M; f3 D; a
-----/dev/sda5 swap 分区 -内存两倍大小4 O$ m; p" b9 B+ `- p* r# _3 C
-----/dev/sda6 用于/tmp 2G大小;2 r5 G5 z, w; r: B, F
-----/dev/sda7
4 R5 A+ z% Y0 y* k* k, b注:我们首先把操作系统安装到第一个分区/dev/sda1 ,交换分区是/dev/sda5,/dev/sda6为临时/tmp的目录;那/dev/sda1和 sda2、sda3、sda7是用做什么的呢?可以用来安装系统。我们设计的是仅安装系统,涉及数据保存的,都放到RAID上。比如我把sda1和sda2安装同样的系统,把由第二三四块硬盘做好的RAID挂在/home上,所有应用数据都存在RAID上。当sda1系统被破坏时,我们可以用最短的时间启用sda2的系统,并在sda2上装载由第二三四块硬盘上做的RAID。
- ?2 E3 _( ~- n; b1 f第二三四个硬盘,我们可以用来整块硬盘来做RAID, 不必为每块硬盘分区。比如为了读写效率,我们可以做成RAID0,为了安全,你可以做RAID5。 如果做RAID0设备的容量是3x80G=240G,如果做RAID5,RAID5设备的容量是(3-1)x80=160G。有的弟兄可能会说,为什么我不能把磁盘进行分区,然后做RAID0呢?RAID10也就是RAID0+RAID1的组合,安全和效率都有。这种方案也是可以的,但您必须做到,当有一个硬盘坏掉时,不会影响数据的整体安全性。也就是说,当一个硬盘坏掉时,另外两块硬盘组合起来,仍能组成一份完整的数据。当RAID中的一块硬盘坏掉时,我们能通过更换硬盘,简单的修复,就能让RAID正常运行起来,而且数据是完整的。如果您对数据安全极为重视的,在做软RAID的过程中,能做到这点,这个RAID方案就属于你。
) U& z/ a( G  Z& q所以在做软RAID时,首先要明白自己的目的是什么,然后再来根据目的判断自己的所要达到的效果。如果是简单追求的是读写效率,我们就不必考虑数据的安全性。如果是数据的安全性对我们来说极为重要,我们就要判断,当一块硬盘坏掉时,是否影响数据的完整性!比如,我们用两块硬盘来做RAID5或RAID10,可以这样说,没有一点安全性的。无论您怎么分区和组合,也不会为您带来一点安全感。- m  D3 G7 K9 k$ [2 h4 ~5 K
6 常见问题及处理;( w$ Q( q" [* d2 k
涉及一些补充和增订的内容,我们在这里一一列出;+ B! l" N: b* }) ]( f( u) k- q: f
6.1 如何清除一个RAID成员的超级块存储存的RAID信息;6 r6 a; \0 C8 u$ \1 Y1 p, g
RAID成员在 superblock中所存储的RAID信息是极为重要的,我们可以根据这个信息轻松恢复RAID。
' B4 h# B1 e% H" I8 b  x# ~mdadm --zero-superblock RAID成员;
' a$ a$ v& m& G' v9 g. D如果你确认RAID成员这个成员对你没任何用处,你已经把这个成员移除RAID,并且您想把这个设备另作他用。这时你可以清除其 superblock的信息。比如;( z( X. t$ Q8 u
[root@linuxsir:~] # mdadm --zero-superblock /dev/sdd3
. X/ a. P3 C; a1 B这个示例就是清除/dev/sdd3中的超级块中所存储的RAID信息;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-21 06:50 , Processed in 0.356188 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表