CentOS7模拟RAID10、LVM逻辑卷管理和磁盘配额

RAID10是RAID1+RAID0技术的一个“组合体”,RAID10技术需要至少4块硬盘来组建,其中先分别两两制作成RAID1磁盘阵列,以保证数据的安全性;然后再对两个RAID1磁盘阵列实施RAID0技术,进一步提高硬盘设备的读写速度。
当用户想要随着实际需求的变化调整硬盘分区大小时,会受到硬盘“灵活性”的限制,这时就需要用到另外一项非常普及的硬盘设备资源管理技术了,即LVM(逻辑卷管理器),LVM可以允许用户对硬盘资源进行动态调整。
废话不多说,下面我们就来模拟制作RAID10和LVM吧。

一、部署RAID10+备份盘

首先在虚拟机上添加5块新的虚拟硬盘,然后启动虚拟机。
未分类
使用fdisk -l命令,确认5块新硬盘是否都已被系统认到。
未分类
生产环境中用到的服务器一般都配备RAID阵列卡,而我们现在是用mdadm命令在Linux系统中创建和管理软件RAID磁盘阵列,它涉及的理论知识和操作过程与生产环境中的RAID阵列卡是一样的。

表1:mdadm命令的常用参数和作用
未分类

接下来,使用mdadm命令创建RAID10,名称为“/dev/md0”。
其中-C参数表示创建一个RAID阵列卡,-v显示创建过程,/dev/md0为创建的设备名称,-a yes表示自动创建设备文件,-n 4表示使用4块硬盘,-l 10表示RAID 10方案,-x 1表示有一块备份盘,最后跟上5块硬盘设备的名称。

mdadm -Cv /dev/md0 -a yes -n 4 -l 10 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf

未分类
查看/dev/md0磁盘阵列的详细信息

mdadm -D /dev/md0

未分类
创建2个分区,分别为/dev/md0p1和/dev/md0p2

fdisk /dev/md0

未分类

二、部署LVM逻辑卷

表2:常用的LVM命令

未分类

1、创建物理卷(PV)

pvcreate /dev/md0p1 /dev/md0p2

未分类
查看物理卷状态

pvdisplay

未分类

2、创建卷组(VG)

创建一个名为storage的卷组,并把上面的两个物理卷加入该卷组中。

vgcreate storage /dev/md0p1 /dev/md0p2

未分类
查看卷组状态

vgdisplay

未分类

3、创建逻辑卷(LV)

这里我们切割出两个逻辑卷,vo01和vo02,即/dev/storage/vo01和/dev/storage/vo02,大小分别为15G和10G。

lvcreate -n vo01 -L 15G storage
lvcreate -n vo02 -L 10G storage

未分类
查看逻辑卷状态

lvdisplay

未分类
把创建好的两个逻辑卷格式化成ext4。

mkfs.ext4 /dev/storage/vo01
mkfs.ext4 /dev/storage/vo02

未分类
未分类
创建两个目录,将逻辑卷挂载使用。

mkdir /data1
mkdir /data2
mount /dev/storage/vo01 /data1
mount /dev/storage/vo02 /data2

查看分区情况

df -h

未分类
写入到/etc/fstab里,开机自动挂载

echo "/dev/storage/vo01 /data1 ext4 defaults 0 0" >> /etc/fstab
echo "/dev/storage/vo02 /data2 ext4 defaults 0 0" >> /etc/fstab

未分类

4、调整逻辑卷大小,注:调整大小之前一定要先卸载,否则逻辑卷会出问题。

缩小逻辑卷容量步骤:1、卸载(umount),2、检查分区完整性(e2fsck),3、确认分区容量(resize2fs),4、减少分区容量(lvreduce)。
将/dev/storage/vo01减少5G

umount /dev/storage/vo01
umount /dev/storage/vo02
e2fsck -f /dev/storage/vo01
resize2fs /dev/storage/vo01 10G
lvreduce -L -5G /dev/storage/vo01

未分类
将/dev/storage/vo02增加10G
扩展逻辑卷容量步骤:1、卸载(umount),2、增加分区容量(lvextend),3、检查分区完整性(e2fsck),4、确认分区容量(resize2fs)。

lvextend -L +10G /dev/storage/vo02
e2fsck -f /dev/storage/vo02
resize2fs /dev/storage/vo02

未分类
重新挂载文件分区

mount /dev/storage/vo01 /data1
mount /dev/storage/vo02 /data2

5、扩展逻辑组容量

前面讲过如何调整逻辑卷容量,可是如果逻辑组的容量不够用了,该如何处理呢,现在我们就来往逻辑组里增加一块硬盘设备。
对于LVM来讲,不管设备是RAID、硬盘还是分区,它不会去管存储设备的底层架构和布局,即然如此,我们就添加一块硬盘来做测试。
首先关闭(shutdown)虚拟机,添加一块新的虚拟硬盘,然后启动虚拟机
未分类
确认新硬盘已经被系统识别

fdisk -l

未分类
加入新的物理卷(PV)

pvcreate /dev/sdg

未分类
把/dev/sdg加入到storage卷组中

vgextend storage /dev/sdg

未分类

6、制作逻辑卷快照

LVM还具备“快照卷”功能,该功能类似于虚拟机软件的快照功能。例如:可以对某一个逻辑卷设备做一次快照,如果日后发现数据被改错了,就可以利用之前做好的快照卷进行覆盖还原。LVM的快照卷功能有两个特点:
(1)快照卷的容量必须等同于逻辑卷的容量;
(2)快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除。
首先往/dev/data1下写入一个文件

echo "xuad to bad" > /data1/xuad.txt

未分类
使用-s参数生成一个快照卷,使用-L参数指定要创建快照的逻辑卷大小,-n参数指定快照卷名称,最后跟上逻辑卷的完整路径。

lvcreate -L 10G -s -n LVdata1 /dev/storage/vo01

未分类
查看快照卷信息

lvdisplay

未分类
在/dev/data1下创建一个1G的垃圾文件,然后再查看快照卷的状态,发现存储空间占用量上升了。
注:由于创建的文件容量太大,dd命令执行的时间会比较久,请耐心等待。

dd if=/dev/zero of=/data1/files.txt count=1 bs=1G

未分类
未分类
通过快照卷对逻辑卷进行还原操作,记得先卸载掉逻辑卷与目录的挂载。

umount /data1
lvconvert --merge /dev/storage/LVdata1

注:由于逻辑卷容量比较大,所以lvconvert命令执行的时间比较久,请耐心等待。
未分类
还原后快照卷会被自动删除掉,而且刚才创建的1G垃圾文件也被清除了。将/dev/storage/vo01挂载,然后检查检查垃圾文件是否已被清除。

mount /dev/storage/vo01 /data1

未分类

三、模拟损坏磁盘阵列及修复

将/dev/sdb标记为已损坏,然后查看RAID磁盘阵列的状态,发现备用盘已经自动替换上去并开始同步数据了。

mdadm /dev/md0 -f /dev/sdb
mdadm -D /dev/md0

未分类
假设我们又新购买了一块硬盘/dev/sdb,现在将新硬盘加入到RAID10磁盘阵列中,首先移除/dev/sdb,然后卸载两个逻辑卷,再然后使用-a参数检测一下就行了,最后别忘记挂载逻辑卷。

mdadm /dev/md0 -r /dev/sdb

发现/dev/sdb设备已经成功移除。
未分类

umount /data1
umount /data2
mdadm /dev/md0 -a /dev/sdb
mdadm -D /dev/md0

此时/dev/sdb已成为备用盘
未分类

mount /dev/storage/vo01 /data1
mount /dev/storage/vo02 /data2

未分类

四、quota磁盘配额

root管理员可以通过磁盘容量配额服务来限制某个用户或某个用户组针对特定目录可以使用的最大容量和最大文件个数,一旦达到这个最大值就不再允许继续使用。可以使用quota命令进行磁盘容量配额管理,从而限制用户的可用容量和所能创建的最大文件个数。quota命令分为软限制和硬限制两个功能。
(1)软限制:当达到软限制时会提示用户,但仍允许用户在限定的额度内继续使用。
(2)硬限制:当达到硬限制时会提示用户,且强制终止用户的操作。
编辑/dev/fstab配置文件,使/data1目录支持quota磁盘配额技术,我们这里对用户进行配额,所以只需要添加usrquota参数即可,而grpquota参数是针对用户组的。

vim /etc/fstab

注:ext文件系统使用的是usrquota和grpquota参数,xfs文件系统使用的是uquota参数。
未分类
卸载/data1,再重新挂载,给/data1增加其他人的写权限。

umount /data1
mount -a
chmod -Rf o+w /data1

未分类
在/data1目录下生成quota配置文件

quotacheck -cugm /data1/
ll /data1/ | grep quota

未分类
启动磁盘配额

quotaon /data1/

设置对用户xuad的磁盘配额限制

edquota -u xuad

注:第一个soft是磁盘容量大小软限制,第一个hard是磁盘容量大小硬限制,单位是KB;第二个soft是文件数量软限制,第二个hard是文件数量硬限制。
设置使用磁盘容量的软限制和硬限制分别是3M和8M,设置文件数量的软限制和硬限制分别是3个和5个。
未分类
现在切换到xuad用户,然后创建一个5M和10M的文件,进行测试。

su - xuad
dd if=/dev/zero of=/data1/files bs=5M count=1

发现虽然给了警告,但文件依然可以正常创建。
未分类

dd if=/dev/zero of=/data1/files bs=10M count=1

发现报错了,写入失败,达到了quota的限制,文件大小只有8M。
未分类
现在删除files文件,再来创建几个正常的文件进行测试

rm -f /data1/files

用touch命令创建文件,发现在创建到第四个文件时给出了警告,在创建第六个文件时给出了报错,第六个文件无法创建。
未分类

linux磁盘管理系列二:软RAID的实现

1、什么是RAID

RAID全称是独立磁盘冗余阵列(Redundant Array of Independent Disks),基本思想是把多个磁盘组合起来,组合一个磁盘阵列组,使得性能大幅提高。

RAID分为几个不同的等级,各个不同的等级均在数据可靠性及读写性能做了不同的权衡。实际工作中根据自己的业务需求选择不同的RAID方案。

2、RAID的实现方式

  • 外接式磁盘阵列:通过扩展卡提供适配能力
  • 内接式RAID:主板集成RAID控制器安装OS前在BIOS里配置
  • 软件RAID:通过OS实现

3、标准的RAID

3.1 RAID0

RAID0称为条带化存储,将数据分段存储在各个磁盘中,读写均可以并行处理,因此读写速率为单个磁盘的N倍,没有冗余功能,任何一个磁盘的损坏就会导致的数据不可用。

未分类

3.2 RAID1

RADI1是镜像存储,没有数据校验,数据被同等的写入到2个或者多个磁盘中,写入速度相对慢, 但是读取速度比较快。

未分类

3.3 RAID 4

RADI4在RAID1的基础上,N个盘用于数据存储,另外加入了1个磁盘作为校验盘。一共N+1个盘,任何一个盘坏掉也不影响数据的访问

3.4 RAID 5

RAID5在RAID4的基础上,由原来的一个盘来存储校验数据,改为每个盘都有数据和校验信息的。

未分类

4、混合RAID

4.1 RAID01

先组成RAID0,然后组成RAID1.

未分类

4.2 RAID10

先组成RAID1,然后组成RAID0

未分类

5、软RAID的实现

5.1 RAID5的实现

创建由三块硬盘组成的可用空间为2G的RAID5设备,要求其chunk大小为256k,文件系统为ext4,开机可自动挂载至/mydata目录

5.1.1 先看看我们的磁盘情况

[root@centos7 Bash]$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  200G  0 disk
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0  128G  0 part
├─sda3   8:3    0 48.8G  0 part /
├─sda4   8:4    0  512B  0 part
└─sda5   8:5    0 19.5G  0 part /app
sdb      8:16   0  100G  0 disk
sdc      8:32   0   20G  0 disk
sdd      8:48   0   20G  0 disk
sde      8:64   0   20G  0 disk
sdf      8:80   0   20G  0 disk
sr0     11:0    1  8.1G  0 rom  /run/media/root/CentOS 7 x86_64 

这里我们使用sdb,sdc,sdd,每个盘创建一个主分区1G,构建RADI5.

5.1.2 根据实际情况分区

[root@centos7 Bash]$ fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x93d380cf.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-209715199, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-209715199, default 209715199): +1G
Partition 1 of type Linux and of size 1 GiB is set

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'

Command (m for help): p

Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x93d380cf

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   fd  Linux raid autodetect

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@centos7 Bash]$ fdisk /dev/sdc
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xc56b90d8.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-41943039, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +1G
Partition 1 of type Linux and of size 1 GiB is set

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'

Command (m for help): p

Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xc56b90d8

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048     2099199     1048576   fd  Linux raid autodetect

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@centos7 Bash]$ fdisk /dev/sdd
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x7e0900d8.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-41943039, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +1G
Partition 1 of type Linux and of size 1 GiB is set

Command (m for help): p

Disk /dev/sdd: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x7e0900d8

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1            2048     2099199     1048576   83  Linux

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

5.1.3 创建raid

[root@centos7 Bash]$ mdadm -C /dev/md5 -a yes -l 5 -n 3 /dev/sd{b1,c1,d1} -c 256       # -C指定创建, -a yes 自动创建设备 , -l 设定level , -n 设定磁盘个数, -c chunk大小
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
[root@centos7 Bash]$ mdadm -Ds                                                          # 查看信息
ARRAY /dev/md5 metadata=1.2 name=centos7.magedu.com:5 UUID=2c8ae60d:a799fcb7:9008a046:ae6ea430
[root@centos7 Bash]$ mdadm -Ds >/etc/mdadm.conf                                         # 将软raid信息写入到配置文件中去
[root@centos7 Bash]$ mkdir /mnt/md5                                                     # 创建挂载点目录 
[root@centos7 Bash]$ mkfs.ext4 /dev/md5                                                 # 创建文件系统
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=64 blocks, Stripe width=128 blocks
131072 inodes, 523776 blocks
26188 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done 

[root@centos7 Bash]$ mount /dev/md5 /mnt/md5                                          # 挂载设备 
[root@centos7 Bash]$ tail -n 1 /etc/mtab
/dev/md5 /mnt/md5 ext4 rw,seclabel,relatime,stripe=128,data=ordered 0 0               # 查看挂载信息
[root@centos7 Bash]$ tail -n 1 /etc/mtab >>/etc/fstab                                 #添加到fstab文件中,确保开机启动,这里建议使用uuid

5.1.4 验证raid

[root@centos7 md5]$ mdadm -D /dev/md5                                                 #查看详细raid5详细信息,可以发现有3个都是working状态的
/dev/md5:
           Version : 1.2
     Creation Time : Wed Dec  6 19:28:22 2017
        Raid Level : raid5
        Array Size : 2095104 (2046.00 MiB 2145.39 MB)
     Used Dev Size : 1047552 (1023.00 MiB 1072.69 MB)
      Raid Devices : 3
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Wed Dec  6 19:39:06 2017
             State : clean 
    Active Devices : 3
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 256K

Consistency Policy : resync

              Name : centos7.magedu.com:5  (local to host centos7.magedu.com)
              UUID : 2c8ae60d:a799fcb7:9008a046:ae6ea430
            Events : 18

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
       3       8       49        2      active sync   /dev/sdd1
[root@centos7 md5]$ man mdadm
[root@centos7 md5]$ mdadm /dev/md5 -f /dev/sdc1                                                 # -f 设定指定设备故障, 将/dev/sdc1 这个盘标记失败, 看是否数据能访问,我这里使用-f标记失败,工作中可以根据硬盘指示灯判断磁盘状态
mdadm: set /dev/sdc1 faulty in /dev/md5            
[root@centos7 md5]$ mdadm -D /dev/md5                                                           #在次查看信息,发现工作的是2个, 一个失败的设备 
/dev/md5:
           Version : 1.2
     Creation Time : Wed Dec  6 19:28:22 2017
        Raid Level : raid5
        Array Size : 2095104 (2046.00 MiB 2145.39 MB)
     Used Dev Size : 1047552 (1023.00 MiB 1072.69 MB)
      Raid Devices : 3
     Total Devices : 3
       Persistence : Superblock is persistent

       Update Time : Wed Dec  6 19:41:08 2017
             State : clean, degraded                                                             # 这里注意了。 我们的一个盘坏掉了。 raid5状态为降级使用了。
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 1
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 256K

Consistency Policy : resync

              Name : centos7.magedu.com:5  (local to host centos7.magedu.com)
              UUID : 2c8ae60d:a799fcb7:9008a046:ae6ea430
            Events : 20

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       -       0        0        1      removed
       3       8       49        2      active sync   /dev/sdd1

       1       8       33        -      faulty   /dev/sdc1
[root@centos7 md5]$ cat a.txt                                          # 发现我们的数据还是能访问的。没有问题。

5.1.5 替换设备

我这里是磁盘坏掉后的执行替换的, 完全可以多一个备用盘, 坏掉自动替换的。

[root@centos7 md5]$ mdadm /dev/md5 -a /dev/sde1                        # 上面我们的sdc1数据损坏,我们需要更换新的磁盘来顶替他的位置。这里添加一个sde1的磁盘, fdisk操作这里省去了。
mdadm: added /dev/sde1
[root@centos7 md5]$ mdadm -Ds                                          # 查看详细信息
ARRAY /dev/md5 metadata=1.2 name=centos7.magedu.com:5 UUID=2c8ae60d:a799fcb7:9008a046:ae6ea430
[root@centos7 md5]$ mdadm -D /dev/md5                                  # 查看详细信息
/dev/md5:
           Version : 1.2
     Creation Time : Wed Dec  6 19:28:22 2017
        Raid Level : raid5
        Array Size : 2095104 (2046.00 MiB 2145.39 MB)
     Used Dev Size : 1047552 (1023.00 MiB 1072.69 MB)
      Raid Devices : 3
     Total Devices : 4
       Persistence : Superblock is persistent

       Update Time : Wed Dec  6 19:50:01 2017
             State : clean                                                  # 状态恢复正常了。没有问题
    Active Devices : 3
   Working Devices : 3
    Failed Devices : 1
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 256K

Consistency Policy : resync

              Name : centos7.magedu.com:5  (local to host centos7.magedu.com)
              UUID : 2c8ae60d:a799fcb7:9008a046:ae6ea430
            Events : 43

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       4       8       65        1      active sync   /dev/sde1
       3       8       49        2      active sync   /dev/sdd1

       1       8       33        -      faulty   /dev/sdc1             # 这个盘是坏掉的,我们已经加入了新的磁盘, 这个盘可以干掉了
[root@centos7 md5]$ man mdadm
[root@centos7 md5]$ mdadm /dev/md5 --remove /dev/sdc1                  # 这个盘我们从raid5中移除去。        
mdadm: hot removed /dev/sdc1 from /dev/md5

5.1.6 扩展raid

我们上面使用的是2+1构成的raid5,磁盘利用率为66%,如果我们想改成3+1 可以执行类似如下命令

[root@centos7 mnt]$ mkadm -G -r  /dev/md5 -n 4 -a /dev/sdxx                  # 这里我就不测试了。使用/dev/sdxx代替一个设备。-G 是Grown增长的意思,-r 是resizefs的意思,

5.1.7 清空raid信息

[root@centos7 mnt]$ umount /dev/md5                                   # 卸载设备
[root@centos7 mnt]$ mdadm -S /dev/md5                                 # 停止raid5 
mdadm: stopped /dev/md5
[root@centos7 mnt]$ sed -i '$d' /etc/fstab                            # 删除fstab中关于raid5挂载的行
[root@centos7 mnt]$ cat /etc/fstab                                    # 确保fstab没有大问题

#
# /etc/fstab
# Created by anaconda on Tue Nov  7 16:07:01 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
#

UUID=59ccea87-3c4e-4bbc-9e2f-3fadb1dcf2e6 /                       ext4    defaults        1 1
UUID=f4e867e8-bcde-43a2-adc7-c80b0948e85f /app                    ext4    noatime,usrquota,grpquota        1 2
UUID=1d6cbe88-ffb4-4adf-bacf-76be1fa75708 /boot                   ext4    defaults        1 2
#UUID=b2c064f5-1ee5-4b5c-9e75-ed41cb99c5aa swap                    swap    defaults        0 0
#UUID=a0516c4f-40e6-4919-905a-8b44db12ff7b swap               swap    defaults,pri=0        0 0 
#/dev/sdb2 /test ext4 rw,seclabel,relatime,data=ordered 0 0
#/dev/sdb1 /home xfs rw,seclabel,relatime,attr2,inode64,usrquota,grpquota  0 0
[root@centos7 mnt]$ rm -rf /etc/mdadm.conf                                   # 删除raid默认配置文件
[root@centos7 mnt]$ mdadm --zero-superblock /dev/sd{b1,e1,d1,c1}             # 清空设置上的超级块信息

5.2 RAID10的实现

raid10 ,6个分区,2个一组raid1,3组raid0

5.2.1 案例分析

分析下,我们创建一个raid10设置,2个设备组成一个raid1,6个设备2个一组可以组成3个raid1, 然后把3个raid1组成一个raid0即可

5.2.2 先创建6个设备

[root@centos7 mnt]$ lsblk                                # 就是使用fdisk 创建的设备, 具体这里就不写了。 最终使用lsblk显示,我们可以看到sdb1,sdb2,sdd1,sde1一共6个磁盘
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  200G  0 disk 
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0  128G  0 part 
├─sda3   8:3    0 48.8G  0 part /
├─sda4   8:4    0  512B  0 part 
└─sda5   8:5    0 19.5G  0 part /app
sdb      8:16   0  100G  0 disk 
├─sdb1   8:17   0    1G  0 part 
└─sdb2   8:18   0    1G  0 part 
sdc      8:32   0   20G  0 disk 
├─sdc1   8:33   0    1G  0 part 
└─sdc2   8:34   0    1G  0 part 
sdd      8:48   0   20G  0 disk 
└─sdd1   8:49   0    1G  0 part 
sde      8:64   0   20G  0 disk 
└─sde1   8:65   0    1G  0 part 
sdf      8:80   0   20G  0 disk 
sr0     11:0    1  8.1G  0 rom  /run/media/root/CentOS 7 x86_64

5.2.3 创建raid

[root@centos7 mnt]$ mdadm -C /dev/md11 -a yes -l 1 -n 2 /dev/sd{b1,c1}                               # 创建第一个raid1
mdadm: /dev/sdb1 appears to be part of a raid array:
       level=raid5 devices=3 ctime=Wed Dec  6 19:28:22 2017
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
mdadm: /dev/sdc1 appears to be part of a raid array:
       level=raid5 devices=3 ctime=Wed Dec  6 19:28:22 2017
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md11 started.
[root@centos7 mnt]$ mdadm -C /dev/md12 -a yes -l 1 -n 2 /dev/sd{b2,c2}                                #创建第二个raid1
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md12 started.
[root@centos7 mnt]$ mdadm -C /dev/md13 -a yes -l 1 -n 2 /dev/sd{d1,e1}                                 # 创建第三个raid1
mdadm: /dev/sdd1 appears to be part of a raid array:
       level=raid5 devices=3 ctime=Wed Dec  6 19:28:22 2017
mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
mdadm: /dev/sde1 appears to be part of a raid array:
       level=raid5 devices=3 ctime=Wed Dec  6 19:28:22 2017
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md13 started.
[root@centos7 mnt]$ mdadm -C /dev/md10 -a yes -l 0 -n 3 /dev/md{11,12,13}                             # 将3个raid1 合并为一个raid0 
mdadm: /dev/md11 appears to contain an ext2fs file system
       size=2095104K  mtime=Wed Dec  6 19:29:45 2017
mdadm: /dev/md13 appears to contain an ext2fs file system
       size=2095104K  mtime=Wed Dec  6 19:29:45 2017
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md10 started.
[root@centos7 mnt]$ mkfs.ext
mkfs.ext2  mkfs.ext3  mkfs.ext4            
[root@centos7 mnt]$ mkfs.ext4 /dev/md10                                                                 # 创建文件系统                                                                                         
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=384 blocks
196224 inodes, 784896 blocks
39244 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=805306368
24 block groups
32768 blocks per group, 32768 fragments per group
8176 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done 

[root@centos7 mnt]$ mdadm -Ds                                                                             # 查看配置信息
ARRAY /dev/md11 metadata=1.2 name=centos7.magedu.com:11 UUID=0ce2cd6c:cd21fab6:3e65cfb5:64bd86f3
ARRAY /dev/md12 metadata=1.2 name=centos7.magedu.com:12 UUID=8af31dff:efab06ed:48e2613b:a599c774
ARRAY /dev/md13 metadata=1.2 name=centos7.magedu.com:13 UUID=a8c99d60:2d0c61e7:97a76809:9396c020
ARRAY /dev/md10 metadata=1.2 name=centos7.magedu.com:10 UUID=50b2fa58:4ce65d67:8c50c853:fa175a28
[root@centos7 mnt]$ mdadm -Ds  >> /etc/mdadm.conf                                                         # 写配置文件到mdadm的配置文件中
[root@centos7 mnt]$ mkdir /mnt/md10                                                                       # 创建挂载目录
[root@centos7 mnt]$ mount /dev/md10 /mnt/md10                                                             # 挂载文件系统
[root@centos7 mnt]$ tail -n 1 /etc/mtab                                                                   # 查看mtab文件中的最后一行, 也就是我们的md10挂载信息
/dev/md10 /mnt/md10 ext4 rw,seclabel,relatime,stripe=384,data=ordered 0 0
[root@centos7 mnt]$ tail -n 1 /etc/mtab >> /etc/fstab                                                     #添加到开机启动

5.2.4 raid 清除工作

[root@centos7 mnt]$ umount /dev/md10                                                                      # 取消挂载
[root@centos7 mnt]$ rm -rf /etc/mdadm.conf                                                                # 删除mdadm的默认配置
[root@centos7 mnt]$ mdadm -S /dev/md10                                                                    # 停止raid0设置
mdadm: stopped /dev/md10
[root@centos7 mnt]$ mdadm -S /dev/md11                                                                    # 停止raid1设置
mdadm: stopped /dev/md11
[root@centos7 mnt]$ mdadm -S /dev/md12                                                                    # 停止radi1 设置
mdadm: stopped /dev/md12 
[root@centos7 mnt]$ mdadm -S /dev/md13                                                                    # 停止raid 1 设置
mdadm: stopped /dev/md13
[root@centos7 mnt]$ sed -i '$d' /etc/fstab                                                                # 删除fstab的挂载  
[root@centos7 mnt]$ cat /etc/fstab                                                                        # 确保正确

#
# /etc/fstab
# Created by anaconda on Tue Nov  7 16:07:01 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
#

UUID=59ccea87-3c4e-4bbc-9e2f-3fadb1dcf2e6 /                       ext4    defaults        1 1
UUID=f4e867e8-bcde-43a2-adc7-c80b0948e85f /app                    ext4    noatime,usrquota,grpquota        1 2
UUID=1d6cbe88-ffb4-4adf-bacf-76be1fa75708 /boot                   ext4    defaults        1 2
#UUID=b2c064f5-1ee5-4b5c-9e75-ed41cb99c5aa swap                    swap    defaults        0 0
#UUID=a0516c4f-40e6-4919-905a-8b44db12ff7b swap               swap    defaults,pri=0        0 0 
#/dev/sdb2 /test ext4 rw,seclabel,relatime,data=ordered 0 0
#/dev/sdb1 /home xfs rw,seclabel,relatime,attr2,inode64,usrquota,grpquota  0 0
[root@centos7 mnt]$ mdadm -D                                                                                  # 再次查看下mdadm信息,确保没有了
mdadm: No devices given.
[root@centos7 mnt]$ mdadm --zero-superblock /dev/sd{b1,b2,c1,c2,d1,e1}                                        # 请求md的元数据信息

Linux上Raid卡的简单配置与使用

使用 RAID 可以提高服务器的性能。不同 RAID 的级别,性能会有所不同。它通过容错和高可用性来保存我们的数据。

下面记录在linux上配置和使用raid卡的过程。

资源

  1. Linux主机
  2. Raid卡(LSI MegaRAID SAS 9271-8i)
  3. 两块希捷1T机械硬盘

工具

  1. Raid工具:MegaCli64或storcli64
  2. fdisk(分区)
  3. mkfs(格式化分区文件系统)
  4. df(查看分区挂载情况)

Raid卡真容

未分类

Raid卡

图中蓝线框出的两个插口是MinSATA的插口,可以连接Mni SATA转接线,接硬盘数据口和备用电源。

未分类

Mini SATA接口线(不是我的手)

安装

未分类
安装结构图

RAID卡插在PCI的扩展槽上,Mini SATA转接线中的数据口接在硬盘上,同时硬盘接电源,转接线的电源线可以不用(备用电源线)。

至此硬件安装基本完成。
要想RAID卡工作还有必不可少的一步就是安装驱动,这里涉及到Linux的Kernel的编译问题。在较新的Kernel中大多已经集成了RAID驱动,这里我们从新编译一下。
cd到Kernel源码目录执行:

make menuconfig

要编译Raid驱动,依赖PCI模块,所以我们需要把PCI support 模块编译进内核。

未分类

进入PCI配置

未分类

按Y选择编译PCI support

之后在”Device Drivers” >>”SCSI device support”>>”SCSI low-level drivers”下在 “LSI Logic MegaRAID SAS RAID Module”上按Y,把此模块编译进kernel中。
最后执行以下命令编译内核

make -j 9

之后改一下grub配置,上传编译好的内核文件,改好启动引导之后就可以重启设备了,不出意外将会系统启动前看到Raid初始化的打印输出。
开机之后运行以下命令可以查看Raid卡参数:

storcli64 /c0 show all#或MegaCli -AdpAllInfo -aAll

双盘创建Raid1:

storcli /c0 add vd raid1 drives=252:5,7 pdperarray=2

创建好之后先用fdisk做好分区然后用mkfs命令格式化分区文件系统,之挂载分区就行了。

后记:

其实搞硬件,最重要的一步就是硬件设备安装的时候一定要装好,要不然….

CentOS系统安装过程中配置软RAID-0或RAID-1

什么是RAID-0

RAID-0 (等量模式, stripe):效能最佳。这种模式如果使用相同型号与容量的磁碟来组成时,效果较佳。这种模式的 RAID 会将磁碟先切出等量的区块 (举例来说, 4KB), 然后当一个文件要写入 RAID 时,该文件会依据区块的大小切割好,之后再依序放到各个磁碟里面去。由於每个磁碟会交错的存放数据, 因此当你的数据要写入 RAID 时,数据会被等量的放置在各个磁碟上面。举例来说,你有两颗磁碟组成 RAID-0 , 当你有 100MB 的数据要写入时,每个磁碟会各被分配到 50MB 的储存量。RAID-0 的示意图如下所示:
存储
上图的意思是,在组成 RAID-0 时,每颗磁碟 (Disk A 与 Disk B) 都会先被区隔成为小区块 (chunk)。 当有数据要写入 RAID 时,数据会先被切割成符合小区块的大小,然后再依序一个一个的放置到不同的磁碟去。 由於数据已经先被切割并且依序放置到不同的磁碟上面,因此每颗磁碟所负责的数据量都降低了!照这样的情况来看, 越多颗磁碟组成的 RAID-0 效能会越好,因为每颗负责的数据量就更低了! 这表示我的数据可以分散让多颗磁碟来储存,当然效能会变的更好啊!此外,磁碟总容量也变大了! 因为每颗磁碟的容量最终会加总成为 RAID-0 的总容量喔!

只是使用此等级你必须要自行负担数据损毁的风险,由上图我们知道文件是被切割成为适合每颗磁盘分区区块的大小, 然后再依序放置到各个磁碟中。想一想,如果某一颗磁碟损毁了,那么文件数据将缺一块,此时这个文件就损毁了。 由於每个文件都是这样存放的,因此 RAID-0 只要有任何一颗磁碟损毁,在 RAID 上面的所有数据都会遗失而无法读取。

另外,如果使用不同容量的磁碟来组成 RAID-0 时,由於数据是一直等量的依序放置到不同磁碟中,当小容量磁碟的区块被用完了, 那么所有的数据都将被写入到最大的那颗磁碟去。举例来说,我用 200G 与 500G 组成 RAID-0 , 那么最初的 400GB 数据可同时写入两颗磁碟 (各消耗 200G 的容量),后来再加入的数据就只能写入 500G 的那颗磁碟中了。 此时的效能就变差了,因为只剩下一颗可以存放数据嘛!

什么是RAID-1

RAID-1 (映射模式, mirror):完整备份。这种模式也是需要相同的磁碟容量的,最好是一模一样的磁碟啦!如果是不同容量的磁碟组成 RAID-1 时,那么总容量将以最小的那一颗磁碟为主!这种模式主要是『让同一份数据,完整的保存在两颗磁碟上头』。举例来说,如果我有一个 100MB 的文件,且我仅有两颗磁碟组成 RAID-1 时, 那么这两颗磁碟将会同步写入 100MB 到他们的储存空间去。 因此,整体 RAID 的容量几乎少了 50%。由於两颗硬盘内容一模一样,好像镜子映照出来一样, 所以我们也称他为 mirror 模式罗~
存储
如上图所示,一份数据传送到 RAID-1 之后会被分为两股,并分别写入到各个磁碟里头去。 由於同一份数据会被分别写入到其他不同磁碟,因此如果要写入 100MB 时,数据传送到 I/O 汇流排后会被复制多份到各个磁碟, 结果就是数据量感觉变大了!因此在大量写入 RAID-1 的情况下,写入的效能可能会变的非常差 (因为我们只有一个南桥啊!)。 好在如果你使用的是硬件 RAID (磁盘阵列卡) 时,磁盘阵列卡会主动的复制一份而不使用系统的 I/O 汇流排,效能方面则还可以。 如果使用软件磁盘阵列,可能效能就不好了。

由於两颗磁碟内的数据一模一样,所以任何一颗硬盘损毁时,你的数据还是可以完整的保留下来的! 所以我们可以说, RAID-1 最大的优点大概就在於数据的备份吧!不过由於磁碟容量有一半用在备份, 因此总容量会是全部磁碟容量的一半而已。虽然 RAID-1 的写入效能不佳,不过读取的效能则还可以啦!这是因为数据有两份在不同的磁碟上面,如果多个 processes 在读取同一笔数据时, RAID 会自行取得最佳的读取平衡。
以上文字转自:http://vbird.dic.ksu.edu.tw/linux_basic/0420quota_2.php

系统安装过程配置raid

下面我们以centos 5.8,两块硬盘/dev/sda和/dev/sdb为例进行操作。

1、自定义分区

在“安装需要对您的硬盘进行分区”的步骤中,选择“建立自定义分区结构”

2、创建RAID分区

2.1 为/boot创建raid分区
点击“RAID”按钮,选择“创建软件RAID分区”,“确定”进行一步。在“允许的驱动器”中只选择“sda”,大小100M即可,之后点击确定。重复之前的步骤,在“允许的驱动器”中只选择”sdb”,其它的与之前的操作相同。如图:
存储
存储
2.2 为swap创建raid分区
根据2.2的步骤,只是大小不同,如内存2G的机器,可以创建2G的swap。
2.3 为 根目录 /创建raid分区
根据2.2的步骤,把剩下的空间全部分配给根目录。
最终状态如下:
存储
存储

3、创建RAID设备

3.1 boot raid设备
点击“RAID”,选择“创建RAID设备”,点击“确定”。挂载点选择“/boot”,文件系统类型“ext3”,raid设备“md0”,raid级别“RAID1”,RAID成员选择“sda1和sdb1”(可以根据大小判断是刚才创建的boot)。点击“确定”完成boot raid设备的创建。
存储
3.2 swap raid设备
点击“RAID”,选择“创建RAID设备”,点击“确定”。文件系统类型“swap”,raid设备“md1”,raid级别“RAID0或RAID1”,RAID成员选择“sda2和sdb2”(可以根据大小判断是刚才创建的swap)。点击“确定”完成swap raid设备的创建。
存储
3.3 root raid设备
点击“RAID”,选择“创建RAID设备”,点击“确定”。挂载点选择“/boot”,文件系统类型“ext3”,raid设备“md2”,raid级别“RAID0或RAID1”,RAID成员选择“sda3和sdb3”(可以根据大小判断是刚才创建的swap)。点击“确定”完成root raid设备的创建。
存储
此时就创建好了RAID,最终状态如下:
存储
存储
存储