• lvs
  • raid

lvm: logical volumes manager,从物理设备创建虚拟块设备,将一个或多个底层块设备组织成一个逻辑设备的模块,能够更好的管理磁盘,通过对底层的封装,对磁盘进行动态管理。 基本概念: pv :physical volume物理卷处于最底层 vg :volume group卷组,建立在物理卷之上,最小单位为pe lv :logical volume 逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间

管理使用:

pv管理工具 vg管理工具 lv管理工具
pvs:简要显示PV信息 vgs :显示vg简要信息 lvs :显示lv简要信息
pvdisplay:显示详细信息 vgdisplay 显示详细信息 lvdisplay 显示详细信息
pvcreate /dev/device... :创建PV vgcreate [-s #[kKmMgGtTpPeE]] VG_Name /dev/device...]#创建vg,-s指明pe大小,默认4m lvcreate -L #[mMgGtT] -n NAME VolumeGroup #-l 指明pe多少个 ,-L lv大小
pvremove /dev/device...删除PV vgextend VG_Name /dev/device... #扩容vg lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME: lv扩容后还需要修改逻辑大小:resizefs /dev/VG_NAME/LV_NAME
pvmove /dev/device /dev/device:数据迁移 vgreduce VG_Name /dev/device... #缩容 缩减逻辑卷看缩减步骤
vgremove vg_name删除卷组 :注收缩需先迁移数据 lvremove /dev/VG_NAME/LV_NAME #删除逻辑卷

lv缩减步骤:

# umount /dev/VG_NAME/LV_NAME#先卸载,xfs可以不用卸载
# e2fsck -f /dev/VG_NAME/LV_NAME #强制检测文件系统
# resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT] #执行缩减操作
# lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME #缩减lv
# mount

简单实践:

[root@xt ~]# pvcreate /dev/sdb{1,2}
  Physical volume "/dev/sdb1" successfully created.
  Physical volume "/dev/sdb2" successfully created.
[root@xt ~]# pvs
  PV         VG Fmt  Attr PSize PFree
  /dev/sdb1     lvm2 ---  1.00g 1.00g
  /dev/sdb2     lvm2 ---  1.00g 1.00g
[root@xt ~]# pvdisplay 
  "/dev/sdb2" is a new physical volume of "1.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb2
  VG Name               
  PV Size               1.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               3XTOcT-uIc3-73Hc-alkn-EKWJ-yyqv-CZYDsR
   
  "/dev/sdb1" is a new physical volume of "1.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               1.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               KZ6Mwf-GPQc-xGQf-xWwS-FCnS-yLtn-XqJofh
= ================================================== 
[root@xt ~]# vgcreate myvg /dev/sdb1
  Volume group "myvg" successfully created
[root@xt ~]# vgs
  VG   #PV #LV #SN Attr   VSize    VFree   
  myvg   1   0   0 wz--n- 1020.00m 1020.00m
[root@xt ~]# vgextend myvg /dev/sdb2
  Volume group "myvg" successfully extended
[root@xt ~]# vgs
  VG   #PV #LV #SN Attr   VSize VFree
  myvg   2   0   0 wz--n- 1.99g 1.99g
[root@xt ~]# vgdisplay 
  --- Volume group ---
  VG Name               myvg
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               1.99 GiB
  PE Size               4.00 MiB
  Total PE              510
  Alloc PE / Size       0 / 0   
  Free  PE / Size       510 / 1.99 GiB
  VG UUID               b5t7N7-xMBg-5O8w-xS5m-2OTV-IpBd-98mR5w
===================================================
[root@xt ~]# lvcreate -L 200m --name mylv myvg 
  Logical volume "mylv" created.
[root@xt ~]# lvs
  LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv myvg -wi-a----- 200.00m                                                    
[root@xt ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/myvg/mylv
  LV Name                mylv
  VG Name                myvg
  LV UUID                PelWrs-D13Q-8btE-q0RV-tFsA-6miC-FTqwns
  LV Write Access        read/write
  LV Creation host, time xt.com, 2019-01-11 22:24:56 +0800
  LV Status              available
  # open                 0
  LV Size                200.00 MiB
  Current LE             50
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0
=================================================
[root@xt ~]# mkfs.ext4 /dev/myvg/mylv 
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
51200 inodes, 204800 blocks
10240 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=33816576
25 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks: 
	8193, 24577, 40961, 57345, 73729

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done 

[root@xt ~]# mount /dev/myvg/mylv /mnt
[root@xt ~]# df -h
Filesystem             Size  Used Avail Use% Mounted on
/dev/sda1               10G  4.0G  6.1G  40% /
devtmpfs               984M     0  984M   0% /dev
tmpfs                  993M     0  993M   0% /dev/shm
tmpfs                  993M  8.7M  985M   1% /run
tmpfs                  993M     0  993M   0% /sys/fs/cgroup
/dev/sda3              256M   83M  173M  33% /boot
tmpfs                  199M     0  199M   0% /run/user/0
/dev/mapper/myvg-mylv  190M  1.6M  175M   1% /mnt
==========================================
模拟数据迁移:需要同一个vg
[root@xt mnt]# mount /dev/myvg/mylv /mnt
[root@xt mnt]# cp -r /tmp/ /mnt/
[root@xt tmp]# pvs
  PV         VG   Fmt  Attr PSize    PFree    
  /dev/sdb1  myvg lvm2 a--  1020.00m  820.00m #数据主要在sdb1,迁移到目标的容量要比现有大
  /dev/sdb2  myvg lvm2 a--  1020.00m 1020.00m
[root@xt tmp]# pvmove /dev/sdb1 /dev/sdb2
  /dev/sdb1: Moved: 4.00%
  /dev/sdb1: Moved: 100.00%
[root@xt tmp]# pvs
  PV         VG   Fmt  Attr PSize    PFree   
  /dev/sdb1  myvg lvm2 a--  1020.00m 1020.00m
  /dev/sdb2  myvg lvm2 a--  1020.00m  820.00m
[root@xt tmp]# vgreduce myvg  /dev/sdb1
  Removed "/dev/sdb1" from volume group "myvg"
[root@xt tmp]# pvs
  PV         VG   Fmt  Attr PSize    PFree  
  /dev/sdb1       lvm2 ---     1.00g   1.00g
  /dev/sdb2  myvg lvm2 a--  1020.00m 820.00m
[root@xt tmp]# vgs
  VG   #PV #LV #SN Attr   VSize    VFree  
  myvg   1   1   0 wz--n- 1020.00m 820.00m

RAID:Redundant arrays of inexpensive | independent disks 为了解决为了组合廉价的小磁盘来代替昂贵的大磁盘,同时在磁盘失效的时候能保护数据。引入了RAID机制,RAID可以充分发挥出多块磁盘的优势,可以提升IO能力,增大容量,提供容错等能力。

  • RAID实现方式: 外接式磁盘阵列:通过扩展卡提供适配能力 内接式RAID:主板集成控制器 软件实现,但生产不建议
  • RAID级别:
    • RAID 0:称为stripe条带卷,可以将多块磁盘组合成一个更大的硬盘组,从而提升磁盘性能和吞吐量,至少2块磁盘。

    • RAID 1 :称为镜像mirror,一份数据存为完全写为2份

    • RAID 2/3使用的比较少。

    • RAID 4:采用一个专用的磁盘作为校验盘,其余磁盘作为数据盘,数据按数据块的方式交叉存储到各个数据盘中。

    • RAID 5 :在4的基础之上改进,校验码轮询放在各个盘,消除校验盘单点故障。5 兼顾存储性能、数据安全和存储成本等各方面因素,它可以理解为 RAID0 和 RAID1 的折中方案。

    • RAID 6 :在5的基础上再加多一块校验盘,双重校验,相对成本比较高

    • RIAD 10:RAID0 和RAID 1结合,先做raid0再做raid1,但RAID 01与之刚好相反。能利用的空间都只有一半。

    • raid5 与raid10如何选择:raid5适合静态业务,raid10适合动态业务(大量写操作没有额外校验开销)

  • 软件实现RAID方法:mdadm-4.1-rc1_2.el7.x86_64 程序包实现
    • mdadm工具使用:支持RAID的级别:LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10;
    • 用法:mdadm [mode] <raiddevice> [options] <physical-devices> 模式: 创建: -C 装配: -A 监控: -F 管理: -f,-r,-a <raiddevice>: /dev/md# <physical-devices> :块设备
    • 如:mdadm -C /dev/md0 -a yes -n 3 -x 1 -l 5 /dev/sda{5,6,7,8} 选项:
      -n #: 使用#个块设备来创建此RAID;
      -l #:指明要创建的RAID的级别;
      -a {yes|no} #自动创建目标RAID设备的设备文件;
      -c CHUNK_SIZE #指明块大小;
      -x #: 指明空闲盘的个数;
      
    • 查看raid信息及观察md的状态: mdadm -D /dev/md# cat /proc/mdstat
    • 管理模式
      -f: 标记指定磁盘为损坏; 模拟损坏:mdadm /dev/md0 -f /dev/sda7
      -a: 添加磁盘
      -r: 移除磁盘
      
    • 停止设备 mdadm -S /dev/md#