zoukankan      html  css  js  c++  java
  • 《Linux就该这么学》培训笔记_ch07_RAID和LVM

    《Linux就该这么学》培训笔记_ch07_RAID和LVM

    文章最后会post上书本的笔记照片。

    文章主要内容

    RAID(独立冗余磁盘阵列)

    RAID技术通过把多个硬盘设备组合成一个容量更大、安全性更好的磁盘阵列,并把数据切割成多个区段后分别存放在各个不同的物理硬盘设备上,然后利用分散读写技术来提升磁盘阵列整体的性能,同时把多个重要数据的副本同步到不同的物理硬盘设备上,从而起到了非常好的数据冗余备份效果。

    冗余备份意味着成本增多,但数据安全提高,相对于数据本身的价值,这点成本值得投入。

    最常见的RAID磁盘阵列方案:

    RAID 0(能够有效地提升硬盘数据的吞吐速度,但是不具备数据备份和错误修复能力:把多块物理硬盘设备(至少两块)通过硬件或软件的方式串联在一起,组成一个大的卷组,并将数据依次写入到各个物理硬盘中。数据被分别写入到不同的硬盘设备中,即disk1和disk2硬盘设备会分别保存数据资料,实现提升读取、写入速度的效果。若任意一块硬盘发生故障将导致整个系统的数据都受到破坏

    RAID 1(没有提高读写速度,硬盘空间真实可用率减半,数据安全性提高:把两块以上的硬盘设备进行绑定,在写入数据时,是将数据同时写入到多块硬盘设备上(可以将其视为数据的镜像或备份,增大系统负载)。当其中某一块硬盘发生故障后,一般会立即自动以热交换的方式来恢复数据的正常使用

    RAID 5(“妥协”地兼顾了硬盘设备的读写速度、数据安全性与存储成本问题:把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中。RAID 5磁盘阵列组中数据的奇偶校验信息并不是单独保存到某一块硬盘设备中,而是存储到除自身以外的其他每一块硬盘设备上,这样的好处是其中任何一设备损坏后不至于出现致命缺陷;parity部分存放的就是数据的奇偶校验信息,RAID 5技术实际上没有备份硬盘中的真实数据信息,而是当硬盘设备出现问题后通过奇偶校验信息来尝试重建损坏的数据

     

    RAID 10(RAID 1+RAID 0技术的“组合体”需要至少4块硬盘来组建,其中先分别两两制作成RAID 1磁盘阵列,以保证数据的安全性;然后再对两个RAID 1磁盘阵列实施RAID 0技术,进一步提高硬盘设备的读写速度。只要坏的不是同一组中的所有硬盘,那么最多可以损坏50%的硬盘设备而不丢失数据。由于RAID 10技术继承了RAID 0的高读写速度和RAID 1的数据安全性,在不考虑成本的情况下RAID 10的性能都超过了RAID 5,因此当前成为广泛使用的一种存储技术。

     

    部署磁盘阵列

    mdadm命令:用于管理Linux系统中的软件RAID硬盘阵列。格式:mdadm [模式] <RAID设备名称> [选项] [成员设备名称]。

    mdadm命令的常用参数和作用:

    参数 作用
    -a 检测设备名称
    -n 指定设备数量
    -l 指定RAID级别
    -C 创建
    -v 显示过程
    -f 模拟设备损坏
    -r 移除设备
    -Q 查看摘要信息
    -D 查看详细信息
    -S 停止RAID磁盘阵列

    实例:添加4块硬盘(每块硬盘大小10G),创建RAID 10磁盘阵列。

    1 mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sd[b-e]        #创建RAID 10,命名为/dev/md0,由4个盘(/dev/sd[b-e])组成显示创建过程自动创建设备文件
    2 mkfs.ext4 /dev/md0                                       #把RAID 10磁盘阵列格式化为ext4格式
    3 mkdir /RAID                                              #创建挂载点
    4 mount /dev/md0 /RAID                                     #把RAID 10磁盘阵列挂载到/RAID目录
    5 df -h                                                    #查看挂载状态和硬盘使用量信息,可以看到,4个10G的硬盘,组成RAID 10后,可用空间为20G
    6 mdadm -D /dev/md0                                        #查看/dev/md0磁盘阵列的详细信息
    7 echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab    #往/etc/fstab文件中追加挂载信息,实现永久挂载

    损坏磁盘阵列及修复

    实例:承接上面实例,移除阵列中一块硬盘来模拟一块硬盘损坏。

    1 mdadm /dev/md0 -f /dev/sdb    #把/dev/sdb从磁盘阵列/dev/md0中移除
    2 mdadm -D /dev/md0             #查看磁盘这列/dev/md0详细信息,发现/dev/sdb状态从active变为faulty
    3 umount /RAID                  #先重启系统,卸载/RAID目录
    4 mdadm /dev/md0 -a /dev/sdb    #把新硬盘添加到RAID磁盘阵列中
    5 mdadm -D /dev/md0             #查看磁盘阵列/dev/md0详细信息,/dev/sdb正在 spare rebuilding,然后变回active
    6 mount -a                      #重新挂载

    磁盘阵列+备份盘

    部署RAID 5 磁盘阵列时,至少需要用3块硬盘,还需要再加一块备份硬盘。

    实例:还原虚拟机,部署RAID 5 + 1备份盘 。

    1 mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sd[b-e]           #用3块硬盘创建RAID 5磁盘阵列,再用1块作为备份盘
    2 mdadm -D /dev/md0                                        #查看磁盘阵列详细信息,显示3个盘为actvie,1个盘为spare,RAID类型为RAID 5
    3 mkfs.ext4 /dev/md0                                       
    4 echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab    #往/etc/fstab文件追加挂载信息,以实现永久挂载
    5 mkdir /RAID
    6 mount -a
    7 mdadm /dev/md0 -f /dev/sdb                               #故意移除RAID 5阵列中的其中一个盘(active的盘)
    8 mdadm -D /dev/md0                                        #再查看磁盘阵列/dev/md0详细信息,显示备份盘自动定提上去并开始数据同步(spare rebuilding)。

    LVM(逻辑卷管理器)

    RAID硬盘设备管理技术虽然能够有效地提高硬盘设备的读写速度以及数据的安全性,但是在硬盘分好区或者部署为RAID磁盘阵列之后,再想修改硬盘分区大小就不容易了

    当用户想要随着实际需求的变化调整硬盘分区的大小时,会受到硬盘“灵活性”的限制。

    LVM(逻辑卷管理器)可以允许用户对硬盘资源进行动态调整。(让用户灵活的变更分区的大小)

    逻辑卷管理器是Linux系统用于对硬盘分区进行管理的一种机制,理论性较强,其创建初衷是为了解决硬盘设备在创建分区后不易修改分区大小的缺陷。尽管对传统的硬盘分区进行强制扩容或缩容从理论上来讲是可行的,但是却可能造成数据的丢失。而LVM技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样一来,用户不必关心物理硬盘设备的底层架构和布局,就可以实现对硬盘分区的动态调整。

    第7章 使用RAID与LVM磁盘阵列技术。第7章 使用RAID与LVM磁盘阵列技术。

    LVM核心概念:

    • 物理卷处于LVM中的最底层,可以将其理解为物理硬盘、硬盘分区或者RAID磁盘阵列;
    • 卷组建立在物理卷之上,一个卷组可以包含多个物理卷,而且在卷组创建之后也可以继续向其中添加新的物理卷;
    • 逻辑卷是用卷组中空闲的资源建立的,并且逻辑卷在建立后可以动态地扩展或缩小空间;

    LVM的原理(个人理解):由几个物理卷(即几块硬盘)组成一个卷组,再从这个卷组中按自己的需要切割出一定大小的空间作为逻辑卷。创建好的逻辑卷还能扩容缩容。

    老刘的比喻简直一流,LVM就好比做馒头,因为不知道要做多少,所以先把若干包面粉(硬盘,即pv)揉成大面团(gv),再分割成一个个不大不小的馒头(lv),家里有大人小孩,大人的馒头要大点,多加点面团(lv扩容),小孩馒头吃得小,少点面团(lv缩容)

    部署逻辑卷

    常用的LVM部署命令

    功能/命令 物理卷管理 卷组管理 逻辑卷管理
    扫描 pvscan vgscan lvscan
    建立 pvcreate vgcreate lvcreate
    显示 pvdisplay vgdisplay lvdisplay
    删除 pvremove vgremove lvremove
    扩展   vgextend lvextend
    缩小   vgreduce lvreduce

    部署逻辑卷步骤:(PV -> VG -> LV)

    1. 让硬盘设备支持LVM技术(pvcreate)。
    2. 把硬盘设备加入到卷组(vgcreate)。
    3. 从卷组中切割一定空间作为逻辑卷(lvcreate)。
    4. 把生成好的逻辑卷进行格式化,然后挂载使用(mkfs,mount,/etc/fstab)。
     1 pvcreate /dev/sdb /dev/sdc                                            #创建物理卷,让硬盘设备支持LVM
     2 vgcreate storage /dev/sdb /dev/sdc                                    #把创建好的物理卷组成卷组,命名为storge
     3 vgdisplay                                                             #查看卷组状态
     4 lvcreate -n vo -l 40 storage                                          #从卷组storge切割出40个基本单元(默认大小4M)创建一个160M的逻辑卷,命名为vo。-l 40效果等同于-L 160M
     5 lvdisplay                                                             #查看逻辑卷状态
     6 mkfs.ext4 /dev/storage/vo                                             #格式化逻辑卷vo
     7 echo "/dev/storage/vo /linuxprobe ext4 defaults 0 0" >> /etc/fstab    #往/etc/fatab文件追加挂载信息,实现永久挂载
     8 mkdir /linuxprobe                                                     #创建挂载点
     9 mount -a                                                              #挂载
    10 df -h                                                                 #查看挂载状态

    扩容逻辑卷

    扩容前,先卸载设备和挂载点的关联

    1. 扩容逻辑卷(lvextend);
    2. 检查硬盘完整性(e2fsck),并重置硬盘容量(resize2fs);
    3. 重新挂载硬盘设备并查看挂载状态。

    实例:承接上面实例,把逻辑卷vo扩容至400M。

    1 umount /linuxprobe                  #卸载设备和挂载点关联
    2 lvextend -L 400M /dev/storage/vo    #扩容逻辑卷vo至400M
    3 e2fsck -f /dev/storage/vo           #检查硬盘完整性
    4 resize2fs /dev/storage/vo           #重置硬盘容量如果明明执行了多次e2fsck命令还是提示“运行e2fsck命令”,重启系统再试5 mount -a                            #重新挂载
    6 df -h                               #查看挂载状态

    缩小逻辑卷

    缩容前,先卸载设备和挂载点的关联

    1. 检查硬盘完整性(e2fsck);
    2. 先向系统报备一下即将要执行逻辑卷缩容的操作(resize2fs),再缩容逻辑卷(lvreduce);
    3. 重新挂载硬盘设备并查看挂载状态。

    实例:承接上面实例,把逻辑卷vo缩容至120M。

    1 umount /linuxprobe                  #卸载
    2 e2fsck -f /dev/storage/vo           #检查文件系统完整性
    3 resize2fs /dev/storage/vo 120M      #先通知系统,即将要执行对逻辑卷vo缩容到120M的操作,看有没有问题
    4 lvreduce -L 120M /dev/storage/vo    #把逻辑卷vo缩容至120M
    5 mount -a                            #重新挂载
    6 df -h                               #查看挂载状态

    逻辑卷快照

    LVM快照:类似于虚拟机软件的还原时间点功能。

    可以对某一个逻辑卷设备做一次快照,如果日后发现数据被改错了,就可以利用之前做好的快照卷进行覆盖还原。

    LVM的快照卷功能有两个特点:

    • 快照卷的容量必须等同于逻辑卷的容量;
    • 快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除。不过一个逻辑卷可以做多个快照卷。

    实例:承接上面例子,往逻辑卷设备新建一个文件。然后为逻辑卷创建快照卷。再在逻辑卷目录生成一个垃圾文件。后先卸载逻辑卷与挂载点关联,再尝试快照还原操作(lvconvert --merge),再重新挂载,查看逻辑卷目录是否回到创建快照前的状态。

    1 echo "Welcome to Linuxprobe.com" > /linuxprobe/readme.txt    #往逻辑卷设备写入一个文件
    2 ls -l /linuxprobe                                            #查看逻辑卷目录的内容
    3 lvcreate -L 120M -s -n SSS /dev/storage/vo                   #为逻辑卷vo生成一个快照卷,命名为SSS,指定切割大小为120M,
    4 lvdisplay                                                    #查看逻辑卷详细信息,可以看到SSS是vo的快照卷(snapshot)
    5 dd if=/dev/zero of=/linuxprobe/files count=1 bs=100M         #在逻辑卷vo的目录下创建一个100M的文件
    6 lvdisplay                                                    #查看逻辑卷详细信息,可以发现vo的空间占用量上升
    7 umount /linuxprobe                                           #卸载逻辑卷与挂载点关联
    8 lvconvert --merge /dev/storage/SSS                           #对逻辑卷vo进行快照还原操作9 mount -a                                                     #重新挂载
    10 ls /linuxprobe/                                             #查看逻辑卷目录,可以发现创建快照后再创建的100M文件不见了,逻辑卷恢复成设置快照前的状态

    删除逻辑卷

    删除LVM前记得提前备份。

    删除逻辑卷,要依次删除逻辑卷(lvremove )、卷组(vgremove )、物理卷设备(pvremove ),顺序不可颠倒。

    实例:承接上面例子,删除逻辑卷。

    1 umount /linuxprobe                               #卸载
    2 vim /etc/fstab
    3 /dev/storage/vo /linuxprobe ext4 defaults 0 0    #删除挂载信息
    4 lvremove /dev/storage/vo                         #删除逻辑卷,要按y确认
    5 vgremove storage                                 #删除卷组
    6 pvremove /dev/sdb /dev/sdc                       #删除物理卷

    书本笔记

  • 相关阅读:
    ajax方法参数详解与$.each()和jquery里面each方法的区别
    Struts2框架里面action与前端jsp页面进行交互路径问题---》一个对话框里面有很多超链接,进行相应的跳转
    Struts2框架action路径问题心得----》页面url请求怎么找action
    Mybatis映射.xml文件报错
    MyBatis框架流程
    Struts2框架action层学习心得体会
    动态sql语句和动态传入参数个数
    String,数组,list集合长度的使用
    ResourceBundle和Locale
    linux编译内核
  • 原文地址:https://www.cnblogs.com/kaminwu/p/10916161.html
Copyright © 2011-2022 走看看