【Linux】LVM逻辑卷管理和RAID

时间:2021-06-21 19:21:17
LVM概述:
  是对磁盘分区进行管理的一种机制
  是一种将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不 够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现一种磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性,使用普通的磁盘分区,当一个磁盘的分区空间不够使用的时候,可能就会带来很大的麻烦。使用LVM在一定程度上就可以解决普通磁盘分区带来的问题。
  屏蔽了底层磁盘布局,便于动态调整磁盘容量
  相对传统分区方式的有下列优点
    ·空间利用率高:硬盘的多个分区由LVM统一为卷组管理,可以方便的加入或移走分区以扩大或减小卷组的可用容量,充分利用硬盘空间
    ·可以在线扩展容量:文件系统建立在逻辑卷上,而逻辑卷可根据需要改变大小(在卷组容量范围内)以满足要求
    ·文件系统建立在LVM上,可以跨分区,方便使用
    ·可随意定义逻辑卷卷标
    
注:/boot分区用于存放引导文件,不能应用LVM机制
 
LVM机制的基本概念:
  PV(Physical Volume,物理卷)
    处于LVM最底层,可以是整个硬盘或使用fdisk等工具建立的普通分区,包括许多默认4MB大小的PE(Physical Extents,基本单元),PE是PV中可以用于分配的最小存储单元
  VG(Volume Group,卷组)
    是一个或多个物理卷组合而成的整体,是建立在PV之上的。同一VG中所有PV的PE大小应该相同,当VG被创建后,我们才能正常查看PE的数量 。
  LV(Logical Volume,逻辑卷)
    从卷组中分割出的一块空间,它是建立在VG之上,相当于原来分区的概念。不过大小可以动态改变。其实LV就是由PE组成的,不过在LV里面这些PE叫做LE。
  LE(Logical Extents)
    LE是LV中可以用于分配的最小存储单元,与PE大小相同并一一对应
 
LVM管理命令:
【Linux】LVM逻辑卷管理和RAID

    【Linux】LVM逻辑卷管理和RAID

【Linux】LVM逻辑卷管理和RAID

【Linux】LVM逻辑卷管理和RAID
 
建立命令的方法:
  ·pvcreate 设备名
  ·vgcreate 卷组名 物理卷名1 物理卷名2
  ·lvcreate -L 大小 -n 逻辑卷名 卷组名
 

LVM应用实例:
  公司的邮件服务器由于用户数量众多,邮件存储需要大量的空间,考虑到动态扩容的需要,计划增加两块SCSI硬盘并构建LVM逻辑卷,挂载到“/mail”目录专门用于存放邮件数据
    1. 转化物理卷
      使用fdisk命令规划两个分区,类型设置为“8e”
        /dev/sdb1、/dev/sdc1
      使用pvcreate命令转换上述分区为物理卷
[root@localhost ~]# fdisk -l /dev/sdb /dev/sdc | grep "LVM"
/dev/sdb1 1 9660 77593918+ 8e Linux LVM
/dev/sdc1 1 9660 77593918+ 8e Linux LVM

      ↑正确分区结果

 
  2. 创建卷组
    使用vgcreate命令创建卷组mail_store
    包括物理卷:/dec/sdb1、/dev/sdc1
[root@localhost ~]# vgcreate mail_store /dev/sdb1 /dev/sdc1
  Volume group "mail_store" successfully created

  

  3. 创建逻辑卷
    使用lvcreate命令创建逻辑卷 mail
    从卷组mail_store上划出60GB空间
    使用mkfs命令创建ext4文件系统
[root@localhost ~]# lvcreate  -L  60G  -n  mail  mail_store
/dev/cdrom: open failed: Read-only file system
Logical volume "mail" created
[root@localhost ~]# mkfs -t ext3 /dev/mail_store/mail
……

  

 
推荐步骤:
  PV→VG→LV→格式化,挂载使用文件系统
[root@localhost ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created
[root@localhost ~]# pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created
[root@localhost ~]# pvdisplay
"/dev/sdb" is a new physical volume of "100.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb
VG Name
PV Size 100.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID mBETMZ-d9Nh-AEr0-OyXO-h6N7-Dw2y-UqKAq4 "/dev/sdc" is a new physical volume of "200.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc
VG Name
PV Size 200.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID vvp3Kg-UcbH-imNJ-Mwjl-asAz-5FM1-q8hj98 [root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb lvm2 ---- 100.00g 100.00g
/dev/sdc lvm2 ---- 200.00g 200.00g
[root@localhost ~]# vgcreate mail_vg /dev/sdb
Volume group "mail_vg" successfully created
[root@localhost ~]# vgdisplay
--- Volume group ---
VG Name mail_vg
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 100.00 GiB
PE Size 4.00 MiB
Total PE 25599
Alloc PE / Size 0 / 0
Free PE / Size 25599 / 100.00 GiB
VG UUID 0HEnBL-7RV9-CkxU-dyD3-zAqB-ra0o-UkqxZF [root@localhost ~]# lvcreate -L 150G -n mail_lv mail_vg
Volume group "mail_vg" has insufficient free space (25599 extents): 38400 required.
[root@localhost ~]# lvcreate -L 50G -n mail_lv mail_vg
Logical volume "mail_lv" created.
[root@localhost ~]# lvdisplay
--- Logical volume ---
LV Path /dev/mail_vg/mail_lv
LV Name mail_lv
VG Name mail_vg
LV UUID wgNvn6-WEJh-FfZA-TZAS-lfrC-gWed-nxMRzw
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2019-01-06 17:42:56 +0800
LV Status available
# open 0
LV Size 50.00 GiB
Current LE 12800
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0 [root@localhost ~]# ll /dev/mail_vg/mail_lv
lrwxrwxrwx. 1 root root 7 Jan 6 17:42 /dev/mail_vg/mail_lv -> ../dm-0
[root@localhost ~]# ll /dev/dm*
brw-rw----. 1 root disk 253, 0 Jan 6 17:42 /dev/dm-0
[root@localhost ~]# ll /dev/mapper/
total 0
crw-rw----. 1 root root 10, 58 Jan 6 17:35 control
lrwxrwxrwx. 1 root root 7 Jan 6 17:42 mail_vg-mail_lv -> ../dm-0
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb mail_vg lvm2 a--u 100.00g 50.00g
/dev/sdc lvm2 ---- 200.00g 200.00g
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
mail_vg 1 1 0 wz--n- 100.00g 50.00g
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mail_lv mail_vg -wi-a----- 50.00g
[root@localhost ~]# mkfs.ext4 /dev/mapper/mail_vg-mail_lv
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
3276800 inodes, 13107200 blocks
655360 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
400 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424 Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 29 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@localhost ~]# mkdir /mail
[root@localhost ~]# mount /dev/mail_vg/mail_lv /mail/
[root@localhost ~]# mount
/dev/sda3 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/mapper/mail_vg-mail_lv on /mail type ext4 (rw)

  

  设置开机实现自动挂载:
  
[root@localhost ~]# blkid /dev/mapper/mail_vg-mail_lv
/dev/mapper/mail_vg-mail_lv: UUID="8ab67eeb-0b5a-43e3-b940-bef0f14bf1b1" TYPE="ext4"
[root@localhost ~]# vim /etc/fstab #
# /etc/fstab
# Created by anaconda on Fri Nov 2 22:37:22 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=c42ec363-df57-48b3-89a9-0685544602bd / ext4 defaults 1 1
UUID=27ab8d75-5b06-42e4-b0b4-0cb2376e9ea4 /boot ext4 defaults 1 2
UUID=b8bee5a5-ea40-476a-98c3-250707895638 swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
UUID=8ab67eeb-0b5a-43e3-b940-bef0f14bf1b1 /mail ext4 defaults 0 0
~

    设置完成保存退出

 

 
调整LV大小:
  调整逻辑卷大小命令
    lvextend -L +大小 /dev/卷组名/逻辑卷名
    lvresize -L +/-大小 /dev/卷组名/逻辑卷名
  如果要增大逻辑卷,先用增大逻辑卷,再用resize2fs增大文件系统
  可以在线增大逻辑卷
 
  如果要缩小逻辑卷,先用resizefs缩小文件系统再缩小逻辑卷
  必须先卸载文件系统
  步骤:
    1、查看文件系统已用空间
    2、卸载文件系统
    3、强制检查文件系统,确保文件系统处于一致性状态
    4、缩小文件系统 resize2fs
    5、缩小lv
    6、挂载文件系统
  注意:lv和文件系统的大小要一致
 
  调整VG大小:
  卷组扩容
    vgextend 卷组名 物理卷
  卷组收缩
  查看卷组包含的PV
  命令:pvs
    vgreduce 卷组名 物理卷

给LV扩容:
  增加的空间来自LV所在的VG的空闲空间
  Q1:如果某一块磁盘或者分区故障了如何将数据快速转移到相同卷组的其他空间去?
步骤:
  1、通过pvmove命令转移空间数据
  2、通过vgreduce命令将坏的磁盘或者分区从卷组里面移除。
  3、通过pvremove命令将坏的磁盘或者分区从系统中删除掉。

千万不要在没有关闭LVM的情况下删除分区
  正确关闭LVM的步骤
  umount卸载lvm文件系统
  清除/etc/fstab中LVM的挂载记录
  lvremove删除逻辑卷
  vgremove删除卷组
  pvremove删除物理卷
  fdisk修改分区ID
 

RAID概述:
  RAID廉价冗余磁盘阵列
  硬件RAID
    速度快,性能好,支持热插拔
    需专门的RAID磁盘阵列卡,价格昂贵,还需配合相应的驱动
  软件RAID
    使用mdadm软件仿真磁盘阵列功能
    无需专门硬件,性价比较好
    设备文件标识是/dev/md0
  根据可靠性、性能和成本对RAID划分了等级
    RAID0、RAID1、RAID5、RAID6、RAID10、RAID01