红帽7 LVM逻辑卷管理器

硬盘设备管理技术虽然能够有效地提高硬盘设备的读写速度以及数据的安全性,但是在硬盘分好区或者部署为RAID磁盘阵列之后,再想修改硬盘分区大小就不容易了。换句话说,当用户想要随着实际需求的变化调整硬盘分区的大小时,会受到硬盘“灵活性”的限制。这时就需要用到另外一项非常普及的硬盘设备资源管理技术了—LVM(逻辑卷管理器)。LVM可以允许用户对硬盘资源进行动态调整。

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

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

1、部署逻辑卷

一般而言,在生产环境中无法精确地评估每个硬盘分区在日后的使用情况,因此会导致原先分配的硬盘分区不够用。比如,伴随着业务量的增加,用于存放交易记录的数据库目录的体积也随之增加;因为分析并记录用户的行为从而导致日志目录的体积不断变大,这些都会导致原有的硬盘分区在使用上捉襟见肘。而且,还存在对较大的硬盘分区进行精简缩容的情况。

常用的LVM部署命令

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

在虚拟机中添加两块新硬盘设备,

第1步:让新添加的两块硬盘设备支持LVM技术。

[root@localhost Desktop]# pvcreate /dev/sdb /dev/sdc
  Physical volume "/dev/sdb" successfully created
  Physical volume "/dev/sdc" successfully created

第2步:把两块硬盘设备加入到storage卷组中,然后查看卷组的状态。

[root@localhost Desktop]# vgcreate storage /dev/sdb /dev/sdc
  Volume group "storage" successfully created
[root@localhost Desktop]# vgdisplay 
  --- Volume group ---
  VG Name               storage
  System ID             
  Format                lvm2
  Metadata Areas        2
  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                2
  Act PV                2
  VG Size               39.99 GiB
  PE Size               4.00 MiB
  Total PE              10238
  Alloc PE / Size       0 / 0   
  Free  PE / Size       10238 / 39.99 GiB
  VG UUID               cC79al-Ro2j-PfLZ-2rT3-lYYv-QHY4-ksk9Fg

第3步:切割出一个约为150MB的逻辑卷设备。

这里需要注意切割单位的问题。在对逻辑卷进行切割时有两种计量单位。第一种是以容量为单位,所使用的参数为-L。例如,使用 -L 150M 生成一个大小为150MB的逻辑卷。另外一种是以基本单元的个数为单位,所使用的参数为 -l 。每个基本单元的大小默认为4MB。例如,使用-l 37可以生成一个大小为 37×4MB=148MB 的逻辑卷。

[root@localhost Desktop]# lvcreate -n v0 -L 150M storage      // -n 表示切割出去的逻辑卷名称
  Rounding up size to full physical extent 152.00 MiB
  Logical volume "v0" created
[root@localhost Desktop]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/storage/v0
  LV Name                v0
  VG Name                storage
  LV UUID                QhK5xq-QHWx-JBPY-03h9-50a0-wpdW-BjOgnH
  LV Write Access        read/write
  LV Creation host, time localhost, 2018-09-17 15:15:10 +0800
  LV Status              available
  # open                 0
  LV Size                152.00 MiB
  Current LE             38
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:2

第4步:把生成好的逻辑卷进行格式化,然后挂载使用。

Linux系统会把LVM中的逻辑卷设备存放在/dev设备目录中,同时会以卷组的名称来建立一个目录,其中保存了逻辑卷的设备映射文件(即/dev/卷组名称/逻辑卷名称)。

[root@localhost Desktop]# mkfs.ext4 /dev/storage/v0 
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
38912 inodes, 155648 blocks
7782 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=33816576
19 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@localhost Desktop]# mkdir /lvm
[root@localhost Desktop]# mount /dev/storage/v0 /lvm/

第5步:查看挂载状态,并写入到配置文件,使其永久生效。

[root@localhost Desktop]# df -h
Filesystem              Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root    18G  2.9G   15G  17% /
devtmpfs                985M     0  985M   0% /dev
tmpfs                   994M  140K  994M   1% /dev/shm
tmpfs                   994M  8.8M  986M   1% /run
tmpfs                   994M     0  994M   0% /sys/fs/cgroup
/dev/sda1               497M  119M  379M  24% /boot
/dev/sr0                3.5G  3.5G     0 100% /run/media/root/RHEL-7.0 Server.x86_64
/dev/mapper/storage-v0  144M  1.6M  132M   2% /lvm
[root@localhost Desktop]# echo "/dev/storage/v0 /lvm ext4 defaults 0 0" >> /etc/fstab 

2、扩容逻辑卷

现在卷组是由两块硬盘设备共同组成的。用户在使用存储设备时感知不到设备底层的架构和布局,更不用关心底层是由多少块硬盘组成的,只要卷组中有足够的资源,就可以一直为逻辑卷扩容。扩展前请一定要记得卸载设备和挂载点的关联。

[root@localhost Desktop]# umount /lvm/

第1步:把逻辑卷v0扩展到300M

[root@localhost Desktop]# lvextend -L 300M /dev/storage/v0 
  Extending logical volume v0 to 300.00 MiB
  Logical volume v0 successfully resized

第2步:检查硬盘完整性,并重置硬盘容量。

[root@localhost Desktop]# e2fsck -f /dev/storage/v0      //扫描一下文件系统有没有被损坏,检查系统完整性
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/storage/v0: 11/38912 files (0.0% non-contiguous), 10567/155648 blocks
[root@localhost Desktop]# resize2fs /dev/storage/v0     //resize2fs(resize to filesystem)通知系统逻辑卷的容量发生了变化  
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/storage/v0 to 307200 (1k) blocks.
The filesystem on /dev/storage/v0 is now 307200 blocks long.

第3步:重新挂载硬盘设备并查看挂载状态。

[root@localhost Desktop]# mount -a
[root@localhost Desktop]# df -h
Filesystem              Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root    18G  2.9G   15G  17% /
devtmpfs                985M     0  985M   0% /dev
tmpfs                   994M  140K  994M   1% /dev/shm
tmpfs                   994M  8.8M  986M   1% /run
tmpfs                   994M     0  994M   0% /sys/fs/cgroup
/dev/sda1               497M  119M  379M  24% /boot
/dev/sr0                3.5G  3.5G     0 100% /run/media/root/RHEL-7.0 Server.x86_64
/dev/mapper/storage-v0  287M  2.1M  266M   1% /lvm

3、缩小逻辑卷

 较于扩容逻辑卷,在对逻辑卷进行缩容操作时,其丢失数据的风险更大。所以在生产环境中执行相应操作时,一定要提前备份好数据。另外Linux系统规定,在对LVM逻辑卷进行缩容操作之前,要先检查文件系统的完整性(当然这也是为了保证我们的数据安全)。在执行缩容操作前记得先把文件系统卸载掉。

[root@localhost Desktop]# umount /lvm/

第1步:检查文件系统的完整性。

[root@localhost Desktop]# e2fsck -f /dev/storage/v0 
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/storage/v0: 11/77824 files (0.0% non-contiguous), 15987/307200 blocks

第2步:把逻辑卷vo的容量减小到100MB。

[root@localhost Desktop]# resize2fs /dev/storage/v0 100M
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/storage/v0 to 102400 (1k) blocks.
The filesystem on /dev/storage/v0 is now 102400 blocks long.

[root@localhost Desktop]# lvreduce -L 100M /dev/storage/v0 
  WARNING: Reducing active logical volume to 100.00 MiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce v0? [y/n]: y
  Reducing logical volume v0 to 100.00 MiB
  Logical volume v0 successfully resized

第3步:重新挂载文件系统并查看系统状态。

[root@localhost Desktop]# mount -a
[root@localhost Desktop]# df -h
Filesystem              Size  Used Avail Use% Mounted on
/dev/mapper/rhel-root    18G  2.9G   15G  17% /
devtmpfs                985M     0  985M   0% /dev
tmpfs                   994M  140K  994M   1% /dev/shm
tmpfs                   994M  8.8M  986M   1% /run
tmpfs                   994M     0  994M   0% /sys/fs/cgroup
/dev/sda1               497M  119M  379M  24% /boot
/dev/sr0                3.5G  3.5G     0 100% /run/media/root/RHEL-7.0 Server.x86_64
/dev/mapper/storage-v0   93M  1.6M   85M   2% /lvm

4、逻辑卷快照

LVM还具备有“快照卷”功能,该功能类似于虚拟机软件的还原时间点功能。例如,可以对某一个逻辑卷设备做一次快照,如果日后发现数据被改错了,就可以利用之前做好的快照卷进行覆盖还原。

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

快照卷的容量必须等同于逻辑卷的容量;

快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除。

 首先查看卷组的信息。

[root@localhost Desktop]# vgdisplay 
  --- Volume group ---
  VG Name               storage
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               39.99 GiB
  PE Size               4.00 MiB
  Total PE              10238
  Alloc PE / Size       25 / 100.00 MiB
  Free  PE / Size       10213 / 39.89 GiB
  VG UUID               cC79al-Ro2j-PfLZ-2rT3-lYYv-QHY4-ksk9Fg

通过卷组的输出信息可以清晰看到,卷组中已经使用了100MB的容量,空闲容量还有39.89GB。接下来用重定向往逻辑卷设备所挂载的目录中写入一个文件。

[root@localhost Desktop]# echo "hello world" > /lvm/a.txt
[root@localhost Desktop]# ls -l /lvm/
total 14
-rw-r--r--. 1 root root    12 Sep 17 16:10 a.txt
drwx------. 2 root root 12288 Sep 17 15:21 lost+found

第1步:使用-s参数生成一个快照卷,使用-L参数指定切割的大小。另外,还需要在命令后面写上是针对哪个逻辑卷执行的快照操作。

[root@localhost Desktop]# lvcreate -L 100M -s -n SNAP /dev/storage/v0
  Logical volume "SNAP" created
[root@localhost Desktop]# lvdisplay 
--- Logical volume ---
  LV Path                /dev/storage/SNAP
  LV Name                SNAP
  VG Name                storage
  LV UUID                S8QjUE-u4uc-g656-Ctho-mvIz-Y0c8-VkblDv
  LV Write Access        read/write
  LV Creation host, time localhost, 2018-09-17 16:13:05 +0800
  LV snapshot status     active destination for v0
  LV Status              available
  # open                 0
  LV Size                100.00 MiB
  Current LE             25
  COW-table size         100.00 MiB
  COW-table LE           25
  Allocated to snapshot  0.01%
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3

第2步:在逻辑卷所挂载的目录中创建一个60MB的垃圾文件,然后再查看快照卷的状态。可以发现存储空间占的用量上升了。

[root@localhost Desktop]# dd if=/dev/zero of=/lvm/file count=1 bs=60M
1+0 records in
1+0 records out
62914560 bytes (63 MB) copied, 0.597705 s, 105 MB/s
[root@localhost Desktop]# lvdisplay 
--- Logical volume ---
  LV Path                /dev/storage/SNAP
  LV Name                SNAP
  VG Name                storage
  LV UUID                S8QjUE-u4uc-g656-Ctho-mvIz-Y0c8-VkblDv
  LV Write Access        read/write
  LV Creation host, time localhost, 2018-09-17 16:13:05 +0800
  LV snapshot status     active destination for v0
  LV Status              available
  # open                 0
  LV Size                100.00 MiB
  Current LE             25
  COW-table size         100.00 MiB
  COW-table LE           25
  Allocated to snapshot  45.29%
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3

第3步:为了校验SNAP快照卷的效果,需要对逻辑卷进行快照还原操作。在此之前记得先卸载掉逻辑卷设备与目录的挂载。

[root@localhost Desktop]# umount /lvm/
[root@localhost Desktop]# lvconvert --merge /dev/storage/SNAP 
  Merging of volume SNAP started.
  v0: Merged: 51.8%
  v0: Merged: 100.0%
  Merge of snapshot into logical volume v0 has finished.
  Logical volume "SNAP" successfully removed

第4步:快照卷会被自动删除掉,并且刚刚在逻辑卷设备被执行快照操作后再创建出来的60MB的垃圾文件也被清除了。

[root@localhost Desktop]# mount -a
[root@localhost Desktop]# ls -l /lvm/
total 14
-rw-r--r--. 1 root root    12 Sep 17 16:10 a.txt
drwx------. 2 root root 12288 Sep 17 15:21 lost+found

5、删除逻辑卷

 当生产环境中想要重新部署LVM或者不再需要使用LVM时,则需要执行LVM的删除操作。为此,需要提前备份好重要的数据信息,然后依次删除逻辑卷、卷组、物理卷设备,这个顺序不可颠倒。

第1步:取消逻辑卷与目录的挂载关联,删除配置文件中永久生效的设备参数。

[root@localhost Desktop]# umount /lvm/
[root@localhost Desktop]# vim /etc/fstab 
#
# /etc/fstab
# Created by anaconda on Wed Sep  5 21:24:14 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
#
/dev/mapper/rhel-root   /                       xfs     defaults        1 1
UUID=1e81605b-4fdf-46b6-a0e4-244ea1ac9e7d /boot                   xfs     defaults        1 2
/dev/mapper/rhel-swap   swap                    swap    defaults        0 0

第2步:删除逻辑卷设备,需要输入y来确认操作。

[root@localhost Desktop]# lvremove /dev/storage/v0 
Do you really want to remove active logical volume v0? [y/n]: y
  Logical volume "v0" successfully removed

第3步:删除卷组,此处只写卷组名称即可,不需要设备的绝对路径。

[root@localhost Desktop]# vgremove storage 
  Volume group "storage" successfully removed

第4步:删除物理卷设备。

[root@localhost Desktop]# pvremove /dev/sdb /dev/sdc
  Labels on physical volume "/dev/sdb" successfully wiped
  Labels on physical volume "/dev/sdc" successfully wiped

在上述操作执行完毕之后,再执行lvdisplay、vgdisplay、pvdisplay命令来查看LVM的信息时就不会再看到信息了

原文地址:https://www.cnblogs.com/zq8421/p/9663055.html