### raid
> 磁盘阵列(Redundant Arrays of Independent Disks,RAID),全称独立磁盘冗余阵列。
>
> 磁盘阵列是由很多廉价的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。
>
> 利用同位检查(ParityCheck)的观念,在数组中任意一个硬盘故障时,仍可读出数据,在数据重构时,将数据经计算后重新置入新硬盘中。
>
> 相同的数据存储在多个硬盘的不同的地方的方法。通过把数据放在多个硬盘上(冗余),输入输出操作能以平衡的方式交叠,改良性能。因为多个硬盘增加了平均故障间隔时间(MTBF),储存冗余数据也增加了容错。
>
>
raid常见的有:RAID 0,RAID 1,RAID 5,RAID 6,RAID 01,RAID 10
raid0原理:把连续的数据以chunk为单位分一个个散到多个磁盘上存取,系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求大大的提高了整体磁盘的性能
```
raid0需求
磁盘数≥2
优点
性能100%
读写速度翻倍
缺点
无容错性如果有一块磁盘坏掉了所有数据将丢失
```
raid1 :又称为镜像储存,顾名思义,我们将两块磁盘做成raid1 ,在向其中一块硬盘读写时,在另外一块硬盘中做同样的操作。如果一块磁盘出现失效情况,系统可以直接切换到另一块磁盘上继续工作
```
raid1 需要的磁盘数
磁盘数≥2
优点:容错性高
读性能翻倍
缺点:成本高。磁盘利用率比较低
```
raid5 原理:
数据以块分段条带化存储。校验信息交叉地存储在所有的数据盘上。数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上,其中任意N-1块磁盘上都存储完整的数据
```
需要的磁盘数 ≥ 3
优点:
读写性能高
有校验机制
磁盘空间利用率高
缺点:
磁盘越多安全性能越差
```
raid6相对raid5来说增加了一个校验位提高了容错性
降低了磁盘空间利用率
```
raid10
是先把磁盘做raid1
然后把raid1 做成raid0
需要的磁盘数≥4
优点 读写性能高
安全性能比较高
有较高的IO性能
缺点 成本较高
```
同理raid01
是先把磁盘做raid0
然后把raid0 做成raid1
```
需要的磁盘数≥4
优点 读写性能高
有较高的IO性能
缺点 成本较高
安全性不如raid10
```
#### 模拟raid设备的实现
##### mdadm命令
用处:与内核中的md通信
模式有:
创建模式
-C:
mdadm -C/dev/md#(或UUID 或卷标)
-C模式下
-n:用几个设备快创建
-l:创建的raid级别
-a: 自动创建设备文件
-c #(chunk size) :指明chunk块大小
-x :指明备用盘的个数
管理模式
-A :启用raid
-S :禁用raid
mdadm /dev/MD# -a /dev/SD#
向MD#中增加SD#分区
mdadm /dev/MD# -r /dev/SD#
从MD#中删除SD#分区
创建一个raid5的具体步骤
1.加入硬盘
2.创建磁盘分区 命令:fdisk /dev/SD#
3:创建磁盘阵列 命令:mdadm -C /dev/MD# -n# -l# -a yes -c# -x# /dev/sd{#,#,#,#}
4.创建md#的文件系统 命令 mkfs.ext4|xfs /dev/MD#
5.修改配置文件 命令:vim /etc/fstab
6.挂载 :如果修改完目录可以用mount -a 自动挂载
增加磁盘到磁盘阵列中具体步骤
增加分区至磁盘阵列 mdadm /dev/MD# -a /dev/SD#
同步文件系统至磁盘阵列 resize2sf /dev/MD#
删除磁盘阵列|【中的磁盘】
1.取消挂载 umont
2.查看是否无用户使用,如果有则T掉 fuser -mv /dwv/MD# 查看磁盘中有谁在干什么 fuser -km /dev/MD#
T掉磁盘中正在使用的用户
3.修改fstab
4.查看组里有谁 命令 : lsblk 或者fdisk -l
5.删除配置文件 etc/mdadm.conf
6.禁用磁盘阵列 mdadm -S /dev/MD#
7.删除磁盘的信息 mdadm --zero-superblock /dev/SD#
8.删除阵列中的组员 mdadm /dev/MD# -r /dev/SD#
### lvm
首先将设备指定为物理卷 pv
用多个物理卷来创建一个卷组 vg
由卷组来创建逻辑卷 lvm
逻辑卷的单位是PE,相当于raid的chunk , 当我们创建逻辑卷(lvm)时,会以PE为基础大小创建
然后我们可以再逻辑卷上创建文件系统
#### 物理卷 (pv)
pvcreate /dev/SD# :创建物理卷
示例
```
[root@localhost ~]#pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created.
[root@localhost ~]#pvcreate /dev/sdb2
Physical volume "/dev/sdb2" successfully created.
```
pvs : 简要格式显示物理卷信息
pvdisplay: 详细显示物理卷的信息
pvrename:重命名pv卷
pvremove:删除pv卷
#### 卷组 (vg)
vgcreate /vgNAME /dev/SD{#...}
实例
```
[root@localhost ~]#vgcreate vg1 /dev/sdb{1,2}
Volume group "vg1" successfully created
```
vgs :简要格式显示物理卷信息
vgdisplay :详细显示物理卷的信息
vgrename:重命名vg卷组
vgremove:删除vg卷组
vgextend:扩展vg
vgreduce:缩减vg
备注:vg缩减之前需要先做pvmove :把卷组中的PE移动到同一个vg上的其他pv上去
示例
```
[root@localhost ~]#vgextend vg1 /dev/sdb3
Volume group "vg1" successfully extended
[root@localhost ~]#pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <81.06g 4.00m
/dev/sdb1 vg1 lvm2 a-- <2.00g <2.00g
/dev/sdb2 vg1 lvm2 a-- <3.00g <3.00g
/dev/sdb3 vg1 lvm2 a-- <3.00g <3.00g
[root@localhost ~]#vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 3 0 wz--n- <81.06g 4.00m
vg1 3 0 0 wz--n- <7.99g <7.99g
[root@localhost ~]#
```
#### lv
lvcreate
语法示例
```
lvcreate -L #[mMgGtT] -n NAME VolumeGroup
lvcreate -l 60%VG -n mylv testvg
lvcreate -l 100%FREE -n yourlv testvg
```
选项
-L 制定逻辑卷大小
-n 指明逻辑卷名字
-l 指明PE的个数 可以制定VG的百分比
```
示例
[root@localhost ~]#mkfs.ext4 /dev/vg1/lv1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
262144 inodes, 1048576 blocks
52428 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1073741824
32 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
[root@localhost ~]#
```
lvs :简要格式显示逻辑卷信息
lvdisplay :详细显示逻辑卷的信息
lvrename:重命名逻辑卷
lvremove:删除逻辑卷
lvextend:扩展逻辑卷
lvreduce:缩减逻辑卷
扩展逻辑卷:
lvextend -L [+}# /dev/VG#/LV#
-L +5G 在现在的基础上加五个G | -l +200(按PE为单位)
步骤:1.增加分区,修改分区类型编号(整块磁盘可以不用修改)
2.创建pv
3.扩展vg
4.加入逻辑卷 加-r 可以自动同步文件系统 或者 增加完用resize2fs /dev/vg1/lv1
逻辑卷缩减
备注:缩减之前先备份
缩减之前必须取消挂载 同时 ext4系列可以缩减 xfs系列不能缩减
lvreduce
步骤
1.取消挂载(必须在没人使用时 用fuser -av 查看 -km 杀掉进程中所有人)
2.查看文件系统完整性 e2fsck -f /dev/vg1/lv1
3.缩减文件系统 resize2fs /dev/vg1/lv1 #G 缩减到的范围(#G)
4.缩减逻辑卷 lvreduce -L [-]2G /dev/vg1/lv1
示例
```
umount: /dev/lv1: mountpoint not found
[root@localhost ~]#umount /lv1
[root@localhost ~]#e2fsck -f /dev/vg1/lv1
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vg1/lv1: 11/458752 files (0.0% non-contiguous), 66175/1835008 blocks
[root@localhost ~]#
[root@localhost ~]#resize2fs /dev/vg1/lv1 4G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg1/lv1 to 1048576 (4k) blocks.
The filesystem on /dev/vg1/lv1 is now 1048576 blocks long.
[root@localhost ~]#lvreduce -L 4G /dev/vg1/lv1
WARNING: Reducing active logical volume to 4.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg1/lv1? [y/n]: y
Size of logical volume vg1/lv1 changed from 7.00 GiB (1792 extents) to 4.00 GiB (1024 extents).
Logical volume vg1/lv1 successfully resized.
[root@localhost ~]#lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
data centos -wi-ao---- <48.83g
root centos -wi-ao---- <29.30g
swap centos -wi-ao---- <2.93g
lv1 vg1 -wi-a----- 4.00g
```
> 磁盘阵列(Redundant Arrays of Independent Disks,RAID),全称独立磁盘冗余阵列。
>
> 磁盘阵列是由很多廉价的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。
>
> 利用同位检查(ParityCheck)的观念,在数组中任意一个硬盘故障时,仍可读出数据,在数据重构时,将数据经计算后重新置入新硬盘中。
>
> 相同的数据存储在多个硬盘的不同的地方的方法。通过把数据放在多个硬盘上(冗余),输入输出操作能以平衡的方式交叠,改良性能。因为多个硬盘增加了平均故障间隔时间(MTBF),储存冗余数据也增加了容错。
>
>
raid常见的有:RAID 0,RAID 1,RAID 5,RAID 6,RAID 01,RAID 10
raid0原理:把连续的数据以chunk为单位分一个个散到多个磁盘上存取,系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求大大的提高了整体磁盘的性能
```
raid0需求
磁盘数≥2
优点
性能100%
读写速度翻倍
缺点
无容错性如果有一块磁盘坏掉了所有数据将丢失
```
raid1 :又称为镜像储存,顾名思义,我们将两块磁盘做成raid1 ,在向其中一块硬盘读写时,在另外一块硬盘中做同样的操作。如果一块磁盘出现失效情况,系统可以直接切换到另一块磁盘上继续工作
```
raid1 需要的磁盘数
磁盘数≥2
优点:容错性高
读性能翻倍
缺点:成本高。磁盘利用率比较低
```
raid5 原理:
数据以块分段条带化存储。校验信息交叉地存储在所有的数据盘上。数据和相对应的奇偶校验信息存储到组成RAID5的各个磁盘上,并且奇偶校验信息和相对应的数据分别存储于不同的磁盘上,其中任意N-1块磁盘上都存储完整的数据
```
需要的磁盘数 ≥ 3
优点:
读写性能高
有校验机制
磁盘空间利用率高
缺点:
磁盘越多安全性能越差
```
raid6相对raid5来说增加了一个校验位提高了容错性
降低了磁盘空间利用率
```
raid10
是先把磁盘做raid1
然后把raid1 做成raid0
需要的磁盘数≥4
优点 读写性能高
安全性能比较高
有较高的IO性能
缺点 成本较高
```
同理raid01
是先把磁盘做raid0
然后把raid0 做成raid1
```
需要的磁盘数≥4
优点 读写性能高
有较高的IO性能
缺点 成本较高
安全性不如raid10
```
#### 模拟raid设备的实现
##### mdadm命令
用处:与内核中的md通信
模式有:
创建模式
-C:
mdadm -C/dev/md#(或UUID 或卷标)
-C模式下
-n:用几个设备快创建
-l:创建的raid级别
-a: 自动创建设备文件
-c #(chunk size) :指明chunk块大小
-x :指明备用盘的个数
管理模式
-A :启用raid
-S :禁用raid
mdadm /dev/MD# -a /dev/SD#
向MD#中增加SD#分区
mdadm /dev/MD# -r /dev/SD#
从MD#中删除SD#分区
创建一个raid5的具体步骤
1.加入硬盘
2.创建磁盘分区 命令:fdisk /dev/SD#
3:创建磁盘阵列 命令:mdadm -C /dev/MD# -n# -l# -a yes -c# -x# /dev/sd{#,#,#,#}
4.创建md#的文件系统 命令 mkfs.ext4|xfs /dev/MD#
5.修改配置文件 命令:vim /etc/fstab
6.挂载 :如果修改完目录可以用mount -a 自动挂载
增加磁盘到磁盘阵列中具体步骤
增加分区至磁盘阵列 mdadm /dev/MD# -a /dev/SD#
同步文件系统至磁盘阵列 resize2sf /dev/MD#
删除磁盘阵列|【中的磁盘】
1.取消挂载 umont
2.查看是否无用户使用,如果有则T掉 fuser -mv /dwv/MD# 查看磁盘中有谁在干什么 fuser -km /dev/MD#
T掉磁盘中正在使用的用户
3.修改fstab
4.查看组里有谁 命令 : lsblk 或者fdisk -l
5.删除配置文件 etc/mdadm.conf
6.禁用磁盘阵列 mdadm -S /dev/MD#
7.删除磁盘的信息 mdadm --zero-superblock /dev/SD#
8.删除阵列中的组员 mdadm /dev/MD# -r /dev/SD#
### lvm
首先将设备指定为物理卷 pv
用多个物理卷来创建一个卷组 vg
由卷组来创建逻辑卷 lvm
逻辑卷的单位是PE,相当于raid的chunk , 当我们创建逻辑卷(lvm)时,会以PE为基础大小创建
然后我们可以再逻辑卷上创建文件系统
#### 物理卷 (pv)
pvcreate /dev/SD# :创建物理卷
示例
```
[root@localhost ~]#pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created.
[root@localhost ~]#pvcreate /dev/sdb2
Physical volume "/dev/sdb2" successfully created.
```
pvs : 简要格式显示物理卷信息
pvdisplay: 详细显示物理卷的信息
pvrename:重命名pv卷
pvremove:删除pv卷
#### 卷组 (vg)
vgcreate /vgNAME /dev/SD{#...}
实例
```
[root@localhost ~]#vgcreate vg1 /dev/sdb{1,2}
Volume group "vg1" successfully created
```
vgs :简要格式显示物理卷信息
vgdisplay :详细显示物理卷的信息
vgrename:重命名vg卷组
vgremove:删除vg卷组
vgextend:扩展vg
vgreduce:缩减vg
备注:vg缩减之前需要先做pvmove :把卷组中的PE移动到同一个vg上的其他pv上去
示例
```
[root@localhost ~]#vgextend vg1 /dev/sdb3
Volume group "vg1" successfully extended
[root@localhost ~]#pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <81.06g 4.00m
/dev/sdb1 vg1 lvm2 a-- <2.00g <2.00g
/dev/sdb2 vg1 lvm2 a-- <3.00g <3.00g
/dev/sdb3 vg1 lvm2 a-- <3.00g <3.00g
[root@localhost ~]#vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 3 0 wz--n- <81.06g 4.00m
vg1 3 0 0 wz--n- <7.99g <7.99g
[root@localhost ~]#
```
#### lv
lvcreate
语法示例
```
lvcreate -L #[mMgGtT] -n NAME VolumeGroup
lvcreate -l 60%VG -n mylv testvg
lvcreate -l 100%FREE -n yourlv testvg
```
选项
-L 制定逻辑卷大小
-n 指明逻辑卷名字
-l 指明PE的个数 可以制定VG的百分比
```
示例
[root@localhost ~]#mkfs.ext4 /dev/vg1/lv1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
262144 inodes, 1048576 blocks
52428 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1073741824
32 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
[root@localhost ~]#
```
lvs :简要格式显示逻辑卷信息
lvdisplay :详细显示逻辑卷的信息
lvrename:重命名逻辑卷
lvremove:删除逻辑卷
lvextend:扩展逻辑卷
lvreduce:缩减逻辑卷
扩展逻辑卷:
lvextend -L [+}# /dev/VG#/LV#
-L +5G 在现在的基础上加五个G | -l +200(按PE为单位)
步骤:1.增加分区,修改分区类型编号(整块磁盘可以不用修改)
2.创建pv
3.扩展vg
4.加入逻辑卷 加-r 可以自动同步文件系统 或者 增加完用resize2fs /dev/vg1/lv1
逻辑卷缩减
备注:缩减之前先备份
缩减之前必须取消挂载 同时 ext4系列可以缩减 xfs系列不能缩减
lvreduce
步骤
1.取消挂载(必须在没人使用时 用fuser -av 查看 -km 杀掉进程中所有人)
2.查看文件系统完整性 e2fsck -f /dev/vg1/lv1
3.缩减文件系统 resize2fs /dev/vg1/lv1 #G 缩减到的范围(#G)
4.缩减逻辑卷 lvreduce -L [-]2G /dev/vg1/lv1
示例
```
umount: /dev/lv1: mountpoint not found
[root@localhost ~]#umount /lv1
[root@localhost ~]#e2fsck -f /dev/vg1/lv1
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vg1/lv1: 11/458752 files (0.0% non-contiguous), 66175/1835008 blocks
[root@localhost ~]#
[root@localhost ~]#resize2fs /dev/vg1/lv1 4G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg1/lv1 to 1048576 (4k) blocks.
The filesystem on /dev/vg1/lv1 is now 1048576 blocks long.
[root@localhost ~]#lvreduce -L 4G /dev/vg1/lv1
WARNING: Reducing active logical volume to 4.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg1/lv1? [y/n]: y
Size of logical volume vg1/lv1 changed from 7.00 GiB (1792 extents) to 4.00 GiB (1024 extents).
Logical volume vg1/lv1 successfully resized.
[root@localhost ~]#lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
data centos -wi-ao---- <48.83g
root centos -wi-ao---- <29.30g
swap centos -wi-ao---- <2.93g
lv1 vg1 -wi-a----- 4.00g
```