一、在redhat系列Linux中逻辑卷的相关介绍

    LVM(Logical Volume Manager),是逻辑卷管理器,是一个软件,可以实现磁盘的高效管理,如磁盘扩展和缩减等。

它包括物理卷(Phycial Volume),简称pv、卷组(Volume Group),简称vg、逻辑卷(Logical Volume),简称lv。一

个vg至少包括一个物理卷,它相当于一个扩展的分区,可以扩展和缩减。卷组vg的大小是由物理卷决定的,它的扩展

不会影响到卷组中的数据的,但是缩减卷组就要慎重了,不然会破坏物理卷中的数据。可以为逻辑卷创建快照,来实

现对数据的备份。

  1. 创建物理卷支持的命令:

pvcreate               创建pv命令
pvremove               移除一个pv命令,注意,如果原来有数据存在,移除pv会丢失数据
pvmove                 移动pv中数据命令,可以将pv中的数据移到另一个地方存放
pvscan                 扫描pv
pvdisplay              查看系统上所有的pv的详细信息,也可以指定pv名字进行单个查看如:pvdisplay /dev/sda1
pvs                    查看系统上pv的简要信息

2.创建卷组支持的命令:

vgcreate               创建vg命名
vgdisplay              查看系统上所以vg的详细信息,也可以指定vg的名称进行单个查询如:vgdisplay  myvg
vgextend               扩展vg命令
vgreduce               缩减vg命令
vgs                    查看系统上vg的简要信息
vgscan                 扫描vg

3.创建逻辑卷支持的命令:

lvcreate               创建lv命令
lvdisplay              查看系统上所以lv的详细信息,也可以查单某个lv信息,如:lvdisplay  /dev/myvg/mylv
lvremove               移除lv命令,衣橱前一定要确保数据已经备份
lvreduce               缩减lv命令,数据可能会丢失,在尽心lv缩减之前,先进行pv缩减。
lvextend               扩展lv名命令
lvs                    查看系统上所以lv信息

4.pv、vg、lv具体使用方法:

(1)创建pv
#pvcreate /dev/sdb1 /dev/sdb2     将/dev/sdb1和/dev/sdb2 创建为物理卷
#pvdisplay  /dev/sdb1             查看/dev/sdb1物理卷信息
(2)创建vg
#vgcreate  myvg(此处要为vg定义一个名称)  /dev/sdb1 /dev/sdb2 
如果想在创建vg的时候指定PE的大小(PE大小默认为4M),可以使用下面的命令:
#vgcreate  -s  Size  vgname partition
其中PE支持(k|M|G|T)大小
如:#vgcreate -s 16M  myvg  /dev/sdb1 /dev/sdb2
#vgremove -f vgname(vg的名称)      强制移除vg
(3)扩展vg
#vgextend -t  vgname  partition   -t选项的意思是测试vg能否扩展,会有提示信息出现
如:#vgextend -t myvg /dev/sdb3 
#vgextend  myvg /dev/sdb3          将/dev/sdb3扩展进myvg
(4)移除vg
#vgreduce  -t  vgname partition   -t选项测试vg能否被缩减
如:#vgreduce  myvg   /dev/sdb4    将/dev/sdb4从myvg中缩减掉
注:为了在缩减卷组的时候不丢失数据,可以在缩减卷组之前使用pvmove命令,将物理卷中的数据转移,然后再缩减卷组。
如:#pvmove /dev/sdb4  /dev/sdb5   先将/dev/sdb4中的数据移到/dev/sdb5中
    #vgreduce -t myvg /dev/sdb4    测试能否缩减
    #vgreduce myvg  /dev/sdb4      在上个命令提示可以缩减成功后,再缩减。
(5)lvcreate 命令: 创建逻辑卷命令
              -l  指定LE的个数,一般不常用
              -L  SIZE {k|m|g|t} 指定逻辑卷的大小
              -n  logicalname    指定逻辑卷的名字
              -p  mode{r|rw}     制定权限
如:
#lvcreate -L 1G -n lv1 myvg   :在myvg卷组中创建一个名为lv1的1G的逻辑卷

5.如何扩展和缩减逻辑卷(lv)

(1)扩展逻辑卷:
   想要扩展逻辑卷,首先要扩展物理卷边界,然后再扩展逻辑卷边界;缩小逻辑卷的时候刚好顺序相反。
   #lvextend -L 3G /dev/myvg/lv1    将逻辑卷lv1扩展到3G,但是扩展的最大值不能超过卷组(vg)的大小
(2)缩减逻辑卷:假如将4G的逻辑卷缩减2G
   #lvreduce -t -L 2G /dev/myvg/lv1   首先检测逻辑卷能否缩减,如果能缩减,会提示可以缩减成功信息
   #umount  /dev/myvg/lv1             将逻辑卷卸载
   #esfsck -f /dev/myvg/lv1           强制检测逻辑卷中的数据
   #resize2fs  /dev/myvg/lv1 2G       将物理卷缩减2G
   #lvreduce -L 2G  /dev/myvg/lv1     再将逻辑卷缩减2G
   #mount /dev/myvg/lv1   /mnt/myvg   再重新挂载,查看其中数据是否完整

6.如何实现为逻辑卷lv建快照,并备份数据 

(1).#lvcreate -s -L 256M -p -r -n snap_mylv /dev/myvg/lv1  创建一个快照
    -s 选项说明创建的是一个快照
    -L 选项指定快照大小
    -p 选项指定权限 ,-r 为只读 
    -n 选项指定快照名称 
(2).将此快照挂载到一个目录下,假如目录为/backup
    #mount /dev/myvg/snap_mylv  /backup
(3).为快照做备份
    #tar -jcf /tmp/snap.tar.bz2  /backup/*   将快照备份至/tmp目录下,并命名为snap.tar.bz2
(4).移除快照或者逻辑卷
    #lvremove     /dev/myvg/snap_mylv  移除快照卷
    #lvremove     /dev/myvg/lv1        移除逻辑卷

7.范例:创建一个由两个物理卷组成的大小为8G的卷组myvg,要求其PE大小为8M;而后在此卷组中创建一个大小为4G的逻辑卷lv1,此逻辑卷要能在开机后自动挂载至/users目录.

首先创建两个4G的分区,或者根据实际情况定义每一个分区的大小,总之两个分区加起来是8G就行了,而且每个分区的ID号必须为8e格式。

  #fdisk /dev/sda          创建分区命令,如何分区在这里不做详细介绍,相信大家都不陌生吧。
  #partprobe  /dev/sda                         让系统重新识别新分区
  #pvcreate /dev/sda8 /dev/sda9                将新分区/dev/sda8和/dev/sda9 创建为物理卷
  #pvs                                         查看刚建立的物理卷信息
  #vgcreate -s 8M myvg /dev/sda8 /dev/sda9     将这两个物理卷创建为逻辑组myvg,PE大小为8M
  #vgs                                         查看逻辑组信息
  #lvcreate -L 4G -n lv1 myvg                  在逻辑组中创建一个4G大小名为lv1的逻辑卷
  #lvs                                         查看逻辑卷信息
  #mke2fs -j /dev/myvg/lv1                     格式化此逻辑卷
  #mkdir /users                                创建/users目录
  #vim /etc/fstab    在配置文件中添加下面一行信息
  /dev/myvg/lv1   /users    ext3    defaults   0 0 
  然后保存退出
  #mount -a                                    使自动挂载生效

二、实际中的一个例子

测试环境遇到的一个关于vg(逻辑卷管理)的实例

描述:一台db master 服务器根磁盘空间不足,因为db数据存放目录在/opt下,根目录已经没有空间可用;而/home是一个逻辑卷,有140G的空间

于是想把此逻辑卷空间合并到根目录,处理步骤如下:

1、查看

#df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_testdb-lv_root
                       50G   45G  1.7G  97% /
tmpfs                 9.8G     0  9.8G   0% /dev/shm
/dev/sda1             477M   25M  427M   6% /boot
/dev/mapper/vg_testdb-lv_home
                      140G   60M  133G   1% /home

查看卷组,可以看到大小是200G左右                                       

#vgdisplay
  --- Volume group ---
  VG Name               vg_testdb
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               3
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               199.51 GiB
  PE Size               4.00 MiB
  Total PE              51074
  Alloc PE / Size       51074 / 199.51 GiB
  Free  PE / Size       0 / 0   
  VG UUID               5RbEMR-TEyf-Mucn-99oP-c3q5-pGlh-D6yTk8

查看逻辑卷 

#lvdisplay
  --- Logical volume ---
  LV Path                /dev/vg_testdb/lv_root
  LV Name                lv_root
  VG Name                vg_testdb
  LV UUID                rzrTPp-jIm1-ispE-SBB5-M6iB-Tkit-MGcbwY
  LV Write Access        read/write
  LV Creation host, time testdb, 2015-04-20 14:30:09 +0800
  LV Status              available
  # open                 1
  LV Size                50.00 GiB
  Current LE             12800
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0
   
  --- Logical volume ---
  LV Path                /dev/vg_testdb/lv_home
  LV Name                lv_home
  VG Name                vg_testdb
  LV UUID                e0rGUi-Wu5O-uUaM-yYBl-ccR3-xAex-ogjgby
  LV Write Access        read/write
  LV Creation host, time testdb, 2015-04-20 14:31:34 +0800
  LV Status              available
  # open                 1
  LV Size                141.65 GiB
  Current LE             36262
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2
   
  --- Logical volume ---
  LV Path                /dev/vg_testdb/lv_swap
  LV Name                lv_swap
  VG Name                vg_testdb
  LV UUID                rOSp6a-aNbb-Jgrc-qv4Y-Egr0-qq1q-xDK5bG
  LV Write Access        read/write
  LV Creation host, time testdb, 2015-04-20 14:35:19 +0800
  LV Status              available
  # open                 1
  LV Size                7.86 GiB
  Current LE             2012
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

可以看到一共有2个逻辑卷,一个是lv_root,一个是lv_home

2、卸载lv_home这个逻辑卷

#umount /dev/vg_testdb/lv_home

再次查看,就看不到/home目录了

#df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_testdb-lv_root
                       50G   45G  1.7G  97% /
tmpfs                 9.8G     0  9.8G   0% /dev/shm
/dev/sda1             477M   25M  427M   6% /boot

移除lv_home这个逻辑卷

#lvremove /dev/vg_testdb/lv_home
Do you really want to remove active logical volume lv_home? [y/n]: y   --输入y
  Logical volume "lv_home" successfully removed
#vgdisplay
  --- Volume group ---
  VG Name               vg_testdb
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               199.51 GiB
  PE Size               4.00 MiB
  Total PE              51074
  Alloc PE / Size       14812 / 57.86 GiB
  Free  PE / Size       36262 / 141.65 GiB
  VG UUID               5RbEMR-TEyf-Mucn-99oP-c3q5-pGlh-D6yTk8

3、将剩余所有空闲的逻辑卷合并到lv_root 这个逻辑卷中,如下:

#lvextend -l +100%FREE  /dev/mapper/vg_testdb-lv_root
  Size of logical volume vg_testdb/lv_root changed from 50.00 GiB (12800 extents) to 191.65 GiB (49062 extents).
  Logical volume lv_root successfully resized

以上,表示成功

4、查看扩展之后的逻辑卷大小

#lvdisplay
  --- Logical volume ---
  LV Path                /dev/vg_testdb/lv_root
  LV Name                lv_root
  VG Name                vg_testdb
  LV UUID                rzrTPp-jIm1-ispE-SBB5-M6iB-Tkit-MGcbwY
  LV Write Access        read/write
  LV Creation host, time testdb, 2015-04-20 14:30:09 +0800
  LV Status              available
  # open                 1
  LV Size                191.65 GiB
  Current LE             49062
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0
   
  --- Logical volume ---
  LV Path                /dev/vg_testdb/lv_swap
  LV Name                lv_swap
  VG Name                vg_testdb
  LV UUID                rOSp6a-aNbb-Jgrc-qv4Y-Egr0-qq1q-xDK5bG
  LV Write Access        read/write
  LV Creation host, time testdb, 2015-04-20 14:35:19 +0800
  LV Status              available
  # open                 1
  LV Size                7.86 GiB
  Current LE             2012
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1

可以看到lv_root已经由原来的50.00 GiB扩展到了191.65 GiB!

5、重新定义lv_root这个逻辑卷

注:resize2fs 是文件系统重定义大小工具,能够用于扩大或者缩小一个在设备上未挂载的文件系统。

如果这个文件系统是挂载的,它能够用于扩大挂载了的文件系统,假定内核支持在线重新定义大小。

(从这个算起,linux的2.6内核支持使用ext3挂载文件系统的在线重定义大小。)

#resize2fs /dev/vg_testdb/lv_root
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/vg_testdb/lv_root is mounted on /; on-line resizing required
old desc_blocks = 4, new_desc_blocks = 12
Performing an on-line resize of /dev/vg_testdb/lv_root to 50239488 (4k) blocks.
The filesystem on /dev/vg_testdb/lv_root is now 50239488 blocks long.

6、查看磁盘空间

#df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_testdb-lv_root
                      189G   45G  135G  26% /
tmpfs                 9.8G     0  9.8G   0% /dev/shm
/dev/sda1             477M   25M  427M   6% /boot

7、修改/etc/fstab

注:如果不修改,下次重启改服务器之后,会报错,提示找不到lv_testdb-lv_home

#cat /etc/fstab
将下面的行删除或者注释,然后重启该服务器就没问题了!
#/dev/mapper/vg_testdb-lv_home /home                   ext4    defaults        1 2

8、如果忘记修改fstab,重启之后,会报错如下:

wKiom1glcwzi1vGBAAH2ZUWfJuk869.png这个时候,只能通过终端输入密码进入maintenance模式,但是这是只读模式,无法执行写操作,解决方法如下:

mount -o remount, rw /     #重新挂载根目录,并且给予读写权限
然后修改
vi /etc/fatab
/dev/mapper/vg_testdb-lv_home /home                   ext4    defaults        1 2  注释
然后
reboot