linux中的软RAID实现,逻辑卷和btrfs文件系统
  TEZNKK3IfmPf 2023年11月13日 23 0

RAID: Redundant Arrays of Inexpensive Disks,廉价磁盘冗余阵列;
             Redundant Arrays of Independent Disks,独立磁盘冗余阵列;

    1988年,UC Berkeley提出的"A case for Redundant Arrays of Inexpensive Disks"旨在将多个相对廉价IDE接口的磁盘组合成一个"阵列",并不是将磁盘简单罗列在一起,而是根据特定规则进行组合,从而可以实现提高IO性能,实现磁盘冗余容错,或者此二功能兼具;

    RAID的好处:
        提高IO性能;磁盘并行读写机制;
        提高磁盘耐用性;通过磁盘冗余实现容错;

    RAID的级别:
        多块磁盘组织在一起的工作方式;

    RAID的实现方式:
        基于硬件实现;
            外接式磁盘阵列:通过扩展接口或扩展插槽提供具有RAID功能的适配硬件设备;
            内接式磁盘阵列:主板集成的RAID控制器;

        基于软件模拟实现;
            通过应用程序模拟硬件性能:

RAID的功能级别:
    RAID-0:条带卷,strip
        读写性能提升,
        磁盘可用空间:N*min(S1,S1,S1,S1)
        磁盘空间利用率:100%
        无容错能力
        至少需要2块磁盘

    RAID-1:镜像卷,mirror
        提升读性能,写性能下降;
        磁盘可用空间:1*min(S1,S2,...)
        磁盘利用率:1/n
        具备容错能力
        至少需要2块磁盘

    RAID-2:
    RAID-3:
    RAID-4:
    RAID-5:带有奇偶校验信息的条带卷;
        提升读写性能
        可用磁盘空间:N-1*min(S1,S2...)
        磁盘利用率:(N-1)/N
        具备容错能力
        至少需要3块磁盘

    RAID-6:双重奇偶校验的条带卷;
        提升读写性能
        可用磁盘空间:N-2*min(S1,S2...)
        磁盘利用率:(N-2)/N
        具备容错能力
        至少需要4块磁盘    

    RAID的混合级别:
        RAID-10
            读写性能提升
            具备容错能力
            磁盘利用率:1/2
            至少需要4块磁盘

        RAID-01
            读写性能提升
            具备容错能力
            磁盘利用率:1/2
            至少需要4块磁盘

        RAID-50
            读写性能提升
            具备容错能力
            至少需要6块磁盘

    JBOD:just a Bunch of Disks,仅仅是一组磁盘;将多块磁盘空间合并成一个更大的连续的存储空间;有人将此方式称为"跨区";

对于RAID,常用的级别
    RAID-0,RAID-1,RAID-5,RAID-10,RAID-50,JBOD

Centos系统上可以提供软件RAID的实现;
    内核中的md(multi devices)模块

    mdadm:模块化的工具;
        mdadm - manage MD devices aka Linux Software RAID

        mdadm [mode] <raiddevice> [options] <component-devices>

        Currently, Linux supports LINEAR md devices, RAID0 (striping), RAID1 (mirroring), RAID4, RAID5, RAID6, RAID10, MULTIPATH, FAULTY, and CONTAINER.

        [mode]:
            创建模式:-C
            装配模式:-A
            监控模式:-F
            管理模式:无选项开关
            增长模式:-G
            混杂模式:-D,-S

            create,bulid,brow
                -n:指定参与软RAID的磁盘的数量;
                -l:等级,比如RAID5
                -x:指定阵列中空闲的用于自动故障转换使用的设备数量;
                -c:指定条带化级别的RAID中,每个区块(CHUNK)的大小;
                -a:自动创建目标RAID设备文件;

        管理模式:
            -a:向阵列中添加新设备;
            -r:从阵列中移除设备;
            -f:将设备标记为失效;

        misc mode:
            -D:显示阵列信息;
                通过输出重定向保存阵列的装配记录;
                    mdadm -D --scan >> /etc/mdadm.conf
            -S:停止阵列功能;

            # mdadm -C md0 -n 4 -l 5  -a yes /dev/sdb /dev/sdc /dev/sdd /dev/sde
            # mdadm -S /dev/md0

        保存装配信息:
            # mdadm -D --scan  >> /etc/mdadam.conf

            mdadm -A /dev/md0

将添加进来的磁盘,三个一组建立三组RAID-5阵列;

[root@localhost ~]# mdadm -C md0 -n 3 -l 5 -a yes /dev/sdb /dev/sdc /dev/sdd 
[root@localhost ~]# mdadm -C md1 -n 3 -l 5 -a yes /dev/sde /dev/sdf /dev/sdh 
[root@localhost ~]# mdadm -C md2 -n 3 -l 5 -a yes /dev/sdj /dev/sdi /dev/sdk


LVM--Logical Volume Management ,逻辑卷管理器;
LVM2-LVM version 2
    使用纯软件的方式组织一个或多个底层的物理块设备,将他们重新定义为一个逻辑块设备的解决方案;

    利用linux内核中的dm模块实现;
    dm:device mapper,设备映射;

    dm模块可以将一个或多个底层设备,按照预期规划组织成特定的形式,从而实现更高级的逻辑磁盘管理方式;

    需要用户空间中的命令向dm 模块发出系统调用,才可以进行逻辑块设备管理;

    使用DM模块实现LVM观念里的一般性步骤:
        1.创建并标识物理卷,PV
        2.基于PV创建卷组,即逻辑块设备(VG),同时指定PE的大小;
            注意:一旦卷组创建完成,则PE的大小将固定下来,其值无法再次进行修改;如果想要调整PE的大小,只能重新定义卷组;
        3.在已有的卷组中,创建逻辑卷;
        4.需要在逻辑卷中创建文件系统(高级格式化);
        5.挂载;

物理卷的管理:
    注意:如果想要让一个基本分区称为物理卷,必须将分区的系统ID修改为8e;

    物理卷管理的相关命令:
        pvcreate:将普通的块设备创建为物理卷的设备;创建物理卷 ;
        pvremove:将物理卷设备转变为普通快设备;删除物理卷;
        pvdisplay:显示物理卷的详细信息;
        pvs:显示物理卷的简短信息;
        pvmove:将某个物理卷中的所有被LV占用的PE移动到其他的物理卷中;  

    卷组管理的相关命令:
        vgcreate
            格式:
                vgcreate [options] voliumegroupname  PhysicalDevicePath [PhysicalDevicePath...]
            -s:用于指定PE的大小,默认单位为MiB,默认大小为4MiB
                vgcreate -s 1M qhdlink /dev/sdb /dev/sdc
        vgreduce:从卷组中移除物理卷;
            注意:必须保证被移除的物理卷上没有被占用的PE;如果有,则需要先对物理卷执行pvmove命令;
        vgextend:想卷组中添加物理卷;
        vgdisplay:显示卷组的详细信息;
        vgs:显示卷组的简短信息;

    逻辑卷管理的相关命令:
        lvcreate:创建逻辑卷
            -L:指定逻辑卷的大小,其值不能超出卷组的容量;
            -l|--extents LogicalExtentsNumber[%{VG|PVS|FREE|ORIGIN}]:在创建逻辑卷时,指定逻辑卷中包含的LE的数量或者某个特定值的百分比;
            -i:在创建逻辑卷时;以条带的方式创建,并指明在逻辑卷上的条带的数量;
            -n:指明逻辑卷的名称;
            -s: 创建快照卷;
            -p:创建逻辑卷时指明此逻辑卷的操作权限;
            -a:
                -ay:创建逻辑卷的命令执行之后立即激活逻辑卷
                -an:创建逻辑卷的命令执行之后

            # lvcreate -L 5G -n class18 qhdlink
        
        lvs
        lvdisplay
        lvextend:扩展逻辑卷的物理边界;
            -L [+]SIZE[kKmMgG] /PATH/TO/LV

        resize2fs [-f] /PATH/TO/LV

            注意:扩展逻辑卷的空间,可以在线运行;   

          # lvextend -L +10G /dev/qhdlink/class18
          # resize2fs -f /dev/qhdlink/class18         

         lvreduce:缩减逻辑卷的物理边界;
         resize2fs [-f] /PATH/TO/LV LV_SIZE
             注意:
                 1.在缩减逻辑卷空间时,先缩减逻辑边界,再缩减物理边界;
                 2.缩减逻辑卷空间钱,先卸载并停用逻辑卷,缩减之后,在启用挂载即可;
                 3.建议在缩减逻辑卷之前,对文件系统进行检测,以保证数据一致性;

             缩减逻辑卷的示例:
                 # umount /mnt/lvm
                 # e2fsck /dev/qhdlink/class18
                 # resize2fs -f /dev/qhdlink/class18 10G
                 # lvchange -an /dev/qhdlink/class18
                 # lvreduce -L 10G /dev/qhdlink/class18
                 # lvchange -ay /dev/qhdlink/class18
                 # mount /dev/qhdlink/class18 /mnt/lvm

         逻辑卷的快照:
             快照:其本身也是逻辑卷,可以将其视为做快照的目标逻辑卷的另外一个访问路径;

             快照逻辑卷是一种特殊的逻辑卷,再其创建之初,其存储空间并没有任何消耗;只有当原来的逻辑卷中的数据发生变化时,才会消耗快照卷空间;

             快照卷中只包含原有逻辑卷中被更改的数据或自生成快照逻辑卷之后快照卷中更改的数据;

             快照卷也可以使用lvextend进行扩容;

             通常来说。快照卷和原卷会公用很多的PE,因此快照卷与原卷就必须在同一个VG上;在从快照卷备份数据的过程中,必须要保证,变化的数据的文件的总量不能超过快照卷的大小;

             创建快照卷:
                 lvcreate -L SIZE_SNAPSHOP -s -p r -n LV_NAME_SNAPSHOT /PATH/TO/LV_ORIGIN

             示例:
                 # lvcreate -L 5G -s -p r -n snap_class18  /dev/qhdlink/class18
                 # mkdir /mnt/snapshot
                 # mount /dev/qhdlink/snap_class18 /mnt/snapshot

                 完成数据备份之后:
                 # umount /mnt/snapshot
                 # lvremove /dev/qhdlink/snap_class18

lvm练习:

 1.将上述三个RAID-5设备做成物理卷,选择两个物理卷用于创建卷组raid_vg,要求PE大小为16MB;将另一个物理卷以卷组扩展的方式加入到卷组中;而后在卷组中创建大小为5GB的逻辑卷raid_lv,将其挂载至/userhome目录,并使其可以开机自动挂载;

[root@localhost ~]# pvcreate /dev/md/localhost.localdomain\:md0
[root@localhost ~]# pvcreate /dev/md/localhost.localdomain\:md1
[root@localhost ~]# pvcreate /dev/md/localhost.localdomain\:md2
[root@localhost ~]# vgcreate -s 16M raid_vg /dev/md125 /dev/md126
[root@localhost ~]# vgextend raid_vg /dev/md127
[root@localhost ~]# lvcreate -n raid_lv -L 5G raid_vg
[root@localhost ~]# mkdir /userhome/
[root@localhost ~]# mount /dev/raid_vg/raid_lv  /userhome/

  2.创建新用户lvmuser,其家目录为/userhome/lvmuser,而后,使用该目录登录系统,复制/etc/pam.d目录至其家目录中;

[root@localhost ~]# cp -a /etc/pam.d /userhome/lvmuser/



  3.在线扩展raid_lv至20GB,要求lvmuser用户的文件不能丢失;

[root@localhost ~]# lvextend -L 20G /dev/raid_vg/raid_lv
[root@localhost ~]# resize2fs -f /dev/raid_vg/raid_lv



  4.缩减raid_lv至15GB,要求lvmuser用户的文件不能丢失;

[root@localhost ~]# umount /userhome/
[root@localhost ~]# e2fsck /dev/raid_vg/raid_lv 
[root@localhost ~]# resize2fs -f /dev/raid_vg/raid_lv  15G
[root@localhost ~]# lvchange -an /dev/raid_vg/raid_lv 
[root@localhost ~]# lvreduce -L 15G /dev/raid_vg/raid_lv
[root@localhost ~]# lvchange -ay /dev/raid_vg/raid_lv
[root@localhost ~]# mount /dev/raid_vg/raid_lv /userhome/



  5.对raid_lv创建快照,并尝试基于快照备份数据,验证快照的功能;

~]# lvcreate -L 5G -s -p r -n snap_raid  /dev/raid_vg/raid_lv
~]# mkdir /userhome/snapshot
~]# mount /dev/raid_vg/raid_lv /userhome/snapshot
~]# umount /userhome/snapshot
~]# lvremove /dev/raid_vg/raid_lv


btrfs:
    文件系统
    Btree-FS,Better FS ,Butter FS
    2007年由Oracle开源,得到IBM,Intel等厂商的支持,其开发目的就就是为了替换ext3/4,成为下一代linux上的标准文件系统;

    在2014年8月之前,btrfs都是技术预览版(Technical Preview)

    btrfs的特性:
        1.可扩展性:
        2.多物理卷支持;
        3.写时复制的数据更新机制(CoW);
            更新、修改等操作是在复制之后替换指针;
        4.数据及元数据的校验码;
        5.子卷管理;
        6.快照,快照的快照;文件的快照;
        7.透明压缩,隐形压缩;

    创建btrfs:
        mkfs.btrfs | mkfs -t btrfs
            mkfs.btrfs - create a btrfs filesystem
            格式:
                mkfs.btrfs [options] device [device ...]

            常用选项:
                -d|-date <type>:为数据存储指明硬件设备的组织形式;
                    raid0, raid1, raid5, raid6, raid10 or single
                -m|--metadata <profile>:为元数据的存储指明硬件设备的组织形式:
                    Valid values are raid0, raid1, raid5, raid6, raid10, single or dup
                -L|--label <string>:为即将创建的btrfs指定文件系统卷标;
                -O|--features <feature1>[,<feature2>...]:指定btrfs文件系统的特性,如果想要查看能够提供哪些特性,使用mkfs.btrfs -O list-all查看;

透明压缩功能的支持:
    # mount -o compress={lzo|zlib} DECICE MOUNT_POINT

    btrfs命令:
        btrfs - control a btrfs filesystem

        btrfs <command> [<args>]

        <command>:
            filesystem:
                btrfs filesystem <subcommand> <args>

                    df [options] <path>:显示btrfs文件系统的空间利用率;
                    label [<dev>|<mountpoint>] [<newlabel>]:查看或设置btrfs文件系统的卷标;
                    resize [<devid>:][+/-]<size>[kKmMgGtTpPeE]|[<devid>:]max <path>:在线修改文件系统的大小;
                    show [options] [<path>|<uuid>|<device>|<label>]:查看btrfs文件系统的信息;
                    sync <path>:强制将内存中的数据同步至文件系统;
                    usage [options] <path> [<path>...]:查看btrfs文件系统上各硬件设备的磁盘使用率;

            device:
                btrfs device <subcommand> <args>

                    add [-Kf] <dev> [<dev>...] <path>:向btrfs系统中添加新设备
                    remove <dev> [<dev>...] <path>:向btrfs系统中删除设备

            balance:
                btrfs balance <subcommand> <args>

                    start [options] <path>:在线调整跨设备的chunk;修改数据以及元数据的组织方式
                        -d[<filters>]
                            -dconvert={raid0, raid1, raid5, raid6, raid10, single}
                        -m[<filters>]
                            -mconvert={raid0, raid1, raid5, raid6, raid10, single,dup}
                        -s[<filters>]
                            -sconvert={raid0, raid1, raid5, raid6, raid10, single}
                    pause <path>:
                        暂停正在运行平衡的操作
                    cancel <path>:
                        撤销此前正在运行或暂停的平衡操作;
                    status [-v] <path>:
                        查看平衡过程的状态;
                    resume <path>:
                        恢复被打断的过程;

            subvolume:
                btrfs subvolume <subcommand> [<args>]

                    create [-i <qgroupid>] [<dest>]<name>:
                        创建子卷;
                    delete [options] <subvolume> [<subvolume>...]:
                        删除子卷;
                    snapshot [-r] <source> <dest>|[<dest>/]<name>
                        为指定的子卷创建快照卷;

    ext系列文件系统和btrfs之间安全转换:
        btrfs-convert
                btrfs-convert - convert from ext2/3/4 filesystem to btrfs
                    btrfs-convert [options] <device>

                    从ext转换至btrfs:
                        btrfs-convert /dev/sde1
                    从btrfs回滚至ext:
                        btrfs-convert -r /dev/sde1

        注意:转换操作需要提前将设备卸载;

Btrfs练习:
    1.删除一、二两个题目中的LV、VG、PV及RAID-5,将任意两个物理磁盘联合在一起建立btrfs;

[root@localhost ~]# lvremove /dev/raid_vg/raid_lv 
[root@localhost ~]# vgremove /dev/raid_vg
[root@localhost ~]# pvremove /dev/raid_vg
[root@localhost ~]# pvremove /dev/md125 /dev/md126 /dev/md127
[root@localhost ~]# mkfs.btrfs -L Btrfs /dev/sdb /dev/sdc
    2.将btrfs挂载,并向其中写入数据(可以复制文件或目录,可以创建文件或目录);
[root@localhost ~]# mount /dev/sdb /userhome/btrfs/
[root@localhost ~]# cp /etc/passwd /userhome/btrfs/
[root@localhost ~]# head -1 /userhome/btrfs/passwd
root:x:0:0:root:/root:/bin/bash
    3.尝试向btrfs中添加几个新的物理设备,并移除原有的几个物理设备,但始终保证其磁盘数量超过三个;
[root@localhost ~]# btrfs device add /dev/sdd /userhome/btrfs
    4.将btrfs的数据和元数据的组织形式都改为RAID-5;
[root@localhost ~]# btrfs balance start -dconvert=raid5 -mconvert=raid5 /userhome/btrfs
    5.在btrfs上创建子卷,记录子卷ID后,卸载父卷并尝试挂载子卷;
[root@localhost ~]# btrfs subvolume creat /userhome/btrfs/logs
[root@localhost ~]# umount /userhome/btrfs/
[root@localhost ~]# mkdir /userhome/logs
[root@localhost ~]# mount -o subvolid=260 /dev/sdb /userhome/logs
    6.卸载子卷后再挂载父卷,并为之前的子卷创建快照卷,利用快照卷完成子卷中数据的备份;
# umount /userhome/logs/
# mount /dev/sdb /userhome/btrfs/
# ls /userhome/btrfs/
logs  passwd
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月13日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年05月31日   52   0   0 linux服务器
  TEZNKK3IfmPf   2024年05月31日   31   0   0 linux服务器centos
  TEZNKK3IfmPf   2024年05月31日   29   0   0 linuxbind
  TEZNKK3IfmPf   2024年05月31日   40   0   0 linuxshell
TEZNKK3IfmPf