linux中的lvm逻辑卷管理

LVM可以使硬盘无限扩容:
PV(physical volume):物理卷在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区。
VG(volume group):卷组建立在物理卷上,一卷组中至少要包括一物理卷,卷组建立后可动态的添加卷到卷组中,一个逻辑卷管理系统工程中可有多个卷组。
LV(logical volume):逻辑卷建立在卷组基础上,卷组中未分配空间可用于建立新的逻辑卷,逻辑卷建立后可以动态扩展和缩小空间。
PE(physical extent):物理区域是物理卷中可用于分配的最小存储单元,物理区域大小在建立卷组时指定,一旦确定不能更改,同一卷组所有物理卷的物理区域大小需一致,新的pv加入到vg后,pe的大小自动更改为vg中定义的pe大小。
LE(logical extent):逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。
卷组描述区域:卷组描述区域存在于每个物理卷中,用于描述物理卷本身、物理卷所属卷组、卷组中逻辑卷、逻辑卷中物理区域的分配等所有信息,它是在使用pvcreate建立物理卷时建立的。
LVM原理图:
这里写图片描述
还原当前的环境:

[root@localhost ~]# umount /mnt/   解除挂载
[root@localhost ~]# vim /etc/fstab 删除开机自动挂载
[root@localhost ~]# cat /etc/fstab 查看文件内容已经被删除
[root@localhost ~]# fdisk /dev/vdb  删除分区
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): d  删除分区
Selected partition 1
Partition 1 is deleted

Command (m for help): wq
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]# partprobe   同步
[root@localhost ~]# fdisk -l    查看硬件信息

Disk /dev/vda: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00013f3e

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048    20970332    10484142+  83  Linux

Disk /dev/vdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x54f9eab8

   Device Boot      Start         End      Blocks   Id  System

内容简单,演示一下过程图:
解除挂载删除分区:
这里写图片描述
查看硬件信息:
这里写图片描述
LVM逻辑卷的管理:
打开两个shell,同时连接server虚拟机将其中一台A进行监控,在另外一台B查看命令效果
A:

[root@localhost ~]# watch -n 1 'pvs;vgs;lvs;df -h /mnt'

B:

[root@localhost ~]# fdisk /dev/vdb   建立三个1G分区并更改类型为8e

Command (m for help): t
Partition number (1-3, default 3): 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'

Command (m for help): wq
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]# partprobe   同步
[root@localhost ~]# pvcreate /dev/vdb1
  Can't open /dev/vdb1 exclusively.  Mounted filesystem?报错意思vdb1已经被挂载
[root@localhost ~]# df   查看时候已经被挂载
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/vda1       10473900 3804408   6669492  37% /
devtmpfs          469344       0    469344   0% /dev
tmpfs             484932      80    484852   1% /dev/shm
tmpfs             484932   12784    472148   3% /run
tmpfs             484932       0    484932   0% /sys/fs/cgroup
/dev/vdb1        1038336   53416    984920   6% /mnt
[root@localhost ~]# umount /mnt/  解除挂载
[root@localhost ~]# pvcreate /dev/vdb1 将分区做成物理卷
WARNING: xfs signature detected on /dev/vdb1 at offset 0. Wipe it? [y/n] y
  Wiping xfs signature on /dev/vdb1. 
  Physical volume "/dev/vdb1" successfully created
[root@localhost ~]# vgcreate vg0 /dev/vdb1  创建卷组
  Volume group "vg0" successfully created
[root@localhost ~]# lvcreate -L 300M -n lv0 vg0  创建逻辑卷并指定逻辑卷的大小为300M
  Logical volume "lv0" created
[root@localhost ~]# mkfs.xfs /dev/vg0/lv0  将逻辑卷格式化
meta-data=/dev/vg0/lv0           isize=256    agcount=4, agsize=19200 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0
data     =                       bsize=4096   blocks=76800, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=853, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@localhost ~]# mount /dev/vg0/lv0 /mnt/  linux下的文件系统需要挂载才可以使用,将逻辑卷挂载
[root@localhost ~]# df
Filesystem          1K-blocks    Used Available Use% Mounted on
/dev/vda1            10473900 3804420   6669480  37% /
devtmpfs               469344       0    469344   0% /dev
tmpfs                  484932      80    484852   1% /dev/shm
tmpfs                  484932   12788    472144   3% /run
tmpfs                  484932       0    484932   0% /sys/fs/cgroup
/dev/mapper/vg0-lv0    303788   15520    288268   6% /mnt
[root@localhost ~]# ll /dev/vg0/lv0   两个文件内容一样
lrwxrwxrwx. 1 root root 7 May  4 22:54 /dev/vg0/lv0 -> ../dm-0
[root@localhost ~]# ll /dev/mapper/vg0-lv0  lv
ls: cannot access lv: No such file or directory
lrwxrwxrwx. 1 root root 7 May  4 22:54 /dev/mapper/vg0-lv0 -> ../dm-0

B虚拟机中操作,A虚拟机中操作:
建立分区同步建立物理卷:
这里写图片描述
建立物理卷失败是由于没有解除挂载:
这里写图片描述
格式化进行挂载
这里写图片描述
我们可以看一下A虚拟机监控的最终情况:
如下图所示已经建立了物理卷,物理卷组,逻辑卷。
这里写图片描述
LVM逻辑卷的扩容:

[root@localhost ~]# df  查看挂载
Filesystem          1K-blocks    Used Available Use% Mounted on
/dev/vda1            10473900 3804380   6669520  37% /
devtmpfs               469344       0    469344   0% /dev
tmpfs                  484932      80    484852   1% /dev/shm
tmpfs                  484932   12816    472116   3% /run
tmpfs                  484932       0    484932   0% /sys/fs/cgroup
/dev/mapper/vg0-lv0    303788   15520    288268   6% /mnt
[root@localhost ~]# lvextend -L 500M /dev/vg0/lv0 扩展,但是文件系统不会更改
  Extending logical volume lv0 to 500.00 MiB
  Logical volume lv0 successfully resized
[root@localhost ~]# xfs_growfs /dev/vg0/lv0 将文件系统扩展
meta-data=/dev/mapper/vg0-lv0    isize=256    agcount=4, agsize=19200 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0
data     =                       bsize=4096   blocks=76800, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal               bsize=4096   blocks=853, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 76800 to 128000
[root@localhost ~]# pvcreate /dev/vdb2 将分区做成物理卷
  Physical volume "/dev/vdb2" successfully created
[root@localhost ~]# vgextend vg0 /dev/vdb2  创建卷组
  Volume group "vg0" successfully extended
[root@localhost ~]# lvextend -L 1500M /dev/vg0/lv0 因为1.5G不够我们扩容,所以要另外增加vdb2,扩容。
  Extending logical volume lv0 to 1.46 GiB
  Logical volume lv0 successfully resized
[root@localhost ~]# xfs_growfs /dev/vg0/lv0  从监控来看文件系统依旧没有扩展所以需要这个命令扩展文件系统
meta-data=/dev/mapper/vg0-lv0    isize=256    agcount=7, agsize=19200 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0
data     =                       bsize=4096   blocks=128000, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal               bsize=4096   blocks=853, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 128000 to 384000

B虚拟机,对逻辑卷和文件系统进行扩容:
这里写图片描述
不够扩容了,所以需要建立物理卷2来进行扩容。
这里写图片描述
A虚拟机的监控来看效果已经扩容成功:
这里写图片描述
xfs文件系统不支持缩容操作。
LVM逻辑卷的扩容(逻辑卷格式为ext4)

[root@localhost ~]# umount /mnt/  解除挂载
[root@localhost ~]# mkfs.ext4 /dev/vg0/lv0 将逻辑卷格式化成ext4格式
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
96000 inodes, 384000 blocks
19200 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=394264576
12 block groups
32768 blocks per group, 32768 fragments per group
8000 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912

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

[root@localhost ~]# mount /dev/vg0/lv0 /mnt 将逻辑卷挂载到/mnt下
[root@localhost ~]# ls /mnt   查看/mnt
lost+found
[root@localhost ~]# lvextend -L 1800M /dev/vg0/lv0  扩展逻辑卷
  Extending logical volume lv0 to 1.76 GiB
  Logical volume lv0 successfully resized
[root@localhost ~]# resize2fs /dev/vg0/lv0  更新逻辑卷信息
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg0/lv0 is mounted on /mnt; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/vg0/lv0 is now 460800 blocks long.

B虚拟机进行扩容操作,A虚拟机查看效果:
1,格式化成ext4格式
这里写图片描述
2,将文件系统和逻辑卷均进行扩容:
这里写图片描述
A虚拟机查看效果,已经成功扩容:;
这里写图片描述
LVM缩容操作:(很少使用,xfs文件系统不支持,ext文件系统支持)

[root@localhost ~]# umount /mnt/  卸载
[root@localhost ~]# e2fsck -f /dev/vg0/lv0  检查是否有错误
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/vg0/lv0: 11/120000 files (9.1% non-contiguous), 16862/460800 blocks
[root@localhost ~]# resize2fs /dev/vg0/lv0 1000M  赋予新的容量
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg0/lv0 to 256000 (4k) blocks.
The filesystem on /dev/vg0/lv0 is now 256000 blocks long.

[root@localhost ~]# mount /dev/vg0/lv0 /mnt  挂载
[root@localhost ~]# lvreduce -L 1000M /dev/vg0/lv0  更新逻辑卷信息
  WARNING: Reducing active and open logical volume to 1000.00 MiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv0? [y/n]: y
  Reducing logical volume lv0 to 1000.00 MiB
  Logical volume lv0 successfully resized

在B虚拟机操作,A虚拟机进行监控:
B进行缩容:
这里写图片描述
A进行查看已经缩容成功:
这里写图片描述
如何缩减VG:

[root@localhost ~]# pvmove /dev/vdb1 /dev/vdb2 将vdb1移到闲置的vdb2中
  /dev/vdb1: Moved: 4.8%
  /dev/vdb1: Moved: 78.8%
  /dev/vdb1: Moved: 100.0%
[root@localhost ~]# vgreduce vg0 /dev/vdb1  从vg中移除vdb1
  Removed "/dev/vdb1" from volume group "vg0"
[root@localhost ~]# pvremove /dev/vdb1   删除/vdb1
 Labels on physical volume "/dev/vdb1" successfully wiped
pvremove  [选项] [参数]
pvremove指令用于删除一个存在的物理卷
主要参数:
-d  调试模式
-f  强制删除
-y  对提问回答“yes”
[root@localhost ~]# pvs    查看设备容量
  PV         VG   Fmt  Attr PSize    PFree 
  /dev/vdb2  vg0  lvm2 a--  1020.00m 20.00m
[root@localhost ~]# df -H   查看设备信息
Filesystem           Size  Used Avail Use% Mounted on
/dev/vda1             11G  3.9G  6.9G  37% /
devtmpfs             481M     0  481M   0% /dev
tmpfs                497M   82k  497M   1% /dev/shm
tmpfs                497M   14M  484M   3% /run
tmpfs                497M     0  497M   0% /sys/fs/cgroup
/dev/mapper/vg0-lv0  999M  3.9M  933M   1% /mnt

A虚拟机中监控到将/vdb1移到/vdb2中时:
这里写图片描述
B虚拟机中进行vg的缩减:
这里写图片描述
A虚拟机查看最后的vg缩减查看:
这里写图片描述
LVM的快照指令:

[root@localhost ~]# df   查看挂载
Filesystem          1K-blocks    Used Available Use% Mounted on
/dev/vda1            10473900 3808456   6665444  37% /
devtmpfs               469344       0    469344   0% /dev
tmpfs                  484932      80    484852   1% /dev/shm
tmpfs                  484932   12788    472144   3% /run
tmpfs                  484932       0    484932   0% /sys/fs/cgroup
/dev/mapper/vg0-lv0    975128    3764    910288   1% /mnt
[root@localhost ~]# cd /mnt
[root@localhost mnt]# ls
lost+found
[root@localhost mnt]# touch westos{1..10} 建立文件
[root@localhost mnt]# ls
lost+found  westos10  westos3  westos5  westos7  westos9
westos1     westos2   westos4  westos6  westos8
[root@localhost mnt]# rm -fr *
[root@localhost mnt]# ls
[root@localhost mnt]# touch westos{1..7}
[root@localhost mnt]# cd
[root@localhost ~]# umount /mnt/  解除挂载
[root@localhost ~]# ls /mnt/
[root@localhost ~]# lvcreate -L 50M -n lv0backup -s /dev/vg0/lv0 拍照,-s代表拍照到指定路径,-n后面接照片名字,报错是因为大小不够
  Rounding up size to full physical extent 52.00 MiB
  Volume group "vg0" has insufficient free space (5 extents): 13 required.
[root@localhost ~]# pvcreate /dev/vdb1  将分区做成物理卷
  Physical volume "/dev/vdb1" successfully created
[root@localhost ~]# vgextend vg0 /dev/vdb1  创建卷组
  Volume group "vg0" successfully extended
[root@localhost ~]# lvcreate -L 50M -n lv0backup -s /dev/vg0/lv0拍照
  Rounding up size to full physical extent 52.00 MiB
  Logical volume "lv0backup" created
[root@localhost ~]# mount /dev/vg0/lv0backup /mnt/  挂载
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# ls
westos1  westos2  westos3  westos4  westos5  westos6  westos7
[root@localhost mnt]# rm -fr *
[root@localhost mnt]# ls
[root@localhost mnt]# cd
[root@localhost ~]# lvremove /dev/vg0/lv0backup   删除照片报错是因为没有解除挂载
  Logical volume vg0/lv0backup contains a filesystem in use.
[root@localhost ~]# umount /mnt/  解除挂载
[root@localhost ~]# lvremove /dev/vg0/lv0backup 删除照片成功
Do you really want to remove active logical volume lv0backup? [y/n]: y
  Logical volume "lv0backup" successfully removed
[root@localhost ~]# lvcreate -L 50M -n lv0backup -s /dev/vg0/lv0拍照
  Rounding up size to full physical extent 52.00 MiB
  Logical volume "lv0backup" created
[root@localhost ~]# mount /dev/vg0/lv0backup /mnt/ 挂载
[root@localhost ~]# ls /mnt/  查看文件文件还在证明我们仅仅删除了快照本来文件不受影响
westos1  westos2  westos3  westos4  westos5  westos6  westos7

虚拟机的快照t同样可以借助监控,然后可以更好的进行快照命令的效果查看:
可以看到只剩下20M的可用空间:
这里写图片描述
首先在/mnt中建立七个文件为了让我们懂得快照的真实含义,读取的时候是读取本来的,写入时操作的是照片。
这里写图片描述
将/vdb1做成物理卷解决磁盘空间不够的问题,进行快照指令然后挂载查看就可以看到我们建立的七个文件。
这里写图片描述
A虚拟机监控看到的将/vdb1做成物理卷之后就解决了磁盘空间不够的问题,也就可以弄成快照。
这里写图片描述
删除照片重新做快照进行查看文件还在,就是证明有了快照本来文件不会受到影响。
这里写图片描述
彻底删除LVM,还原原来的分区:

[root@localhost ~]# umount /mnt/   卸载
[root@localhost ~]# lvremove /dev/vg0/lv0backup   删除快照
Do you really want to remove active logical volume lv0backup? [y/n]: y
  Logical volume "lv0backup" successfully removed
[root@localhost ~]# lvremove /dev/vg0/lv0   删除逻辑卷
Do you really want to remove active logical volume lv0? [y/n]: y
  Logical volume "lv0" successfully removed
[root@localhost ~]# vgremove vg0     删除卷组
  Volume group "vg0" successfully removed
[root@localhost ~]# pvremove /dev/vdb{1..2}   删除物理卷
  Labels on physical volume "/dev/vdb1" successfully wiped
  Labels on physical volume "/dev/vdb2" successfully wiped

在B虚拟机操作:
分别卸载设备,删除快照,物理卷,物理卷组,逻辑卷,还原原本状态。
这里写图片描述
A虚拟机监控情况,发现已经还原到原来:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/aaaaaab_/article/details/80209327
今日推荐