11.Linux磁盘管理——lvm,raid

11.Linux磁盘管理——lvm,raid

7. 逻辑卷 lvm

7.1 为何要用 lvm

  • 当刚开始安装 Linux 系统时,往往不能确定每个分区
    使用的空间大小,只能凭经验分配不科学;
    • 如果分区设置的过大,就浪费了磁盘空间;
    • 如果分区设置的过小,就会导致空间不够;
  • 如何希望分配的空间过大或过小,都能动态调整,则
    需要使用到 LVM 逻辑卷;

7.2 什么是 lvm

  • LVM 是 Logical Volume Manager 逻辑卷管理的简
    写,它是对磁盘分区管理的一种机制;
  • LVM 优点:
    • LVM 可以创建和管理逻辑卷,而不是直接使用物理
      硬盘。
    • LVM 可以弹性的管理逻辑卷的扩大缩小,操作简
      单,而不损坏已存储的数据;
    • LVM 可以随意将新的硬盘添加到 LVM ,以直接扩展
      已经存在的逻辑卷。
  • LVM 缺点:
    • LVM 如果有一个磁盘损坏,整个 lvm 都坏了, lvm
      只有动态扩展作用
    • 解决办法:用 RAID + LVM = 既有冗余又有动态扩
      展;

7.3 lvm相关术语

  • 物理卷(PV):将常规的磁盘通过 pvcreate 命令对其
    进行初始化,形成了物理卷。(面粉)
  • 卷组(VG):把多个物理卷组成一个逻辑的整体,这样
    卷组的大小就是多个盘之和。(大面团)
  • 逻辑卷(LV):从卷组中划分需要的空间大小出来,用
    户仅需对其格式化然后即可挂载使用。(切成馒头)
  • 基本单元(PE):分配的逻辑大小的最小单元,默认
    4MB,假设分配100MB的空间,则需要创建25个PE

7.4 lvm配置实践

7.4.1 环境与思路

  • 准备三块物理磁盘,建议在虚拟机关闭状态添加,以便更好的实验;
  • 1.创建物理卷,将普通磁盘转换为物理卷
  • 2.创建卷组, 将物理卷加入到卷组中
  • 3.在卷组中划分逻辑卷,然后挂载使用

7.4.2 创建物理卷

1.将磁盘转换为物理卷,并加入 pv

[root@linux-node1 ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully
created.

2.检查 pv 创建情况

[root@linux-node1 ~]# pvs
PV     VG   Fmt Attr PSize  PFree
/dev/sdb     lvm2 ---   1.00g 1.00g

7.4.3 创建卷组

1.创建名为 datavg 的卷组,然后将物理卷加入进卷组

[root@linux-node1 ~]# vgcreate datavg /dev/sdb
Volume group "datavg" successfully created

2.检查卷组(发现存在一个PV卷)

[root@linux-node1 ~]# vgs
VG    #PV #LV #SN Attr  VSize  VFree
datavg  1  0  0 wz--n- 1020.00m 1020.00m

7.4.4 创建逻辑卷

1.分配 datavg 逻辑卷, -n 指定逻辑卷名称, -L 指定逻
辑卷大小;

#1.分配100M空间给lv1逻辑卷
[root@linux-node1 ~]# lvcreate -L 100M -n lv1 datavg
Logical volume "datalv1" created.

2.检查逻辑卷

[root@linux-node1 ~]# lvscan
ACTIVE       '/dev/datavg/lv1' [100.00
MiB] inherit

7.4.5 挂载使用

1.格式化逻辑卷

[root@linux-node1 ~]# mkfs.xfs
/dev/datavg/lv1

2.创建目录并挂载

[root@linux-node1 ~]# mkdir /lv1
[root@linux-node1 ~]# mount /dev/datavg/lv1
/lv1/
[root@linux-node1 ~]# df -h
Filesystem         Size Used
Avail Use% Mounted on
...
/dev/mapper/datavg-lv1  97M  5.2M  92M 
6% /lv1

7.5 lvm 卷组管理

7.5.1 扩大卷组

1.准备新的磁盘加入至 pv ,然后检查卷组当前的大小;

[root@node~]# pvcreate /dev/sdc
[root@node~]# vgs
VG        #PV #LV #SN Attr  VSize
 VFree
datavg       1  1  0 wz--n-
1020.00m 920.00m

2.使用 vgextend 扩展卷组

[root@node ~]# vgextend datavg /dev/sdc
Volume group "datavg" successfully extended

3.再次检查,发现卷组已经扩大

[root@node ~]# vgs
VG        #PV #LV #SN Attr  VSize
 VFree
datavg       2  1  0 wz--n- 
1.99g 1.89g

7.5.2 缩小卷组

  • 假设想移除 /dev/sdb 磁盘,建议先将 sdb 磁盘数
    据先迁移到 sdc 磁盘,然后在移除;
  • 注意:同一卷组的磁盘才可以进行在线迁移
    1.检查当前逻辑卷 VG 中 PV 使用情况
[root@node ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb vg1 lvm2 a -- 2.00g 1.76g
/dev/sdc vg1 lvm2 a -- 2.00g 2.00g

2.pvmove 在线数据迁移,将 sdb 的数据迁移至 sdc

[root@node ~]# pvmove /dev/sdb
/dev/sdb: Moved: 100.00%

3.检查是否将 sdb 数据迁移至 sdc

[root@node~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb vg1 lvm2 a -- 2.00g 2.00g
/dev/sdc vg1 lvm2 a -- 2.00g 1.76g

4.从卷组中移除 sdb 磁盘

[root@node ~]# vgreduce datavg
/dev/sdb
Removed "/dev/sdb" from volume group
"datavg"

7.6 lvm 逻辑卷管理

7.6.1 扩展逻辑卷

  • 扩展逻辑卷:取决于 vg 卷中是否还有剩余的容量
  • 注意扩展逻辑卷不能超过卷组 VG 的总大小
[root@node~]# vgs
VG        #PV #LV #SN Attr  VSize 
VFree
datavg       1  1  0 wz--n-
1020.00m 920.00m

1.扩展 lv 逻辑卷,增加 800M 分配给逻辑卷

[root@node ~]# lvextend -L +800M /dev/datavg/lv1
#也可以选择分配卷组中多少百分比给逻辑卷
[root@node ~]# lvextend -l +50%FREE
/dev/datavg/lv1

2.扩展逻辑卷后需要更新fs文件系统

[root@node ~]# xfs_growfs
/dev/datavg/lv1 #xfs文件格式扩容
[root@node ~]# resize2fs
/dev/datavg/lv1  #ext文件格式扩容

7.6.2删除逻辑卷

1.选卸载挂载点,然后在移除逻辑卷

[root@oldxu ~]# umount /dev/datavg/lv1
[root@oldxu ~]# lvremove /dev/datavg/lv1

2.删除 vg

[root@oldxu ~]# vgremove datavg

3.删除 pv

[root@oldxu ~]# pvremove /dev/sdb
[root@oldxu ~]# pvremove /dev/sdc

8. 磁盘阵列RAID

8.1 什么是RAID

  • RAID 简称磁盘阵列,那什么是阵列:
  • 古代打仗时会对士兵进行排兵布阵,其目的在于提高
    士兵整体的作战能力,而不是某个士兵的战斗力。
  • 那么回到磁盘中,我们可以将多块盘组合进行排列,
    提高磁盘的整体读写能力,和冗余能力,通常我们将
    其称为磁盘阵列。

8.2 为什么需要RAID

  • 1.提升读写能力:(在RAID中,可以让很多磁盘同时
    传输数据,因为多块磁盘在逻辑上感觉是一个磁盘,
    所以使用RAID可以达到单个磁盘的几倍、几十倍甚至
    上百倍的速率。100MB/s --> 300MB/s)
  • 2.保证数据安全:(硬盘非常的脆弱,它经常会坏
    掉,所以有了RAID。它的目的是将好多个硬盘组合在
    一起;就算坏掉一块盘,也不影响服务器对外提供服
    务,保证磁盘高可用; abc b ac)
  • RAID可以预防数据丢失,但并不能百分百保证数据不
    丢,所以在使用RAID的同时还需要备份数据。

8.3 实现RAID的几种模式

8.3.1 RAID0

  • RAID0条带卷,最少两块盘。读写性能好,但没有容
    错机制。坏一块磁盘数据全丢。

    • 磁盘空间使用率:100%,成本低
    • 读性能: N * 单块磁盘的读性能 ;
    • 写性能: N * 单块磁盘的写性能 ;
    • 冗余:无,任何一块磁盘损坏都将导致数据不可用;
    • 应用场景:无状态服务(web);

8.3.2 RAID1

  • RAID1 镜像卷,写入性能一般、读取性能快、有容错
    机制,但磁盘有50%浪费

    • 磁盘空间使用率: 50% 成本较高。
    • 读性能: N * 单块磁盘的读性能 ;
    • 写性能: 1 * 单块磁盘的写性能 ;
    • 冗余:在这一对镜像盘中有一块磁盘可以使用,那么无影响;
    • 应用场景:系统盘;

8.3.3 RAID5

  • RAID5 校验卷,至少3块相同大小的盘,并且只允许
    坏一块盘,有效空间 (N-1) ,读写速度快。坏掉一块
    盘,读的性能会下降;

    • 磁盘空间利用率: (N-1) ,即只浪费一块磁盘用于
      奇偶校验;
    • 读性能: (n-1)*单块磁盘的读性能 ,接近 RAID0
      的读性能;
    • 写性能: (n-1)*单块磁盘的写性能 ,写入数据需要
      做校验值;性能会下降;
    • 冗余:只允许一块磁盘损坏; 修复时间会比较
      长,修复过程中可能会出现其他盘损坏的;
    • 应用场景:常规选择 (all) ;

8.3.4 RAID10

  • RAID10 ,先做 RAID1 ,在做 RAID0
    • 磁盘空间利用率: 50%
    • 读性能:
    • 写性能:
    • 冗余:只要一对镜像盘中有一块磁盘可以使用就没问题。
    • 应用场景:数据库(db);

8.4 实现RAID的方式

8.4.1 硬RAID(服务器 | raid卡)

  • 硬 RAID 使用硬件阵列卡;在安装操作系统之前进入
    BIOS 配置

  • raid列表

    • raid0
    • raid1
    • raid5
      • 选择磁盘

8.4.2 软RAID(软件)

  • 软 RAID 通过操作系统软件来实现,性能远不如硬
    RAID , 仅测试效果

8.5 软RAID配置实战

8.5.1 RAID环境准备

由于使用操作系统模拟的软RAID,所以需要在虚拟机上
添加 9 块硬盘,来完成实验;

  • 2.创建软 RAID 命令 mdadm ,如果没有使用 yum
    install mdadm 安装即可
    • mdadm 磁盘阵列命令选项
    • 创建模式:
      • –C :创建阵列;
      • -l :指定指定级别;
      • -n :指定设备数量;
      • -v :指定设备名称;
      • -x :指定备用磁盘;
    • 管理模式:
      • --add
      • –remove
      • --fail

8.5.2 RAID0实战

  • 创建 RAID0 实验环境:
raid种类 磁盘 热备盘
raid0 sdb,sdc

1.创建 raid0

[root@node ~]# mdadm -C -v /dev/md0 -l 0
-n 2 /dev/sdb /dev/sdc

2.查看阵列信息

[root@node ~]# mdadm -Ds
[root@node ~]# mdadm -D /dev/md0

3.格式化磁盘并分区挂载

[root@node ~]# mkfs.xfs /dev/md0
[root@node ~]# mkdir /raid0
[root@node ~]# mount /dev/md0 /raid0/
[root@node ~]# df -h

8.5.3 RAID1实战

  • 1)创建 RAID1 ,并添加1个热备盘;
  • 2)模拟磁盘故障,看备用盘是否会自动顶替故障盘;
  • 3)从 raid1 中移出故障盘;
  • 创建 RAID1 实验环境:
raid种类 磁盘 热备盘
raid1 sdd,sde sdf
  • 1.准备 sdb、sdc 两块盘,然后创建阵列为 RAID1 ,
    准备 sdd 为备用盘。
#1.创建raid1阵列
[root@node ~]# mdadm -C -v /dev/md1 -l 1 -
n 2 /dev/sdd /dev/sde -x1 /dev/sdf

  • 2.格式化磁盘并分区挂载;
[root@node ~]# mkfs.xfs -f /dev/md1
[root@node ~]# mkdir /raid1
[root@node ~]# mount /dev/md1 /mnt/raid1/

3.使用 --fail 模拟 RAID1 中数据盘 /dev/sde 出现故障,观察 /dev/sdf 备用盘能否自动顶替故障盘;

[root@node ~]# mdadm /dev/md1 --fail
/dev/sde

4.检查当然 raid 状态

[root@node ~]# # mdadm -D /dev/md1
 Number  Major  Minor  RaidDevice
State
   0    8    96     0  
active sync  /dev/sdd
   2    8    128     1  
spare rebuilding  /dev/sdf # 热备盘已经
在同步数据
   1    8    112     -  
faulty  /dev/sde  #故障盘

5.移除损坏的磁盘

[root@node ~]# mdadm /dev/md1 -r /dev/sde

8.5.4 RAID5实战

  • 1)使用三块盘创建 RAID5 ,使用 -x 添加热备盘
  • 2)模拟损坏一块磁盘,然后查看备用盘是否能顶用
    (此时是三块磁盘)
  • 3)然后在模拟一块磁盘损坏,检查数据是否损坏 (此
    时是二块磁盘)
    创建 RAID5 实验环境:
raid种类 磁盘 热设备
raid5 sdg,sdh,sdi sdj

1.创建 raid5 也可以在最后-x添加备用盘

[root@node~]# mdadm -C -v /dev/md5 -l 5 -
n 3 /dev/sdg /dev/sdh /dev/sdi -x1 /dev/sdj

2.格式化磁盘并分区挂载

[root@node ~]# mkfs.xfs -f /dev/md5
[root@node ~]# mkdir /mnt/raid5
[root@node ~]# mount /dev/md5 /raid5/
[root@node ~]# echo "Raid" > /raid5/file
[root@node ~]# mdadm -D /dev/md5

3.模拟一块磁盘损坏,查看 /dev/sdj 备用磁盘是否会顶上

[root@node ~]# mdadm /dev/md5 --fail
/dev/sdg
[root@node ~]# mdadm -D /dev/md5

4.将故障的 /dev/sdg 盘剔除;

[root@node ~]# mdadm /dev/md5 -r /dev/sdg

5.再次模拟一块磁盘损坏,检查数据是否丢失;

[root@oldxu ~]# mdadm /dev/md5 --fail
/dev/sdg
[root@oldxu ~]# mdadm -D /dev/md5

posted @ 2021-08-01 15:50  GaoBeier  阅读(347)  评论(0编辑  收藏  举报