Linux software RAID

来源:互联网 发布:电信是什么网络模式 编辑:程序博客网 时间:2024/06/07 02:00

RAID 0: (Disk Striping)

通过使用RAID 0,RAID Controller可以试图将数据平均的分布到RAID set中去进行存储。比喻来说,可以将Disk比作是装食物的盘子,而将数据比喻成蛋糕,比方说现在你用四种口味的蛋糕,分别为巧克力,香草,樱桃和草莓 。RAID 0的初始化过程就像是将蛋糕切片,并且把切片分别发到不同的盘子当中去。而RAID 0的driver使得operating System感觉起来像是这个蛋糕完整无缺地,没有被分割地放在一个大的盘子当中去。 比如说,有四块9GB的硬盘被配置到RAID 0的RAID set中去,这时,操作系统就仅会感觉它只拥有一块36GB的硬盘。

RAID 0的目标是在多个存储设备上容纳一个大的文件系统,同时提供data redundancy. RAID 0的优点是数据访问速度。一个文件被平均存储在4个disk上,则最快读取该文件的速度可以提高四倍(多块硬盘同时读取4个block并发不用等待I/O)

RAID 0可以容纳多个容量不相同的disk。当RAID在最新的disk上用尽striping 空间后, 它会在其他盘的剩余空间上进行striping。 当这种情况发生后,在这部分空间上进行数据访问的速度会降低,因为可用的RAID drive总量变少了。 如现在又四块盘做成RAID 0, 大小分别为5GB 5GB 5GB 6GB。 第四块盘的最后一个G的空间被striping 后, 如果访问其上的数据,则仅有一个drive可用,而之前的5GB可以从4个DRIVE同时读取。

RAID 1: (Disk Mirroring)

RAID 1, 简单来说,数据除了会被写入到目标盘,还会被clone到另一个 disk。当在RAID set中的一块盘fail时, 另外一块盘还可以正常工作。当坏盘被替换或修复后,数据会自动从当前正常工作的盘复制到新替换的盘。所以,RAID 1 使得热备空闲盘成为可能,当primary disk 出现错误的时候,热备空闲盘会被自动使用来替换损坏的盘。

RAID 1提供了数据冗余,但是失去了RAID 0速度优势。RAID 1的一个缺点是每次OS想RAID 1的磁盘写数据的时候,都需要写两次。当然这是software RAID才会使用这种策略, 当使用hardware RAID的时候,OS仅写一次到RAID controller,由硬件RAID controller来完成写操作到mirror disks。

 

RAID 1的一个局限是他所能使用的disk总量是两个disk中最小的disk的磁盘容量。

image

 

RAID 4:

RAID 4和RAID 0 类似, 此外,RAID 4 通过将错误校正和奇偶校验信息写入另外一块盘parity disk。 所以 要组成RAID 4至少需要三块盘。而且自多仅允许一块盘损坏。如果损坏盘被替换掉以后,其上存储的原来的数据可以在parity disk帮助下恢复出来。

RAID 4结合了RAID 0的速度优势和RAID 1的数据冗余特点,但是,它最主要的缺点是它上存储的数据时striping的,但是parity 信息不被striping。所以,每次数据被写入RAID set的数据部分的时候,都需要更新parity disk上的数据,所以parity disk很容易成为瓶颈。正是因为这个原因,RAID 4 没有被广泛使用。

 

RAID 5:

RAID 5是为了克服RAID 4的缺点而出现的, 对于数据部分它同RAID 4使用striping存储,同时和RAID4 不一样的是对于parity部分,将和数据部分一起,进行striping存储。因此,RAID 5很好的将RAID 0 和RAID 1的优点结合起来。

RAID 5 最少需要三个disk或partition

 

image

 

开始之前

对于SCSI或IDE的hardware RAID,有专门的hardware-based RAID controller。一般来说RAID controller有自己的BIOS,你可以在你的系统完成POST(Power on self test)自后来多RAID controller进行配置。Hareware-based RAID 对于操作系统来说完全透明,硬件controller会完成所有的工作而不需要操作系统的干预。

如果Hardware-based RAID controller 不可用,可以使用software RAID。

IDE Drives

为了节省成本,许多小公司的系统会使用IDE disk,但是这会有很多限制。

1 IDE cable的长度很受限,仅有几英尺长。

2 IDE 不支持热交换。也就是说,不可以在系统运行时对IDE设备进行替换。

3 一个IDE controller只能支持两个设备

4 IDE 总线的性能会随着新的设备的连入而变差

5 IDE总线的一个设备的failure会使得另外一个连在同一总线的设备工作不正常。这将是致命的当一个RAID set的两个设备连在同一个cable上。

因此,在使用RAID的时候,构成RAID set的disk来自不同的controller。

Serial ATA Drives

SATA正在替换IDE disk,对于IDE来说,它拥有许多优点:

1 数据cable最长1米

2 SATA拥有更好的错误检错功能

3 每个cable仅有一个SATA设备相连,可以进行热交换,也就是在系统运行的时候进行替换SATA设备

4 没有类似于IDE设备的master和slave之分,更容易配置

5 IDE设备的最高速率为133MB/s 而SATA的是150MB/s,并且在未来有望达到600MB/s

SCSI Drives

SCSI hard disk 拥有更多优点,使得其对于IDE和SATA硬盘来说,更适合来实现RAID。

1 SCSI controller具有更强的容错功能,总线上的一个设备出错很少会影响到其他连着SCSI接口总线上的设备

2 SCSI cable最长可以达到25米,使得SCSI设备更适合数据中心应用

3 Much more than two devices may be connected to a SCSI cable bus. It can accommodate 7 (single-ended SCSI) or 15 (all other SCSI types) devices.

4 一些SCSI设备支持热交换。.

5 SCSI 支持高达 640 Mbytes/s 的传输速率。.

对于software RAID来说,是使用partition还是使用整个disk?

通常来说,在一个disk上的模型parition上做RAID,在另外一些parition作为正常的分区使用不是个好主意。显而易见,这样的话如果一个disk failure会导致整个该磁盘上的整个系统不可用。

如果你决定使用software RAID,一个disk上的所有parition都应该被划到RAID set当中,通常简单的做法是对用于software RAID的disk来说,只建立一个parition。

 

Disk /dev/sdb: 10.7 GB, 10737254400 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00072406

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1305    10482381   fd  Linux raid autodetect

Disk /dev/sdc: 21.4 GB, 21474508800 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000053ad

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1        2610    20964793+  fd  Linux raid autodetect

注意,建立software RAID之前备份好你原有的数据

Software RAID 会建立一个虚拟的disk, 这个disk是由物理上一个或多个disk或partion组成。建立好的RAID disk要被使用,就首先要被格式化。所以其上的原有数据将会被破坏。

在single user mode 下配置Software RAID

因为你将要修改你的disk结构,所以为了防止在你修改的同时,有人使用你需要创建software RAID disk而使用的物理disk或partition,所以要使你的系统处于single user mode 来杜绝此类情况的放生。

init 1 # runleve set to 1

 

配置software RAID

准备好你将在哪些disk或parition上建立software RAID。这里假设在如下三个分区上建立一个RAID 5

/dev/hde1/dev/hdf2/dev/hdg1

注意到这三个partition来自不同的disk,分别是hde, hdf和hdg.

如果你需要查看系统上所有的可用的filesystem,包括已经mount的和unmount的。使用fdisk –l和df –k 来查看详情.

[root@bigboy tmp]# fdisk -lDisk /dev/hda: 12.0 GB, 12072517632 bytes255 heads, 63 sectors/track, 1467 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytes   Device Boot    Start       End    Blocks   Id  System/dev/hda1   *         1        13    104391   83  Linux/dev/hda2            14       144   1052257+  83  Linux/dev/hda3           145       209    522112+  82  Linux swap/dev/hda4           210      1467  10104885    5  Extended/dev/hda5           210       655   3582463+  83  Linux....../dev/hda15         1455      1467    104391   83  Linux[root@bigboy tmp]#[root@bigboy tmp]# df -kFilesystem           1K-blocks      Used Available Use% Mounted on/dev/hda2              1035692    163916    819164  17% //dev/hda1               101086      8357     87510   9% /boot/dev/hda15              101086      4127     91740   5% /data1........./dev/hda7              5336664    464228   4601344  10% /var[root@bigboy tmp]#

 

你不希望其他人使用你将要建立software RAID的disk或partition,所以先将你要是有的/dev/hde1 /dev/hdf2 /dev/hdg1  unmount掉。

接下来,使用fdisk来设置你要使用的partition:

[root@bigboy tmp]# fdisk /dev/hdeThe number of cylinders for this disk is set to 8355. There is nothing wrong with that, but this is larger than 1024,and could in certain setups cause problems with:1) software that runs at boot time (e.g., old versions of LILO)2) booting and partitioning software from other OSs  (e.g., DOS FDISK, OS/2 FDISK)Command (m for help):
输入m命令来获取帮助。
/dev/hde1 是/dev/hde上的第一个parition,使用fdisk的t命令来指定partition number和设置type code。如果不知道对应得type code是L命令来获取帮助。
Command (m for help): tPartition number (1-5): 1Hex code (type L to list codes): L.........16  Hidden FAT16    61   SpeedStor       f2  DOS secondary17  Hidden HPFS/NTF 63  GNU HURD or Sys fd  Linux raid auto18  AST SmartSleep  64  Novell Netware  fe  LANstep1b  Hidden Win95 FA 65  Novell Netware  ff  BBTHex code (type L to list codes): fdChanged system type of partition 1 to fd (Linux raid autodetect)Command (m for help):为了确保你上面所做的改动已经被保存下来,是fdisk p命令来查看当前的partition table。
Command (m for help): pDisk /dev/hde: 4311 MB, 4311982080 bytes16 heads, 63 sectors/track, 8355 cylindersUnits = cylinders of 1008 * 512 = 516096 bytes   Device Boot    Start       End    Blocks   Id  System/dev/hde1             1      4088   2060320+  fd  Linux raid autodetect/dev/hde2          4089      5713    819000   83  Linux/dev/hde4          6608      8355    880992    5  Extended/dev/hde5          6608      7500    450040+  83  Linux/dev/hde6          7501      8355    430888+  83  LinuxCommand (m for help):

最后使用fdisk 的w命令将partition table 存储在硬盘上。对于剩下的disk或partition做同样的操作。接下来,开始准备RAID set:因为所以需要的partition都已经准备完毕,需要将它们合并到一个新的RAID partition当中去,然后我们会对新的RAID partition进行格式化并且执行mount操作。

创建RAID Set

使用mdadm命令。

[root@bigboy tmp]# mdadm --create --verbose /dev/md0 --level=5 /   --raid-devices=3 /dev/hde1 /dev/hdf2 /dev/hdg1

其中 –create 是创建一个RAID set, --level=5是RAID 5 --raid-device是我们刚才准备要做RAID的三个partition。

确认RAID是否被正确初始化

raid set创建完成后,可以通过查看/proc/mdstat 来查看其状态。

root@bigboy tmp]# cat /proc/mdstatPersonalities : [raid5]read_ahead 1024 sectorsmd0 : active raid5 hdg1[2] hde1[1] hdf2[0]      4120448 blocks level 5, 32k chunk, algorithm 3 [3/3] [UUU]unused devices: 

格式化新的RAID Set

mkfs.ext3在new RAID set上创建ext3 文件系统

[root@bigboy tmp]# mkfs.ext3 /dev/md0mke2fs 1.39 (29-May-2006)Filesystem label=OS type: LinuxBlock size=1024 (log=0)Fragment size=1024 (log=0)36144 inodes, 144192 blocks7209 blocks (5.00%) reserved for the super userFirst data block=1Maximum filesystem blocks=6737100818 block groups8192 blocks per group, 8192 fragments per group2008 inodes per groupSuperblock backups stored on blocks:         8193, 24577, 40961, 57345, 73729Writing inode tables: done                            Creating journal (4096 blocks): doneWriting superblocks and filesystem accounting information: doneThis filesystem will be automatically checked every 33 mounts or180 days, whichever comes first.  Use tune2fs -c or -i to override.

创建mdadm.conf 配置文件

系统不会记住构成你RAID set的所有组件,所以你需要将这些信息记录到mdadm.conf 文件中去。使用mdadm –detail –scan –verbose > /etc/mdadm.conf

为新的RAID set创建一个挂载点

mkdir /mnt/raid

编辑/ect/fstab 开机自动挂载

/dev/md0      /mnt/raid     ext3    defaults    1 2

mount RAID set

mount –a or mount /dev/md0 /mnt/raid

检查NEW RAID的状态:

/proc/mdstat

原创粉丝点击