LVM详解

目录:

 一、概述

 二、LVM的相关概念

 三、概念图

 四、LVM基本操作

   1.创建PV

   2.查看PV信息

   3.创建VG

   4.查看VG信息

   5.创建LV

   6.查看LV信息

   7.挂载LV

   8.扩展卷组

   9.缩减卷组

   10.扩展逻辑卷

   11.缩减逻辑卷

   12.移除逻辑卷

   13.移除卷组

   14.移除物理卷

 五、LVM快照实现

 六、总结


一、概述

  LVM全称是Logical Volume Manager,即逻辑卷管理器。它是Linux环境下对磁盘分区进行管理的一种机制;它可以将多个物理分区整合在一起,并且可以根据实际需要动态调整文件系统空间。另外,它还可以提供快照,快照在刚创建的时候,其内容是和原卷一模一样的,只有数据在原卷中发生变化的时候,快照会将被改动数据的原数据保存起来。

二、LVM的相关概念

  1.物理卷(Physical Volume)

    物理卷是组成LVM的最底层的元素,即Linux上的物理分区。

  2.卷组(Volume Group)

    将各个独立的PV组合起来形成的一个存储空间就称为VG,VG的大小就是整个LVM的大小。

  3.逻辑卷(Logical Volume)

    可以被用户格式化、挂载并提供数据存储的对象就是LV。

  4.物理扩展块(Physical Extent)

    PE相当于Linux分区中的block,它是LVM的最小存储单位,默认为4M。

三、概念图

lvm01.jpg

四、LVM基本操作

 1.创建PV

  首先得先创建分区,并将分区的类型改为8e。在这里,我们可以按照以下方式分别创建/dev/sdb1、/dev/sdb2、/dev/sdc1、/dev/sdc2.

  创建PV使用以下命令格式:

    pvcreate device_name

    例如: pvcreate /dev/sdb1

[root@localhost ~]# fdisk /dev/sdb 
 
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-2610, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +5G
 
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
 
Command (m for help): p
 
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x05ff7b5d
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         654     5253223+  8e  Linux LVM
 
[root@localhost ~]# pvcreate /dev/sdb{1,2} /dev/sdc{1,2}
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created
  Physical volume "/dev/sdc1" successfully created
  Physical volume "/dev/sdc2" successfully created

 2.查看PV信息

  使用的命令:

  (1)pvs 简要查看PV信息

  (2)pvsdisplay 详细查看PV信息。

    A.pvsdisplay 直接使用该命令,查看所有PV的信息。

    B.pvsdisplay device_name 表示查看device_name这个PV的信息。

[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb1       lvm2 ---  5.01g 5.01g
  /dev/sdb2       lvm2 ---  5.01g 5.01g
  /dev/sdc1       lvm2 ---  5.01g 5.01g
  /dev/sdc2       lvm2 ---  5.01g 5.01g
 
[root@localhost ~]# pvdisplay /dev/sdb1
  "/dev/sdb1" is a new physical volume of "5.01 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               5.01 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               rZsvZG-nMf0-To7I-3k2X-fzEL-jkvk-eNFd6h

 3.创建VG

  在有了PV之后,接下来我们要创建VG,创建VG使用以下命令:

   vgcreate VG_NAME PV_NAME

   -s PE:指定PE的大小

[root@localhost ~]# vgcreate testvg /dev/sd{b,c}1
  Volume group "testvg" successfully created

 4.查看VG信息

  查看VG使用以下命令:

   (1)vgs:简要查看VG信息。

   (2)vgdisplay:详细查看VG信息。

     A.vgdisplay: 直接使用该命令,查看所有VG的信息。

     B.vgdisplay VG_NAME: 表示查看这个VG的信息。

[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree 
  testvg   2   0   0 wz--n- 10.02g 10.02g
[root@localhost ~]# vgdisplay testvg
  --- Volume group ---
  VG Name               testvg
  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               10.02 GiB
  PE Size               4.00 MiB
  Total PE              2564
  Alloc PE / Size       0 / 0   
  Free  PE / Size       2564 / 10.02 GiB
  VG UUID               zmjsxc-4KPf-LEcC-96zL-BBDY-N0Cs-buSQ6n

 5.创建LV

  使用的命令:

   lvcreate -L SIZE -n LV_NAME VG_NAME

    -L 指定逻辑卷的大小

    -n 指定逻辑卷的名称

    -l PE的个数

[root@localhost ~]# lvcreate -L 5G -n mylv testvg
  Logical volume "mylv" created

 6.查看LV信息

  查看LV使用以下命令:

   (1)lvs: 简要查看LV信息

   (2)lvdisplay 逻辑卷的设备文件名称: 详细查看LV信息

     逻辑卷的设备文件名称路径:/dev/VG_NAME/LV_NAME 或者 /dev/mapper/VG_NAME-LV_NAME

[root@localhost ~]# lvs
  LV   VG     Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv testvg -wi-a----- 5.00g  
[root@localhost ~]# ll /dev/testvg/mylv 
lrwxrwxrwx 1 root root 7 Jul 24 01:19 /dev/testvg/mylv -> ../dm-0
 
[root@localhost ~]# ll /dev/mapper/testvg-mylv 
lrwxrwxrwx 1 root root 7 Jul 24 01:19 /dev/mapper/testvg-mylv -> ../dm-0
 
[root@localhost ~]# lvdisplay /dev/testvg/mylv 
  --- Logical volume ---
  LV Path                /dev/testvg/mylv
  LV Name                mylv
  VG Name                testvg
  LV UUID                cgrPIG-Zavs-GH9Z-55sR-MtSt-SFzg-SVETpG
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2015-07-24 01:19:20 +0800
  LV Status              available
  # open                 0
  LV Size                5.00 GiB
  Current LE             1280
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

 7.挂载LV

  在挂载LV之前,我们要对LV进行格式化后再挂载,然后存放文件看是否正常。

# 格式化LV
[root@localhost ~]# mke2fs -t ext4 /dev/testvg/mylv 
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
327680 inodes, 1310720 blocks
65536 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1342177280
40 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
 
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.
# 挂载LV
[root@localhost ~]# mount /dev/testvg/mylv /mnt
# 查看挂载的分区信息
[root@localhost ~]# df -lh
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              20G  1.1G   17G   6% /
tmpfs                 242M     0  242M   0% /dev/shm
/dev/sda1             194M   26M  159M  14% /boot
/dev/mapper/testvg-mylv
                      5.0G  138M  4.6G   3% /mnt
# 测试存放文件
[root@localhost ~]# cp /etc/inittab /mnt/
[root@localhost mnt]# tail -4 /mnt/inittab 
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
# 
id:3:initdefault:

 8.扩展卷组

  步骤:

   (1)准备好一个PV

   (2)使用vgextend命令完成扩展,命令格式:vgextend VG_NAME /PATH/TO/PV

#查看使用和未使用的PV,其中/dev/sdb2和/dev/sdc2都还未使用
[root@localhost ~]# pvs
  PV         VG     Fmt  Attr PSize PFree
  /dev/sdb1  testvg lvm2 a--  5.01g 8.00m
  /dev/sdb2         lvm2 ---  5.01g 5.01g
  /dev/sdc1  testvg lvm2 a--  5.01g 5.01g
  /dev/sdc2         lvm2 ---  5.01g 5.01g
#未扩展前的VG大小
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree
  testvg   2   1   0 wz--n- 10.02g 5.02g
#扩展VG
[root@localhost ~]# vgextend testvg /dev/sdb2
  Volume group "testvg" successfully extended
#扩展后的VG大小
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree 
  testvg   3   1   0 wz--n- 15.02g 10.02g

 9.缩减卷组

  步骤:

   (1)确定要移除的PV

   (2)将此PV上的数据转移至其他的PV

     命令:pvmove PV_NAME

   (3)从卷组中将此PV移除

     命令:vgreduce /PATH/TO/PV

# 查看已经使用在卷组中的PV
[root@localhost ~]# pvs
  PV         VG     Fmt  Attr PSize PFree
  /dev/sdb1  testvg lvm2 a--  5.01g 8.00m
  /dev/sdb2  testvg lvm2 a--  5.01g 5.01g
  /dev/sdc1  testvg lvm2 a--  5.01g 5.01g
  /dev/sdc2         lvm2 ---  5.01g 5.01g
# 现在确定要移除/dev/sdb1,在移除前需要将数据转移到其他PV
[root@localhost ~]# pvmove /dev/sdb1 
  /dev/sdb1: Moved: 0.0%
  /dev/sdb1: Moved: 100.0%
# 将PV从卷组中移除
[root@localhost ~]# vgreduce testvg /dev/sdb1 
  Removed "/dev/sdb1" from volume group "testvg"
# 查看移除后的VG大小
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree
  testvg   2   1   0 wz--n- 10.02g 5.02g

 10.扩展逻辑卷

  步骤:

  (1)先确定扩展的LV大小,并确保对应卷组有足够的空间

  (2)扩展物理边界

    使用lvextend命令:lvextend -L [+]SIZE /PATH/TO/LV

    参数说明:

     -L [+]SIZE: 指定扩展的容量;如果带+号,表示扩展的容量是在原来的基础上加上SIZE的容量;如果不带,表示扩展容量到SIZE,单位为"kKmMgGtT"

     -l [+]SIZE: 指定扩展的容量;如果带+号,表示扩展的容量是在原来的基础上加上SIZE个PE的容量;不带+号,表示扩展到SIZE个PE的容量

      SIZE: 表示数字

  (3)扩展逻辑边界

    使用resize2fs /PATH/TO/DEVICE

# 确定VG的容量
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree
  testvg   2   1   0 wz--n- 10.02g 5.02g
# 未扩展前的LV容量
[root@localhost ~]# lvs
  LV   VG     Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv testvg -wi-ao---- 5.00g
# 扩展LV到8G,即物理边界
[root@localhost ~]# lvextend -L +3G /dev/testvg/mylv 
  Size of logical volume testvg/mylv changed from 5.00 GiB (1280 extents) to 8.00 GiB (2048 extents).
  Logical volume mylv successfully resized 
# 查看挂载的LV大小,发觉还是5G,因为还没扩展逻辑边界
[root@localhost ~]# df -lh
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              20G  1.1G   17G   6% /
tmpfs                 242M     0  242M   0% /dev/shm
/dev/sda1             194M   26M  159M  14% /boot
/dev/mapper/testvg-mylv
                      5.0G  139M  4.6G   3% /mnt
# 扩展逻辑边界
[root@localhost ~]# resize2fs /dev/testvg/mylv 
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/testvg/mylv is mounted on /mnt; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/testvg/mylv to 2097152 (4k) blocks.
The filesystem on /dev/testvg/mylv is now 2097152 blocks long.
# 查看分区大小,文件系统大小也扩展了
[root@localhost ~]# df -lh
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              20G  1.1G   17G   6% /
tmpfs                 242M     0  242M   0% /dev/shm
/dev/sda1             194M   26M  159M  14% /boot
/dev/mapper/testvg-mylv
                      7.9G  140M  7.4G   2% /mnt

 11.缩减逻辑卷

  步骤:

  (1)确定缩减后的大小,至少确保缩减后能容纳原来的所有数据

  (2)执行缩减:

    A.因为缩减有风险,所以必须卸载并检测文件系统,使用e2fsck -f命令

    B.缩减逻辑边界,使用resize2fs命令

     resize2fs /path/to/device SIZE

    C.缩减物理边界,使用lvreduce命令

     lvreduce -L [-]SIZE /path/to/lv

# 卸载并强行检测
[root@localhost ~]# umount /mnt/
[root@localhost ~]# e2fsck -f /dev/testvg/mylv 
e2fsck 1.41.12 (17-May-2010)
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/testvg/mylv: 12/524288 files (0.0% non-contiguous), 68623/2097152 blocks
# 缩减LV至3G,即逻辑边界
[root@localhost ~]# resize2fs /dev/testvg/mylv 3G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/testvg/mylv to 786432 (4k) blocks.
The filesystem on /dev/testvg/mylv is now 786432 blocks long.
# 缩减物理边界
[root@localhost ~]# lvreduce -L 3G /dev/testvg/mylv 
  WARNING: Reducing active logical volume to 3.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv? [y/n]: y
  Size of logical volume testvg/mylv changed from 8.00 GiB (2048 extents) to 3.00 GiB (768 extents).
  Logical volume mylv successfully resized
# 为确保安全,再次检测
[root@localhost ~]# e2fsck -f /dev/testvg/mylv   
e2fsck 1.41.12 (17-May-2010)
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/testvg/mylv: 12/196608 files (0.0% non-contiguous), 47100/786432 blocks
# 挂载,查看分区大小并查看分区里面的文件是否正常
[root@localhost ~]# mount /dev/testvg/mylv /mnt/
[root@localhost ~]# df -lh
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              20G  1.1G   17G   6% /
tmpfs                 242M     0  242M   0% /dev/shm
/dev/sda1             194M   26M  159M  14% /boot
/dev/mapper/testvg-mylv
                      3.0G  136M  2.7G   5% /mnt
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# tail -4 /mnt/inittab 
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
# 
id:3:initdefault:

 12.移除逻辑卷

  移除逻辑卷之前,确保已经没有被挂载。此时使用lvremove /path/to/lv命令即可

# 查看逻辑卷
[root@localhost ~]# lvs
  LV        VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  hello_lv  testvg -wi-a-----  1.00g                                                    
  mylv      testvg owi-aos---  3.00g 
# 移除hello_lv
[root@localhost ~]# lvremove /dev/testvg/hello_lv 
Do you really want to remove active logical volume hello_lv? [y/n]: y
  Logical volume "hello_lv" successfully removed
# 再次查看逻辑卷信息
[root@localhost ~]# lvs
  LV        VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv      testvg owi-aos---  3.00g

 13.移除卷组

  使用vgremove VG_NAME

# 查看卷组信息
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree 
  testvg   2   0   0 wz--n- 10.02g 10.02g
# 移除testvg
[root@localhost ~]# vgremove testvg
  Volume group "testvg" successfully removed

 14.移除物理卷

  使用pvremove PV_NAME命令

# 查看物理卷
[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb2       lvm2 ---  5.01g 5.01g
  /dev/sdc1       lvm2 ---  5.01g 5.01g
  /dev/sdc2       lvm2 ---  5.01g 5.01g
# 移除物理卷
[root@localhost ~]# pvremove /dev/sdb2
  Labels on physical volume "/dev/sdb2" successfully wiped
[root@localhost ~]# pvremove /dev/sdc1
  Labels on physical volume "/dev/sdc1" successfully wiped
[root@localhost ~]# pvremove /dev/sdc2
  Labels on physical volume "/dev/sdc2" successfully wiped

五、LVM快照实现

 创建出来的快照卷是已经记录了原卷某个时刻所有文件的状态,在原卷没有做出修改之前,快照卷只是作为访问原卷的一个入口;一旦原卷中的文件发生改变的时候,系统会将原卷的文件复制一份到快照卷,这时的快照卷就不能作为访问原卷的入口了,快照卷里面只有原卷没有发生改变之前复制过来的文件。这时,我们就可以对快照卷里面的文件进行打包备份。

 创建快照使用lvcreate命令,使用以下参数

  -L SIZE: 指定快照卷的大小

  -s: 表示创建快照卷

  -p r: 限制快照卷为只读访问

  -n LV_NAME: 指定快照卷的名称

  示例:lvcreate -L SIZE -s -p r -n LV_NAME /path/to/lv

# 创建快照卷
[root@localhost mnt]# lvcreate -L 50M -s -p r -n mylv-snap /dev/testvg/mylv 
  Rounding up size to full physical extent 52.00 MiB
  Logical volume "mylv-snap" created
[root@localhost mnt]# lvs
  LV        VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv      testvg owi-aos---  3.00g                                                    
  mylv-snap testvg sri-a-s--- 52.00m      mylv   0.02 
# 挂载快照卷
[root@localhost ~]# mount -o ro /dev/testvg/mylv-snap /media/
# 查看快照卷,此时的快照卷只是作为原卷的入口,所以内容和快照卷的是一样的
[root@localhost mnt]# cd /media/
[root@localhost media]# ls
inittab  lost+found
# 修改原卷的内容
[root@localhost mnt]# cp /etc/fstab /mnt/
[root@localhost mnt]# echo "Hello World" >> /mnt/inittab 
# 查看快照卷及里面的内容,发现没有新增的文件fstab,而且inittab的文件内容是和创建快照时一样
[root@localhost ~]# cd /media/
[root@localhost media]# ls
inittab  lost+found
[root@localhost media]# tail -3 inittab 
#   6 - reboot (Do NOT set initdefault to this)
# 
id:3:initdefault:
# 打包备份
[root@localhost media]# tar zcf /tmp/backup.tar.gz /media/inittab 
tar: Removing leading `/' from member names
[root@localhost media]# ls /tmp/backup.tar.gz 
/tmp/backup.tar.gz
# 卸载快照卷
[root@localhost ~]# umount /media/

六、总结

 创建LV的过程:

  创建PV –> 创建VG –> 创建LV –> 格式化 –> 挂载

 扩展卷组的过程:

  准备PV –> 完成扩展

 缩减卷组的过程:

  确定移除的PV –> 转移移除PV的数据到别的PV –> 从卷组中移除PV

 扩展逻辑卷的过程:

  确定扩展大小 –> 扩展物理边界 –> 扩展逻辑边界

 缩减逻辑卷的过程:

  确定缩减大小 –> 卸载逻辑卷 –> 缩减逻辑边界 –> 缩减物理边界

原创文章,作者:ucweb_qiuwc,如若转载,请注明出处:http://www.178linux.com/8227

(0)
ucweb_qiuwcucweb_qiuwc
上一篇 2015-09-22
下一篇 2015-09-22

相关推荐

  • 关于大型网站技术演进的思考(十一)–网站静态化处理—动静分离策略(3)

    原文出处: 夏天的森林   前文里我讲到了网站静态化的关键点是动静分离,动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。由此可见,网站静态化处理的核心就是动静分离和缓存两大方面,上篇我简单讲述了动静…

    Linux干货 2015-03-11
  • FHS-文件系统层级结构标准

    文件系统层级结构标准(FHS:Filesystem Hierarchy Standard) 文件系统层次结构标准(英语:Filesystem Hierarchy Standard,FHS)定义了Linux操作系统中的主要目录及目录内容。当前的版本是2.3,在2004年1月29日公布。多数Linux发行版遵从FHS标准并且声明其自身政策以维护FHS的要求。然而…

    Linux干货 2016-10-16
  • AWK学习总结

    AWK是一种优良的文本处理工具。其名称得自于它的创始人阿尔佛雷德·艾侯、彼得·温伯格和布莱恩·柯林汉姓氏的首个字母。AWK提供了极其强大的功能:可以进行正则表达式的匹配,样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。 AWK学习总结 函数rand(): 函数length() 函数int()…

    Linux干货 2016-12-03
  • RAID+LVM详解

                                        一.RAID篇 一.什么是RAID   磁盘阵列全名是『Redundant Arrays…

    Linux干货 2016-09-07
  • GRUB

    什么是GRUB GRUB(boot loader):grub:GRand Unified Bootloader     有两个版本:grub 0.x:grub legacy经典版;grub 2.x grub legacy:主要运行分三个阶段 stage1(第一阶段):安装在mbr中 stage1.5(第1.5阶段):存…

    Linux干货 2016-09-21
  • Week6 Vim编辑器使用指南及练习

    vim编辑器 vim模式: 模式转换.png 编辑–>输入: i: 在当前光标所在字符的前面,转为输入模式; a: 在当前光标所在字符的后面,转为输入模式; o: 在当前光标所在行的下方,新建一行,并转为输入模式; I:在当前光标所在行的行首,转换为输入模式 A:在当前光标所在行的行尾,转换为输入模式 O:在当前光标所在行的上方,新建一行,…

    Linux干货 2017-02-17