首页 > 代码库 > 深入剖解linux逻辑卷LVM

深入剖解linux逻辑卷LVM

一、LVM概念

LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。通过LVM系统管理员可以轻松管理磁盘分区,如:将若干个磁盘分区连接为一个整块的卷组(volume group),形成一个存储池。管理员可以在卷组上随意创建逻辑卷组(logical volumes),并进一步在逻辑卷组上创建文件系统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配。当系统添加了新的磁盘,通过LVM管理员就不必将磁盘的文件移动到新的磁盘上以充分利用新的存储空间,而是直接扩展文件系统跨越磁盘即可。

二、LVM结构

wKiom1P5A-iyGNWtAAGWT5avW0g325.jpg

三、大纲

大纲:

一、将硬盘分区并划分为lvm卷

二、将分区转换为pv物理卷

三、将pv加入到一个vg组中

四、从vg划出lv逻辑卷

五、格式化lv卷

六、开机自动挂载

七、扩大逻辑卷(lv),扩大卷组(vg)

八、减小卷组(vg),减小逻辑卷(lv)

九、创建逻辑卷快照

十、删除卷组(vg),删除物理卷(pv),删除逻辑卷(lv)

十一、在lvm逻辑卷中常用的命令


四、实战动起来

fdisk最多支持15个分区,这是fdisk天生的限制

一、将硬盘分区并划分为lvm卷
[root@localhost ~]# fdisk /dev/sdb  #对/dev/sdb进行磁盘分区
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xafb2301b.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won‘t be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It‘s strongly recommended to
         switch off the mode (command ‘c‘) and change display units to
         sectors (command ‘u‘).

Command (m for help): p             #打印分区表

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 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: 0xafb2301b

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): n             #增加一个新分区
Command action
   e   extended                     #扩展分区
   p   primary partition (1-4)      #主分区
p
Partition number (1-4): 1           #分区编号
First cylinder (1-1305, default 1): 1   #起初柱为1
Last cylinder, +cylinders or +size{K,M,G} (1-1305, default 1305): +2000MB  #分区的大小为2G

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2           #第二个分区
First cylinder (245-1305, default 245): 
Using default value 245
Last cylinder, +cylinders or +size{K,M,G} (245-1305, default 1305): +2000MB

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 3           #第三个分区
First cylinder (489-1305, default 489): 
Using default value 489
Last cylinder, +cylinders or +size{K,M,G} (489-1305, default 1305): +2000MB

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Selected partition 4                #第四个分区
First cylinder (733-1305, default 733): 
Using default value 733
Last cylinder, +cylinders or +size{K,M,G} (733-1305, default 1305): +2000MB

Command (m for help): p

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 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: 0xafb2301b

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         244     1959898+  83  Linux
/dev/sdb2             245         488     1959930   83  Linux
/dev/sdb3             489         732     1959930   83  Linux
/dev/sdb4             733         976     1959930   83  Linux

Command (m for help): t             #改变一个分区的系统id
Partition number (1-4): 1           #分区编号
Hex code (type L to list codes): l  #查看类型

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris        
 1  FAT12           39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       40  Venix 80286     84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      41  PPC PReP Boot   85  Linux extended  c7  Syrinx         
 5  Extended        42  SFS             86  NTFS volume set da  Non-FS data    
 6  FAT16           4d  QNX4.x          87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS       4e  QNX4.x 2nd part 88  Linux plaintext de  Dell Utility   
 8  AIX             4f  QNX4.x 3rd part 8e  Linux LVM       df  BootIt         
 9  AIX bootable    50  OnTrack DM      93  Amoeba          e1  DOS access     
 a  OS/2 Boot Manag 51  OnTrack DM6 Aux 94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       52  CP/M            9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 53  OnTrack DM6 Aux a0  IBM Thinkpad hi eb  BeOS fs        
 e  W95 FAT16 (LBA) 54  OnTrackDM6      a5  FreeBSD         ee  GPT            
 f  W95 Ext‘d (LBA) 55  EZ-Drive        a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            56  Golden Bow      a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    5c  Priam Edisk     a8  Darwin UFS      f1  SpeedStor      
12  Compaq diagnost 61  SpeedStor       a9  NetBSD          f4  SpeedStor      
14  Hidden FAT16 <3 63  GNU HURD or Sys ab  Darwin boot     f2  DOS secondary  
16  Hidden FAT16    64  Novell Netware  af  HFS / HFS+      fb  VMware VMFS    
17  Hidden HPFS/NTF 65  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST SmartSleep  70  DiskSecure Mult b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 75  PC/IX           bb  Boot Wizard hid fe  LANstep        
1c  Hidden W95 FAT3 80  Old Minix       be  Solaris boot    ff  BBT            
1e  Hidden W95 FAT1
Hex code (type L to list codes): 8e    #Linux LVM编号
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): t
Partition number (1-4): 2
Hex code (type L to list codes): 8e
Changed system type of partition 2 to 8e (Linux LVM)

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

Command (m for help): t
Partition number (1-4): 4
Hex code (type L to list codes): 8e
Changed system type of partition 4 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 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: 0xafb2301b

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         244     1959898+  8e  Linux LVM
/dev/sdb2             245         488     1959930   8e  Linux LVM
/dev/sdb3             489         732     1959930   8e  Linux LVM
/dev/sdb4             733         976     1959930   8e  Linux LVM

Command (m for help): w          #保存分区表、打印分区表信息并退出
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.


二、将分区转换为pv物理卷
注释:PE的大小默认是4M
1、安装必要的软件包
yum -y install parted lvm2

2、让内核重新载入分区
注释:新硬盘分区完成后,使用partprobe将新的分区表读入内存
[root@localhost ~]# partprobe /dev/sdb    #内核加载硬盘分区并读入到内存中
[root@localhost ~]# cat /proc/partitions  #查看是否重新加载硬盘分区
[root@localhost ~]# pvcreate /dev/sdb{1,2,3,4}  #将分区转换成物理卷
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created
  Physical volume "/dev/sdb3" successfully created
  Physical volume "/dev/sdb4" successfully created
[root@localhost ~]# pvscan             #查看物理卷,方法1
  PV /dev/sdb1                      lvm2 [1.87 GiB]
  PV /dev/sdb2                      lvm2 [1.87 GiB]
  PV /dev/sdb3                      lvm2 [1.87 GiB]
  PV /dev/sdb4                      lvm2 [1.87 GiB]
  Total: 4 [7.48 GiB] / in use: 0 [0   ] / in no VG: 4 [7.48 GiB]
[root@localhost ~]# pvs                #查看物理卷,方法2
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb1       lvm2 a--  1.87g 1.87g
  /dev/sdb2       lvm2 a--  1.87g 1.87g
  /dev/sdb3       lvm2 a--  1.87g 1.87g
  /dev/sdb4       lvm2 a--  1.87g 1.87g
[root@localhost ~]# pvdisplay          #更详细的查看pv的相关信息
  "/dev/sdb1" is a new physical volume of "1.87 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               1.87 GiB
  Allocatable           NO
  PE Size               0   #在pv没有加入vg之前,pv是没有PE的
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               iuJHvt-P5by-2VIz-fZJX-WTXe-tYb5-57EcVk
   
  "/dev/sdb2" is a new physical volume of "1.87 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb2
  VG Name               
  PV Size               1.87 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               sGFf2W-O9Ss-9z5R-JvQz-czoz-Gihq-8TmqnL
   
  "/dev/sdb3" is a new physical volume of "1.87 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb3
  VG Name               
  PV Size               1.87 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               rRAyyb-I1XL-cpya-516K-h8Qs-ur3N-RgrH0X
   
  "/dev/sdb4" is a new physical volume of "1.87 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb4
  VG Name               
  PV Size               1.87 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               1wy8w7-fHvU-UgrS-jLpy-v7we-FaOt-KyAaOZ
  

三、将pv加入到一个vg组中
[root@localhost ~]# vgcreate myvg /dev/sdb{1,2,3}  #将物理卷1,2,3加入到卷组,卷组名为myvg
  Volume group "myvg" successfully created
[root@localhost ~]# vgscan  #查看卷组
  Reading all physical volumes.  This may take a while...
  Found volume group "myvg" using metadata type lvm2
[root@localhost ~]# vgs     #查看卷组
  VG   #PV #LV #SN Attr   VSize VFree
  myvg   3   0   0 wz--n- 5.60g 5.60g
[root@localhost ~]# 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               5.60 GiB
  PE Size               4.00 MiB  #pv加入vg后,才会有PE,默认是4M
  Total PE              1434
  Alloc PE / Size       0 / 0   
  Free  PE / Size       1434 / 5.60 GiB
  VG UUID               9LyXRu-JUCz-pcw6-Afkq-tAgN-A3pQ-G2RS4I

四、从vg划出lv逻辑卷
[root@localhost ~]# lvcreate -n mydata -L 4G myvg
  Logical volume "mydata" created
[root@localhost ~]# lvscan
  ACTIVE            ‘/dev/myvg/mydata‘ [4.00 GiB] inherit
[root@localhost ~]# lvs
  LV     VG   Attr       LSize Pool Origin Data%  Move Log Cpy%Sync Convert
  mydata myvg -wi-a----- 4.00g  


五、格式化lv卷
[root@localhost ~]# mkfs.ext4 /dev/myvg/mydata
mke2fs 1.41.12 (17-May-2010)
文件系统标签=
操作系统:Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
262144 inodes, 1048576 blocks
52428 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=1073741824
32 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

正在写入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.


六、开机自动挂载
[root@localhost ~]# mkdir /mysql
[root@localhost ~]# mount /dev/myvg/mydata /mysql
[root@localhost ~]# ll /mysql/
总用量 16
drwx------ 2 root root 16384 8月  24 10:17 lost+found
[root@localhost ~]# vim /etc/fstab  #加入到开启自启动中
/dev/myvg/mydata        /mysql                  ext4    defaults        0 0
[root@localhost ~]# df
文件系统	         1K-块      已用      可用 已用% 挂载点
/dev/sda3             39016904   1291960  35742944   4% /
tmpfs                   506272         0    506272   0% /dev/shm
/dev/sda1               198337     25824    162273  14% /boot
/dev/mapper/myvg-mydata
                       4128448    139256   3779480   4% /mysql
[root@localhost ~]# umount /mysql     #卸载挂载盘
[root@localhost ~]# df
文件系统	         1K-块      已用      可用 已用% 挂载点
/dev/sda3             39016904   1291960  35742944   4% /
tmpfs                   506272         0    506272   0% /dev/shm
/dev/sda1               198337     25824    162273  14% /boot
[root@localhost ~]# mount -a   #重新载入/etc/fstab配置文件
[root@localhost ~]# df         #已经挂载/mysql
文件系统	         1K-块      已用      可用 已用% 挂载点
/dev/sda3             39016904   1291960  35742944   4% /
tmpfs                   506272         0    506272   0% /dev/shm
/dev/sda1               198337     25824    162273  14% /boot
/dev/mapper/myvg-mydata
                       4128448    139256   3779480   4% /mysql

					   
七、扩大逻辑卷(lv),扩大卷组(vg)
1、扩大逻辑卷(lv)
[root@localhost ~]# vgdisplay myvg  #查看卷组的信息
  --- Volume group ---
  VG Name               myvg
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               5.60 GiB  #卷组大小为5.6G
  PE Size               4.00 MiB  #默认PE大小为4M
  Total PE              1434
  Alloc PE / Size       1024 / 4.00 GiB
  Free  PE / Size       410 / 1.60 GiB
  VG UUID               Aeyfd0-9GUH-GHNg-G5qR-wN0T-r14b-ojIWJ2
   
[root@localhost ~]# lvdisplay /dev/myvg/mydata  #查看lv逻辑卷的信息
  --- Logical volume ---
  LV Path                /dev/myvg/mydata
  LV Name                mydata
  VG Name                myvg
  LV UUID                HzL6Hz-gy1z-bte2-Yvzc-tzpX-ZzHX-omel2Y
  LV Write Access        read/write
  LV Creation host, time localhost, 2014-08-24 10:15:21 +0800
  LV Status              available
  # open                 1
  LV Size                4.00 GiB   #卷组大小为4G
  Current LE             1024
  Segments               3
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0
   
[root@localhost ~]# df -TH    #查看磁盘的相关信息
文件系统    类型      容量  已用  可用 已用%% 挂载点
/dev/sda3     ext4      40G   1.4G    37G   4% /
tmpfs        tmpfs     519M      0   519M   0% /dev/shm
/dev/sda1     ext4     204M    27M   167M  14% /boot
/dev/mapper/myvg-mydata
              ext4     4.3G   143M   3.9G   4% /mysql
			  
#首先查看lv开头的相关命令,然后针对性的分析学习			  
[root@localhost ~]# lv
lvchange     lvdisplay    lvmchange    lvmdump      lvmsar       lvrename     lvscan       
lvconvert    lvextend     lvmconf      lvmetad      lvreduce     lvresize     
lvcreate     lvm          lvmdiskscan  lvmsadc      lvremove     lvs    			  

[root@localhost ~]# lvextend -L +1G /dev/myvg/mydata #将逻辑卷mydata增加1G
  Extending logical volume mydata to 5.00 GiB
  Logical volume mydata successfully resized
[root@localhost ~]# lvdisplay /dev/myvg/mydata  #查看逻辑卷的大小
  --- Logical volume ---
  LV Path                /dev/myvg/mydata
  LV Name                mydata
  VG Name                myvg
  LV UUID                HzL6Hz-gy1z-bte2-Yvzc-tzpX-ZzHX-omel2Y
  LV Write Access        read/write
  LV Creation host, time localhost, 2014-08-24 10:15:21 +0800
  LV Status              available
  # open                 1
  LV Size                5.00 GiB        #由刚才的4G到现在的5G,增加了1G
  Current LE             1280
  Segments               3
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0
   			  
[root@localhost ~]# df -TH
文件系统    类型      容量  已用  可用 已用%% 挂载点
/dev/sda3     ext4      40G   1.4G    37G   4% /
tmpfs        tmpfs     519M      0   519M   0% /dev/shm
/dev/sda1     ext4     204M    27M   167M  14% /boot
/dev/mapper/myvg-mydata
              ext4     4.3G   143M   3.9G   4% /mysql  #查看大小还是4.3G,显然没有变化
#在这里即使你重新挂载大小也不会变化,我们需要强制修改分区表
[root@localhost ~]# resize2fs -f /dev/myvg/mydata 
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/myvg/mydata is mounted on /mysql; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/myvg/mydata to 1310720 (4k) blocks.
The filesystem on /dev/myvg/mydata is now 1310720 blocks long.

[root@localhost ~]# df -TH
文件系统    类型      容量  已用  可用 已用%% 挂载点
/dev/sda3     ext4      40G   1.4G    37G   4% /
tmpfs        tmpfs     519M      0   519M   0% /dev/shm
/dev/sda1     ext4     204M    27M   167M  14% /boot
/dev/mapper/myvg-mydata
              ext4     5.3G   143M   4.9G   3% /mysql		#大小终于变化了,增加了1G 成功!!!
[root@localhost ~]# lvscan
  ACTIVE            ‘/dev/myvg/mydata‘ [5.00 GiB] inherit
[root@localhost ~]# lvs
  LV     VG   Attr       LSize Pool Origin Data%  Move Log Cpy%Sync Convert
  mydata myvg -wi-ao---- 5.00g     			  
			  
2、扩大卷组(vg)			  
[root@localhost ~]# vgdisplay #查看卷组的相关信息
  --- Volume group ---
  VG Name               myvg
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               5.60 GiB  #卷组的大小为5.6G
  PE Size               4.00 MiB
  Total PE              1434
  Alloc PE / Size       1280 / 5.00 GiB
  Free  PE / Size       154 / 616.00 MiB
  VG UUID               Aeyfd0-9GUH-GHNg-G5qR-wN0T-r14b-ojIWJ2		
[root@localhost ~]# vgs
  VG   #PV #LV #SN Attr   VSize VFree  
  myvg   3   1   0 wz--n- 5.60g 616.00m  
			  
root@localhost ~]# vgextend myvg /dev/sdb4    #将分区4加入到myvg卷组中
  Volume group "myvg" successfully extended
[root@localhost ~]# vgdisplay  #查看卷组相关信息
  --- Volume group ---
  VG Name               myvg
  System ID             
  Format                lvm2
  Metadata Areas        4
  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                4
  Act PV                4
  VG Size               7.47 GiB    #卷组大小为7.47G 增加了2G
  PE Size               4.00 MiB
  Total PE              1912
  Alloc PE / Size       1280 / 5.00 GiB
  Free  PE / Size       632 / 2.47 GiB
  VG UUID               Aeyfd0-9GUH-GHNg-G5qR-wN0T-r14b-ojIWJ2
   
[root@localhost ~]# vgs
  VG   #PV #LV #SN Attr   VSize VFree
  myvg   4   1   0 wz--n- 7.47g 2.47g			  
			  
			  
			  
			  
八、减小卷组(vg),减小逻辑卷(lv),减小物理卷(pv)			  
1、减小卷组(vg)			  
[root@localhost ~]# pvscan  #查看一个myvg卷组中包含哪些分区或者硬盘
  PV /dev/sdb1   VG myvg   lvm2 [1.87 GiB / 0    free]
  PV /dev/sdb2   VG myvg   lvm2 [1.87 GiB / 0    free]
  PV /dev/sdb3   VG myvg   lvm2 [1.87 GiB / 616.00 MiB free]
  PV /dev/sdb4   VG myvg   lvm2 [1.87 GiB / 1.87 GiB free]
  Total: 4 [7.47 GiB] / in use: 4 [7.47 GiB] / in no VG: 0 [0   ]
[root@localhost ~]# pvmove dev/sdb4            #在使用缩减vgreduce之前,首先移动PE,然后再缩减
  No data to move for myvg
[root@localhost ~]# vgreduce myvg /dev/sdb4    #将物理卷4移除myvg卷组
  Removed "/dev/sdb4" from volume group "myvg"
[root@localhost ~]# pvscan      #再次查看/dev/sdb4已经被移除
  PV /dev/sdb1   VG myvg            lvm2 [1.87 GiB / 0    free]
  PV /dev/sdb2   VG myvg            lvm2 [1.87 GiB / 0    free]
  PV /dev/sdb3   VG myvg            lvm2 [1.87 GiB / 616.00 MiB free]
  PV /dev/sdb4                      lvm2 [1.87 GiB]   #已经被移除
  Total: 4 [7.47 GiB] / in use: 3 [5.60 GiB] / in no VG: 1 [1.87 GiB]
[root@localhost ~]# vgdisplay 
  --- Volume group ---
  VG Name               myvg
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               5.60 GiB  #myvg的大小由7.47G到现在的5.60G
  PE Size               4.00 MiB
  Total PE              1434
  Alloc PE / Size       1280 / 5.00 GiB
  Free  PE / Size       154 / 616.00 MiB
  VG UUID               Aeyfd0-9GUH-GHNg-G5qR-wN0T-r14b-ojIWJ2			  
			  
			  
			  
2、减小逻辑卷(lv)				  
#首先查看逻辑卷的大小
[root@localhost ~]# df -TH
文件系统    类型      容量  已用  可用 已用%% 挂载点
/dev/sda3     ext4      40G   1.4G    37G   4% /
tmpfs        tmpfs     519M      0   519M   0% /dev/shm
/dev/sda1     ext4     204M    27M   167M  14% /boot
/dev/mapper/myvg-mydata
              ext4     4.3G   143M   3.9G   4% /mysql  #大小为4.3G			  
			  
[root@localhost ~]# umount /mysql/    #注释:减小逻辑卷时必须卸载	
[root@localhost ~]# resize2fs -f /dev/myvg/mydata 3G     #改变逻辑卷的大小3G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/myvg/mydata to 786432 (4k) blocks.
The filesystem on /dev/myvg/mydata is now 786432 blocks long.

[root@localhost ~]# lvreduce -L 3G /dev/myvg/mydata   #将逻辑卷mydata大小调为3G
  WARNING: Reducing active logical volume to 3.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mydata? [y/n]: y
  Reducing logical volume mydata to 3.00 GiB
  Logical volume mydata successfully resized
[root@localhost ~]# mount -a  #再次挂载
[root@localhost ~]# df -TH
文件系统    类型      容量  已用  可用 已用%% 挂载点
/dev/sda3     ext4      40G   1.4G    37G   4% /
tmpfs        tmpfs     519M      0   519M   0% /dev/shm
/dev/sda1     ext4     204M    27M   167M  14% /boot
/dev/mapper/myvg-mydata
              ext4     3.2G   141M   2.9G   5% /mysql		 #大小为3.2G	  
			  
			  

3、减小物理卷(pv)	
[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb1  myvg lvm2 a--  1.87g 1.87g
  /dev/sdb2  myvg lvm2 a--  1.87g 1.87g
  /dev/sdb3       lvm2 a--  1.87g 1.87g
[root@localhost ~]# pvremove /dev/sdb3
  Labels on physical volume "/dev/sdb3" successfully wiped
[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb1  myvg lvm2 a--  1.87g 1.87g
  /dev/sdb2  myvg lvm2 a--  1.87g 1.87g
  
			  
九、创建逻辑卷快照
后面练习题补充......

十、删除卷组(vg),删除物理卷(pv),删除逻辑卷(lv)
[root@localhost ~]# umount /dev/myvg/mydata  #下载挂载目录
[root@localhost ~]# lvscan             #查看逻辑卷
  ACTIVE   Original ‘/dev/myvg/mydata‘ [3.00 GiB] inherit
  ACTIVE   Snapshot ‘/dev/myvg/sanp‘ [1.00 GiB] inherit
[root@localhost ~]# lvremove /dev/myvg/mydata   #移除逻辑卷|卸载所有目录
Do you really want to remove active logical volume sanp? [y/n]: y
  Logical volume "sanp" successfully removed
Do you really want to remove active logical volume mydata? [y/n]: y
  Logical volume "mydata" successfully removed
[root@localhost ~]# vgscan                      #查看卷组
  Reading all physical volumes.  This may take a while...
  Found volume group "myvg" using metadata type lvm2
[root@localhost ~]# vgremove myvg               #移除卷组
  Volume group "myvg" successfully removed
[root@localhost ~]# pvscan                      #查看物理卷
  PV /dev/sdb1                      lvm2 [1.87 GiB]
  PV /dev/sdb2                      lvm2 [1.87 GiB]
  PV /dev/sdb3                      lvm2 [1.87 GiB]
  PV /dev/sdb4                      lvm2 [1.87 GiB]
  Total: 4 [7.48 GiB] / in use: 0 [0   ] / in no VG: 4 [7.48 GiB]
[root@localhost ~]# pvremove /dev/sdb{1,2,3,4}  #移除物理卷
  Labels on physical volume "/dev/sdb1" successfully wiped
  Labels on physical volume "/dev/sdb2" successfully wiped
  Labels on physical volume "/dev/sdb3" successfully wiped
  Labels on physical volume "/dev/sdb4" successfully wiped



十一、在lvm逻辑卷中常用的命令
pvcreate          --建物理分区建成pv
pvscan            --显示具有pv的磁盘
pvdisplay         --列出系统上的pv
pvremove          --删除pv属性
vgcreate          --创建vg命令
vgscan            --查找系统中是否有vg存在
vgdisplay         --目前系统vg的状态
vgextend          --在vg中增加pv
vgremove          --删除一个vg
vgchange          --设置vg是否启动
vgreduce          --在vg中删除pv
lvcreate          --创建lv
lvscan            --查询系统上的lv
lvdisplay         --显示系统上的lv状态
lvextend          --在lv中增加容量
lvreduce          --在lv中减少容量
lvremove          --删除lv
lvresize          --对lv的容量进行调整

练习

一、扩展逻辑卷
注意:没有风险。可以在线扩展无需卸载
	1、先扩展物理边界 lvextend -L [+]# /PATH/TO/LV 
	2、在扩展逻辑边界 resize2fs -p /PATH/TO/LV
二、缩减逻辑卷
注意:不能在线缩减,得先卸载;
       确保缩减后的空间大小依然能存储原有的所有数据;
	   在缩减之前应该先强行检查文件系统,以确保文件系统处于一致性状态。
	1、先缩减逻辑边界 resize2fs  /PATH/TO/LV 3G (缩减到3G)
	2、在缩减物理边界 lvreduce -L [-]# /PATH/TO/LV 
	3、重新挂在
	
	
三、快照卷
通过它能够访问某一时刻的数据
1、生命周期为整个数据时长,在这段时长内,数据的增长量不鞥产出快照卷大小;放弃所有操作,自我损毁;  建议跟原有数据大小一样
2、快照卷只读的
3、跟原卷在同一卷组内
lvcreate
	-s(指定为快照卷)
	-p r|w (指定权限)
lvcreate -L # -n SLV_NAME -p r /PATH/TO/LV

lvextend:扩展物理边界
	
	
resize2fs:扩展逻辑边界
	resize2fs /PATH/TO/LV 5G(扩展到多大)
	resize2fs -p /PATH/TO/LV (-p 能有多大扩展到多大)


[root@localhost ~]# pvcreate /dev/sdb{1,2,3}
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created
  Physical volume "/dev/sdb3" successfully created
[root@localhost ~]# vgcreate myvg /dev/sdb{1,2,3}
  Volume group "myvg" successfully created
[root@localhost ~]# lvcreate -n mydata -L 2G myvg
  Logical volume "mydata" created
[root@localhost ~]# mkfs.ext
mkfs.ext2     mkfs.ext3     mkfs.ext4     mkfs.ext4dev  
[root@localhost ~]# mkfs.ext4 /dev/myvg/mydata 
mke2fs 1.41.12 (17-May-2010)
文件系统标签=
操作系统:Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
131072 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376, 294912

正在写入inode表: 完成                            
Creating journal (16384 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

This filesystem will be automatically checked every 22 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override

[root@localhost ~]# mount /dev/myvg/mydata /mysql
[root@localhost ~]# cd /mysql/
[root@localhost mysql]# ls
lost+found
[root@localhost mysql]# cp /etc/inittab .
[root@localhost mysql]# ls
inittab  lost+found
[root@localhost mysql]# df -lh  #现在是2G,想把它扩展到5G
文件系统	      容量  已用  可用 已用%% 挂载点
/dev/sda3              38G  1.3G   35G   4% /
tmpfs                 495M     0  495M   0% /dev/shm
/dev/sda1             194M   26M  159M  14% /boot
/dev/mapper/myvg-mydata
                      2.0G   68M  1.9G   4% /mysql		


练习:一、扩展逻辑卷
把现在2G的逻辑卷扩展到5G
思考:想把逻辑卷从2G扩展到5G,首先你的卷组myvg的大小要大于5G,否则扩展没有意义;在线扩展不需要卸载,风险很小
1、查看卷组的大小为5.6G 可以
[root@localhost ~]# vgs
  VG   #PV #LV #SN Attr   VSize VFree
  myvg   3   1   0 wz--n- 5.60g 3.60g
2、查看逻辑卷磁盘大小,仍然是2G 大小没有变化
[root@localhost mysql]# df -lh
文件系统	      容量  已用  可用 已用%% 挂载点
/dev/sda3              38G  1.3G   35G   4% /
tmpfs                 495M     0  495M   0% /dev/shm
/dev/sda1             194M   26M  159M  14% /boot
/dev/mapper/myvg-mydata
                      2.0G   68M  1.9G   4% /mysql
[root@localhost mysql]# lvs
  LV     VG   Attr       LSize Pool Origin Data%  Move Log Cpy%Sync Convert
  mydata myvg -wi-ao---- 5.00g   
由以上可以得到答案,我们只扩展了物理边界没有扩展逻辑编辑,接下来就是扩展逻辑边界
3、扩展逻辑边界
[root@localhost mysql]# df -lh
文件系统	      容量  已用  可用 已用%% 挂载点
/dev/sda3              38G  1.3G   35G   4% /
tmpfs                 495M     0  495M   0% /dev/shm
/dev/sda1             194M   26M  159M  14% /boot
/dev/mapper/myvg-mydata
                      2.0G   68M  1.9G   4% /mysql
[root@localhost mysql]# resize2fs -p /dev/myvg/mydata  #参数-p 是指有多大边界扩展多大,不需要手动指定
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/myvg/mydata is mounted on /mysql; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/myvg/mydata to 1310720 (4k) blocks.
The filesystem on /dev/myvg/mydata is now 1310720 blocks long.

[root@localhost mysql]# df -lh  #扩展到5G没有问题
文件系统	      容量  已用  可用 已用%% 挂载点
/dev/sda3              38G  1.3G   35G   4% /
tmpfs                 495M     0  495M   0% /dev/shm
/dev/sda1             194M   26M  159M  14% /boot
/dev/mapper/myvg-mydata
                      5.0G   68M  4.7G   2% /mysql

练习:二、缩减逻辑卷
想把以上5G的逻辑卷缩减到3G
1、先检查逻辑卷使用的空间	68M
[root@localhost ~]# df -lh
文件系统	      容量  已用  可用 已用%% 挂载点
/dev/sda3              38G  1.3G   35G   4% /
tmpfs                 495M     0  495M   0% /dev/shm
/dev/sda1             194M   26M  159M  14% /boot
/dev/mapper/myvg-mydata
                      5.0G   68M  4.7G   2% /mysql

2、卸载并强行文件系统检测
[root@localhost ~]# umount /mysql/
[root@localhost ~]# mount
/dev/sda3 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)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
[root@localhost ~]# e2fsck -f /dev/myvg/mydata 
e2fsck 1.41.12 (17-May-2010)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录连接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/myvg/mydata: 12/327680 files (0.0% non-contiguous), 37983/1310720 blocks

3、缩减逻辑边界和物理边界
[root@localhost ~]# resize2fs /dev/myvg/mydata 3G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/myvg/mydata to 786432 (4k) blocks.
The filesystem on /dev/myvg/mydata is now 786432 blocks long.

[root@localhost ~]# lvreduce -L 3G /dev/myvg/mydata 
  WARNING: Reducing active logical volume to 3.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mydata? [y/n]: y 提示:有可能损坏数据 责任自负
  Reducing logical volume mydata to 3.00 GiB
  Logical volume mydata successfully resized
[root@localhost ~]# mount -a
[root@localhost ~]# mount
/dev/sda3 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)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/dev/mapper/myvg-mydata on /mysql type ext4 (rw)
[root@localhost ~]# df -lh
文件系统	      容量  已用  可用 已用%% 挂载点
/dev/sda3              38G  1.3G   35G   4% /
tmpfs                 495M     0  495M   0% /dev/shm
/dev/sda1             194M   26M  159M  14% /boot
/dev/mapper/myvg-mydata
                      3.0G   68M  2.8G   3% /mysql



练习:三、快照卷
[root@localhost ~]# lvcreate -L 50M -n mydata-snap -s -p r /dev/myvg/mydata 
  Rounding up size to full physical extent 52.00 MiB
  Logical volume "mydata-snmp" created
[root@localhost ~]# lvs
  LV          VG   Attr       LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  mydata      myvg owi-aos---  3.00g                                             
  mydata-snap myvg sri-a-s--- 52.00m      mydata   0.02                          
[root@localhost ~]# mount /dev/myvg/mydata-snap /mnt/
mount: block device /dev/mapper/myvg-mydata--snap is write-protected, mounting read-only
[root@localhost ~]# ll /mnt/
总用量 20
-rw-r--r-- 1 root root   884 8月  24 12:07 inittab
drwx------ 2 root root 16384 8月  24 12:04 lost+found
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# cat inittab |wc -l
26

接下来测试
首先在原卷中清空所有数据
[root@localhost ~]# cd /mysql/
[root@localhost mysql]# cat inittab |wc -l
26
[root@localhost mysql]# sed -i ‘N;$d;d‘ inittab 
[root@localhost mysql]# cat inittab |wc -l
0

然后再快照卷中查看
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# cat inittab |wc -l
26

结论:快照创建以后,所有原卷中的改变,不会影响快照中所访问数据的本身

这个时候对快照卷中的数据进行备份
[root@localhost ~]# tar jcf /root/inittab.tar.bz2 /mnt/inittab 
tar: 从成员名中删除开头的“/”
[root@localhost ~]# ll /root/
总用量 4
-rw-r--r-- 1 root root 619 8月  24 12:51 inittab.tar.bz2

快照卷数据备份之后就可以卸载快照卷,删除快照卷了
[root@localhost ~]# umount /mnt/
[root@localhost ~]# lvremove /dev/myvg/mydata-snap 
Do you really want to remove active logical volume mydata-snmp? [y/n]: y
  Logical volume "mydata-snap" successfully removed

结论:快照卷的生命周期就是用来做备份的,当做完备份,那么快照卷就没有意义了。


假设 不小心把原卷中的数据删除了,这个时候就可以利用备份快照中的数据就行恢复
[root@localhost ~]# cd /mysql/
[root@localhost mysql]# ls
inittab  lost+found
[root@localhost mysql]# rm -rf inittab 
[root@localhost mysql]# ls
lost+found
[root@localhost mysql]# tar xf /root/inittab.tar.bz2 -C .
[root@localhost mysql]# ls
lost+found  mnt
[root@localhost mysql]# ll mnt/
总用量 4
-rw-r--r-- 1 root root 884 8月  24 12:07 inittab
[root@localhost mysql]# cat mnt/inittab |wc -l
26


快速演示一遍
[root@localhost ~]# cd /mysql/
[root@localhost mysql]# cp /etc/inittab .
[root@localhost mysql]# cat inittab |wc -l
26
[root@localhost mysql]# cd
[root@localhost ~]# lvcreate -L 50M -s mydata-snap -p r /dev/myvg/mydata ^C
[root@localhost ~]# cd /mysql/
[root@localhost mysql]# cp /etc/issue .
[root@localhost mysql]# cat issue |wc -l
3
[root@localhost mysql]# cd
[root@localhost ~]# clear
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# lvcreate -s -L 50M -p r -n mydata-snap /dev/myvg/mydata 
  Rounding up size to full physical extent 52.00 MiB
  Logical volume "mydata-snap" created
[root@localhost ~]# mount /dev/myvg/mydata-snap /mnt/
mount: block device /dev/mapper/myvg-mydata--snap is write-protected, mounting read-only
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# ls
inittab  issue  lost+found
[root@localhost mnt]# tar jcf /root/mnt.tar.bz2 inittab issue 
[root@localhost mnt]# cd
[root@localhost ~]# ls
mnt.tar.bz2
[root@localhost ~]# umount /mnt/
[root@localhost ~]# lvremove /dev/myvg/mydata-snap 
Do you really want to remove active logical volume mydata-snap? [y/n]: y
  Logical volume "mydata-snap" successfully removed
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# cd /mysql/
[root@localhost mysql]# rm -rf inittab issue 
[root@localhost mysql]# ls
lost+found
[root@localhost mysql]# tar xf /root/mnt.tar.bz2 -C .
[root@localhost mysql]# ls
inittab  issue  lost+found

这篇博文纯属意外,本来今天晚上是学习hadoop生态系统的!谁知道半夜11点半的时候,外面却下起了小雨,导致宿舍的网上不去了!上不去网学习hadoop就没有戏了,我这人也是闲不下来,于是就想温习下lvm ;因为lvm在工作中也常常用到!比如   我们公司几乎用的都是云主机,本地数据盘也就200G左右,经常需要挂在存储,但是云主机的存储每次挂载最大的也就2T 一台云主机最多挂在4次,也就是8T的存储,为了便于管理这8T的存储,经常性需要将这8T的存储做成lvm便于管理,使其动态的增缩!


本文出自 “郑彦生” 博客,请务必保留此出处http://467754239.blog.51cto.com/4878013/1543956

深入剖解linux逻辑卷LVM