zoukankan      html  css  js  c++  java
  • 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
    
    

    本文来自博客园,作者:GaoBeier,转载请注明原文链接:https://www.cnblogs.com/gao0722/p/15086834.html

  • 相关阅读:
    线程
    unix架构
    Unix命令
    可重入函数reentrant function
    Eclipse 中 program arguments 与 VM arguments 的区别
    Java中Generics的使用
    Java的Reflection机制
    Java按值传递、按引用传递
    Java label
    LeetCode Merge Intervals
  • 原文地址:https://www.cnblogs.com/gao0722/p/15086834.html
Copyright © 2011-2022 走看看