Linux下LVM

LVM(Logic Volume Management,逻辑卷管理

        由多个块设备(pv,卷)组成一个逻辑卷组(vg),接着在逻辑组上创建逻辑卷(lv),实现在线缩减逻辑卷与逻辑卷组。

lvm-pic.bmp

实验:

    1、VM虚拟机添加硬盘:

        2G(/dev/sdb)

        3G(/dev/sdc)

        5G(/dev/sdd)

    2、查看硬盘信息:

[root@neolinux ~]# fdisk -l | grep -e "^Disk /dev/sd[b-d]"
Disk /dev/sdb: 2147 MB, 2147483648 bytes
Disk /dev/sdc: 3221 MB, 3221225472 bytes
Disk /dev/sdd: 5368 MB, 5368709120 bytes

    3、将磁盘设定为PV,并且查看PV的信息:

[root@neolinux ~]# pvcreate /dev/sd[b-d]                               #将磁盘设置为PV
  Physical volume "/dev/sdb" successfully created
  Physical volume "/dev/sdc" successfully created
  Physical volume "/dev/sdd" successfully created
[root@neolinux ~]# pvs                                                 #显示当前PV信息
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sda3  VG   lvm2 a--  17.80g    0 
  /dev/sdb        lvm2 ---   2.00g 2.00g
  /dev/sdc        lvm2 ---   3.00g 3.00g
  /dev/sdd        lvm2 ---   5.00g 5.00g
[root@neolinux ~]# pvdisplay /dev/sdb                                  #显示PV详细信息
  "/dev/sdb" is a new physical volume of "2.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name               
  PV Size               2.00 GiB
  Allocatable           NO
  PE Size               0                                              #PE Size是在创建VG时指定
  Total PE              0                                              #该磁盘一共有多少个PE,取决于创建VG时,指定PE的大小
  Free PE               0                                              #该磁盘剩余可用PE数量
  Allocated PE          0
  PV UUID               cu50Yp-PcWC-o76e-CTyK-CBgt-BjaJ-2z98lt         #每一个PV的UUID都不一样
[root@neolinux ~]#

    4、创建VG,并且查看VG的信息:

[root@neolinux ~]# vgcreate -s 16M myvg /dev/sd[b-d]                   #创建名字为myvg的逻辑卷组,添加/dev/sdb,/dev/sdc,/dev/sdd到此卷组中,指定PE大小为16M,默认为4M
  Volume group "myvg" successfully created
[root@neolinux ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree
  VG     1   2   0 wz--n- 17.80g    0 
  myvg   3   0   0 wz--n-  9.95g 9.95g                                 #此VG 一共有多少容量可使用
[root@neolinux ~]# vgdisplay myvg
  --- Volume group ---
  VG Name               myvg
  System ID             
  Format                lvm2
  Metadata Areas        3
  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                3
  Act PV                3
  VG Size               9.95 GiB
  PE Size               16.00 MiB                                        #VG中PE大小
  Total PE              637
  Alloc PE / Size       0 / 0   
  Free  PE / Size       637 / 9.95 GiB
  VG UUID               DLTJNf-he5S-I8rw-jUNZ-8CK1-Cb3w-TqCMCD
[root@neolinux ~]# pvdisplay /dev/sdb
  --- Physical volume ---
  PV Name               /dev/sdb
  VG Name               myvg                                              #显示磁盘加入到myvg卷组中
  PV Size               2.00 GiB / not usable 16.00 MiB
  Allocatable           yes 
  PE Size               16.00 MiB
  Total PE              127
  Free PE               127
  Allocated PE          0
  PV UUID               cu50Yp-PcWC-o76e-CTyK-CBgt-BjaJ-2z98lt

    5、创建逻辑卷lv,并查看lv信息

[root@neolinux ~]# lvcreate  -n mylv -L 6G -p rw myvg                     #创建lv 
  Logical volume "mylv" created.
#-n:指定lv名称
#-L:指定lv大小
#-p:指定读写权限
[root@neolinux ~]# lvs 
  LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  LV01 VG   -wi-ao---- 9.77g                                                    
  LV02 VG   -wi-ao---- 8.04g                                                    
  mylv myvg -wi-a----- 6.00g 
[root@neolinux ~]# lvdisplay /dev/myvg/mylv
  --- Logical volume ---
  LV Path                /dev/myvg/mylv
  LV Name                mylv
  VG Name                myvg
  LV UUID                Ob0WO9-CMn0-pVLu-xd5a-fy4g-ABDM-JGB8et
  LV Write Access        read/write
  LV Creation host, time neolinux, 2016-06-04 02:29:09 +0800
  LV Status              available
  # open                 0
  LV Size                6.00 GiB
  Current LE             384
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2
[root@neolinux ~]#

    6、格式化文件系统,挂载使用

[root@neolinux ~]# mke2fs -t ext4 /dev/myvg/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
393216 inodes, 1572864 blocks
78643 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1610612736
48 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 34 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@neolinux ~]# mount /dev/myvg/mylv /mnt                                #挂载使用
[root@neolinux ~]# mount | grep /mnt
/dev/mapper/myvg-mylv on /mnt type ext4 (rw)
[root@neolinux ~]# df -Th /mnt/
Filesystem           Type  Size  Used Avail Use% Mounted on
/dev/mapper/myvg-mylv
                     ext4  5.8G   12M  5.5G   1% /mnt
[root@neolinux ~]# cp /etc/rc.d/init.d/functions /mnt
[root@neolinux ~]# ll /mnt/
total 44
-rw-r--r-- 1 root root 25419 Jun  4 02:55 functions
drwx------ 2 root root 16384 Jun  4 02:51 lost+found
[root@neolinux ~]#

    7、在线扩展lv容量

[root@neolinux ~]# lvextend -L +1G /dev/myvg/mylv   #+号表示在原有容量的基础上新增多少,不写+号表示容量扩容到多少,在扩展容量之前,应该提前检查该LV所在的VG上可用容量是否满足需求,在去扩展LV的逻辑边界
  Size of logical volume myvg/mylv changed from 6.00 GiB (384 extents) to 7.00 GiB (448 extents).  
  Logical volume mylv successfully resized
[root@neolinux ~]# df -Th /mntFilesystem          #查看挂载/mnt目录容量大小,没有发生变化,是因为没有扩展LV的逻辑边界         
Type  Size  Used Avail Use% Mounted on/dev/mapper/myvg-mylv                     
ext4  5.8G   13M  5.5G   1% /mnt
[root@neolinux ~]# resize2fs /dev/myvg/mylv     #扩展LV的逻辑边界,这里没有指定大小,表示与LV的物理边界一样大
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/myvg/mylv is mounted on /mnt; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/myvg/mylv to 1835008 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 1835008 blocks long.
[root@neolinux ~]# df -Th /mnt                #扩展之后的容量显示
Filesystem           Type  Size  Used Avail Use% Mounted on
/dev/mapper/myvg-mylv
                     ext4  6.8G   14M  6.5G   1% /mnt
[root@neolinux ~]# ll /mnt/                   #/mnt目录下文件一样存在
total 44
-rw-r--r-- 1 root root 25419 Jun  4 02:55 functions
drwx------ 2 root root 16384 Jun  4 02:51 lost+found
在线扩容步骤总结:
    1、检查VG的容量是否满足扩容需求,不满足,请先扩容VG
    2、执行扩容LV物理边界命令
    3、确认LV物理边界是否扩容成功
    4、执行扩容LV逻辑边界
    5、检查挂载目录容量,确认扩容完成

    8、缩减LV容量

[root@neolinux ~]# umount /mnt    #取消挂载
[root@neolinux ~]# e2fsck -f /dev/myvg/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/myvg/mylv: 12/458752 files (0.0% non-contiguous), 65030/1835008 blocks
[root@neolinux ~]# resize2fs /dev/myvg/mylv 3G    #缩减LV的逻辑边界到3G容量大小
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/myvg/mylv to 786432 (4k) blocks.
The filesystem on /dev/myvg/mylv is now 786432 blocks long.
[root@neolinux ~]# lvreduce /dev/myvg/mylv -L 3G    #缩减LV物理边界到3G容量大小
  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 myvg/mylv changed from 7.00 GiB (448 extents) to 3.00 GiB (192 extents).
  Logical volume mylv successfully resized
[root@neolinux ~]# lvs        #检查LV容量缩减是否完成
  LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  LV01 VG   -wi-ao---- 9.77g                                                    
  LV02 VG   -wi-ao---- 8.04g                                                    
  mylv myvg -wi-a----- 3.00g 
[root@neolinux ~]# mount /dev/myvg/mylv /mnt/    #重新挂载该LV
[root@neolinux ~]# ll /mnt/        #检查数据依然存在
total 44
-rw-r--r-- 1 root root 25419 Jun  4 02:55 functions
drwx------ 2 root root 16384 Jun  4 02:51 lost+found

    9、移除PV

[root@neolinux ~]# vgreduce myvg /dev/sdb        #在当LV挂载时,选择移除PV,在选择移除PV的时候,要考虑到该移除PV的总容量要小于当前该VG的剩余可用容量
  Removed "/dev/sdb" from volume group "myvg"
[root@neolinux ~]# pvs                        #确认PV已经移除VG
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sda3  VG   lvm2 a--  17.80g    0 
  /dev/sdb        lvm2 ---   2.00g 2.00g
  /dev/sdc   myvg lvm2 a--   2.98g 2.98g
  /dev/sdd   myvg lvm2 a--   4.98g 1.98g
[root@neolinux ~]# ll /mnt/            #LV挂载数据依然存在
total 44
-rw-r--r-- 1 root root 25419 Jun  4 02:55 functions
drwx------ 2 root root 16384 Jun  4 02:51 lost+found
[root@neolinux ~]# vgs                
  VG   #PV #LV #SN Attr   VSize  VFree
  VG     1   2   0 wz--n- 17.80g    0 
  myvg   2   1   0 wz--n-  7.97g 4.97g
#我们在此进行LV缩减至2G
[root@neolinux ~]# df -Th /mnt
Filesystem           Type  Size  Used Avail Use% Mounted on
/dev/mapper/myvg-mylv
                     ext4  2.0G  3.1M  1.9G   1% /mnt
[root@neolinux ~]# pvs        #可以清楚的看到LV上的数据保存在/dev/sdc这个PV中,
  PV         VG   Fmt  Attr PSize  PFree   
  /dev/sda3  VG   lvm2 a--  17.80g       0 
  /dev/sdb        lvm2 ---   2.00g    2.00g
  /dev/sdc   myvg lvm2 a--   2.98g 1008.00m
  /dev/sdd   myvg lvm2 a--   4.98g    4.98g
[root@neolinux ~]# 
#数据在/dev/sdc这个PV中,我们需要把这个PV移除VG
[root@neolinux ~]# pvmove /dev/sdc /dev/sdd    #移动/dev/sdc上的PE到/dev/sdd
  /dev/sdc: Moved: 0.0%
  /dev/sdc: Moved: 100.0%
[root@neolinux ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sda3  VG   lvm2 a--  17.80g    0 
  /dev/sdb        lvm2 ---   2.00g 2.00g
  /dev/sdc   myvg lvm2 a--   2.98g 2.98g        #可以看到/sdc上没有存在数据
  /dev/sdd   myvg lvm2 a--   4.98g 2.98g        #实际存储的数据转移到/dev/sdd上
[root@neolinux ~]# 
#接下来我们可以安心把/dev/sdc从VG上卸载
[root@neolinux ~]# vgreduce myvg /dev/sdc 
  Removed "/dev/sdc" from volume group "myvg"
[root@neolinux ~]# ll /mnt/        #此时LV不受任何影响
total 44
-rw-r--r-- 1 root root 25419 Jun  4 03:35 functions
drwx------ 2 root root 16384 Jun  4 03:34 lost+found
[root@neolinux ~]#

    10、PV移除

[root@neolinux ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sda3  VG   lvm2 a--  17.80g    0 
  /dev/sdb        lvm2 ---   2.00g 2.00g
  /dev/sdc        lvm2 ---   3.00g 3.00g
  /dev/sdd   myvg lvm2 a--   4.98g 2.98g
[root@neolinux ~]# pvremove /dev/sdb
  Labels on physical volume "/dev/sdb" successfully wiped

    11、快照snopshot功能

[root@neolinux ~]# df -Th /mnt        #检查mylv,大小为2G,使用3.1M
Filesystem           Type  Size  Used Avail Use% Mounted on
/dev/mapper/myvg-mylv
                     ext4  2.0G  3.1M  1.9G   1% /mnt
[root@neolinux ~]# lvs
  LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  LV01 VG   -wi-ao---- 9.77g                                                    
  LV02 VG   -wi-ao---- 8.04g                                                    
  mylv myvg -wi-ao---- 2.00g                                                    
[root@neolinux ~]# vgs            #查看mylv所在的vg还有6G的容量,足够我们创建快照卷
  VG   #PV #LV #SN Attr   VSize  VFree
  VG     1   2   0 wz--n- 17.80g    0 
  myvg   2   1   0 wz--n-  7.97g 5.97g
[root@neolinux ~]# lvcreate -L 3G -s -n mylv-snapshot /dev/myvg/mylv          #创建快照卷,大小为3G,快照卷选择的大小,应该是需要快照的卷容量加上需要备份时间内此卷的变化容量
  Reducing COW size 3.00 GiB down to maximum usable size 2.02 GiB.            #比如说快照备份时间需要30分钟,在30分钟原卷数据变化量1G,那么我们应该选择快照卷的大小为大于2G+1G 
  Logical volume "mylv-snapshot" created.

    12、对快照卷备份管理

[root@neolinux ~]# mount /dev/myvg/mylv-snapshot /opt/                    #快照卷是需要格式化就可以挂载,查看
[root@neolinux ~]# ls /opt/
functions  lost+found
[root@neolinux ~]# touch /mnt/test            #在原卷创建test文件
[root@neolinux ~]# ll /mnt/
total 44
-rw-r--r-- 1 root root 25419 Jun  4 03:35 functions
drwx------ 2 root root 16384 Jun  4 03:34 lost+found
-rw-r--r-- 1 root root     0 Jun  5 03:32 test
[root@neolinux ~]# 
[root@neolinux ~]# tar JcPf /backup/mylv-`date +%F`.tar.xz /opt/*        #对快照卷文件系统级别备份
[root@neolinux ~]# dd if=/dev/myvg/mylv-snapshot of=/backup/mylv-`date +%F`.dd        #对快照卷做块级别的备份
4194304+0 records in
4194304+0 records out
2147483648 bytes (2.1 GB) copied, 45.3875 s, 47.3 MB/s
[root@neolinux ~]# umount /opt/            #对快照卷取消挂载        
[root@neolinux ~]# lvremove /dev/myvg/mylv-snapshot         #删除快照卷
Do you really want to remove active logical volume mylv-snapshot? [y/n]: y
  Logical volume "mylv-snapshot" successfully removed
[root@neolinux ~]#

      13、模拟对原卷破坏

[root@neolinux ~]# dd if=/dev/zero of=/dev/myvg/mylv bs=512 count=1000        #模拟对原卷的破坏
1000+0 records in
1000+0 records out
512000 bytes (512 kB) copied, 0.0212266 s, 24.1 MB/s
[root@neolinux ~]# ll /mnt/            #检查数据,其实这个时候原卷已经损坏
total 0
[root@neolinux ~]# mount
/dev/mapper/VG-LV01 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)
/dev/sda1 on /boot type ext4 (rw)
/dev/mapper/VG-LV02 on /usr type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/mapper/myvg-mylv on /mnt type ext4 (rw)
[root@neolinux ~]# umount /mnt/            #取消挂载原卷
[root@neolinux ~]# mount /dev/myvg/mylv /mnt/        #重新挂载原卷,已经挂载不上去了
mount: you must specify the filesystem type

    14、使用对数据块的备份恢复原卷数据

[root@neolinux ~]# dd if=/backup/mylv-2016-06-05.dd of=/dev/myvg/mylv         #对快照卷进行恢复
4194304+0 records in
4194304+0 records out
2147483648 bytes (2.1 GB) copied, 53.3457 s, 40.3 MB/s
[root@neolinux ~]# mount /dev/myvg/mylv /mnt        #重新挂载
[root@neolinux ~]# ll /mnt/        #检查数据为快照卷备份那时刻的数据
total 44
-rw-r--r-- 1 root root 25419 Jun  4 03:35 functions
drwx------ 2 root root 16384 Jun  4 03:34 lost+found
[root@neolinux ~]#

    15、编写一个小脚本对lvm进行定时备份

#!/bin/bash                            #/root/scripts/backuplvm.sh
#
/sbin/lvcreate -L 3G -s -n mylv-snapshot /dev/myvg/mylv
/bin/mount /dev/myvg/mylv-snapshot /opt/
/bin/tar JcPf /backup/mylv-`date +%F` /opt/*
/bin/umount /opt/
/sbin/lvremove /dev/myvg/mylv-snapshot
#
[root@neolinux scripts]# chmod +x /root/scripts/backuplvm.sh
[root@neolinux scripts]# crontab -l        #每天晚上23点59分59秒开始备份
0 0 * * * /bin/bash /root/scripts/backuplvm.sh
[root@neolinux scripts]#

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

(0)
nice_neo_linuxnice_neo_linux
上一篇 2016-06-09 22:15
下一篇 2016-06-09 22:15

相关推荐

  • Centos 编译内核操作实践

    §·编译内核: ※·程序包的编译安装: ./configure   make   make install 前提:开发环境(开发工具,开发库),头文件(/usr/include)  开源: 源代码开发—->可执行格式,(不同Linux的发行版以自己的理解,发行的软件不同) 发行版:以“通用”…

    Linux干货 2016-09-13
  • 基础指令使用篇 Linux版

    回显,回声 echo echo hello > /dve/pts/1 打开图形界面 init 5   关闭图形界面 init 3 ctrl+alt+F1-6字符,F7图形界面 chvt 改变虚拟终端 chvt +数字 startx  图形的软件打开 poweroff centOS 6.8与7.2都正常关闭断电 hostname 显示…

    系统运维 2016-08-04
  • LAMP平台基于NFS实现web服务器负载均衡

    前言 随着访问量的逐渐增大,一台web服务器可能已经无法满足需求,这就需要增加web服务器的数量了,于是问题就来了:如何保证两台服务器数据同步呢?本文将讲解如何基于NFS实现web服务器的负载均衡及数据同步。 NFS服务介绍 NFS(Network File System)网络文件系统,允许一个系统通过网络共享目录和文件,通过使用NFS,用户和程序可以像访问…

    Linux干货 2015-04-22
  • 系统进程管理

    ps 查看系统进程命令 启动进程的方式:     系统启动过程中自动启动:与终端无关的进程;     用户通过终端启动:与终端相关的进程; 选项:         a:所有与终端相关的进程; &nbs…

    Linux干货 2016-09-06
  • 8-2 用户组和权限管理

    用户组和权限管理     本节主要是:su、passwd、chage、chown、chgrp、chmod、umask等命令及文件的三种普通权限和三种特殊权限     切换用户或以其他用户身份执行命令:su su [options…] [-] [user[args…]] 切换用…

    Linux干货 2016-08-07
  • Linux的基础文件管理命令

    Linux用于管理文件的一些基本常见的命令如下: ls:  列出指定目录下的清单    -a  显示所有文件包括隐藏文件    -l  显示文件的详细信息    -d  查看目录自身   示例: cat:  可查看指定路径下的文件文本 fi…

    Linux干货 2016-11-06