linux磁盘管理之LVM

                    LVM

 LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制,Linux用户安装Linux操作系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件因为受上层文件系统的限制,也不能跨越多个分区来存放,所以也不能同时放到别的磁盘上。而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号链接,或者使用调整分区大小的工具,但这只是暂时解决办法,没有从根本上解决问题。随着Linux的逻辑卷管理功能的出现,这些问题都迎刃而解,LVM的重点在于可以弹性调整文件系统的容量!LVM可以整合多个物理分区在一起,让这些分区看起来就想是一个磁盘一样,而且,还可以在将来其他的物理分区或将其从这个LVM管理的磁盘当中删除。

LVM的特性

   

    •允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小

    •允许在多个物理设备间重新组织文件系统

    •将设备指定为物理卷

    •用一个或者多个物理卷来创建一个卷组

    •物理卷是用固定大小的物理区域(Physical Extent,PE)来定义的

    •在物理卷上创建的逻辑卷是由物理区域(PE)组成

    •可以在逻辑卷上创建文件系统

    


LVM的组成结构

dm:device mapper :强一个或多个底层块设备组织成一个逻辑的模块

    注意:内核必须支持此模块,否则无法使用lvm功能

Physical Volume,PV,物理卷

    PV卷时LVM机制的基本存储设备,通常对应一个普通分区或整个硬盘,创建物理卷时,会在分区的头部创建一个保留区块,用于记录LVM属性,并把存储空间分割成默认大小为4MB的基本单元PE,从而构成物理卷。

    

pv管理工具:     

pvs [PhysicalVolume [PhysicalVolume…]]    简要pv信息显示

pvdisplay [PhysicalVolumePath…]         详细显示pv信息

pvcreate [PhysicalVolume…]            创建pv卷

pvscan DevicePath                    扫描所有磁盘上的物理卷

pvremove [PhysicalVolume] [PhysicalVolume…] 移除pv卷

    例如: pvremove /dev/DEVICE[N]  pvremove /dev/sdb1..


Volume,Group,VG,卷用户组

    所谓的LVM大磁盘就是将许多PV整合成这个VG,所以VG就是LVM组合起来的大磁盘。

     

vg管理工具:

  vgs [VolumeGroupName [VolumeGroupName…]]:简要的vg信息显示

  vgdisplay [VolumeGroupName…]:显示vg的详细信息

  vgcreate  [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath…] :创建vg组

   -s 指定PE大小

  vgreduce vgreduce VolumeGroupName [PhysicalVolumePath…] 从卷组中删除物理卷   

  vgextend VolumeGroupName  PhysicalDevicePath  [Physi-calDevicePath…] 向卷组中添加物理卷

  vgremove [VolumeGroup‐Name…]删除卷组

    vgremove VGNAME


Logic Volume ,LV,逻辑卷

    最终的VG还会被且成LV,这个LV就是最后可以被格式化使用的类似分区。

逻辑块(Logical Extent,LE)

逻辑卷LV也被划分为可被寻址的基本单位,称为LE。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

lv管理工具:

    lvs [VolumeGroupName]    简要lv信息

    lvdisplay [VolumeGroupName|LogicalVolume{Name|Path} …] 查看逻辑卷详细信息

    lvcreate -L #[mMgGtT] -n NAME VolumeGroup 创建逻辑卷

   lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME :扩展逻辑卷

    lvremove Logicname :删除逻辑卷

    例如:lvremove LVNAME    lvremove testlv 

   lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME  : [-]:减少多少,和减至多少

    resize2fs /dev/myvg/mylv

  缩减逻辑卷:

   umount /dev/VG_NAME/LV_NAME 必须先缩减

   e2fsck -f /dev/VG_NAME/LV_NAME 

   resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]

  


  示例

[root@Cloud ~]#lsblk #查看磁盘分区
NAME                MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                   8:0    0  200G  0 disk 
├─sda1                8:1    0  200M  0 part /boot
├─sda2                8:2    0   60G  0 part 
│ ├─vg0-root (dm-0) 253:0    0   20G  0 lvm  /
│ ├─vg0-swap (dm-1) 253:1    0    2G  0 lvm  [SWAP]
│ ├─vg0-usr (dm-2)  253:2    0   10G  0 lvm  /usr
│ └─vg0-var (dm-3)  253:3    0   20G  0 lvm  /var
└─sda3                8:3    0    1G  0 part 
sdb                   8:16   0   15G  0 disk 
sdc                   8:32   0   20G  0 disk 
sr0                  11:0    1  3.7G  0 rom

[root@Cloud ~]#fdisk /dev/sdb #给/dev/sdb分区
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): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1958, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1958, default 1958): +2G
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e#必须改成8e格式(LVM的标识符)
Changed system type of partition 1 to 8e (Linux LVM)

[root@Cloud ~]#fdisk -l |grep '/dev/[sh]d[a-z]' #创建的LVM卷分区
Disk /dev/sda: 214.7 GB, 214748364800 bytes
/dev/sda1   *           1          26      204800   83  Linux
/dev/sda2              26        7859    62914560   8e  Linux LVM
/dev/sda3            7859        7990     1059291   83  Linux
Disk /dev/sdb: 16.1 GB, 16106127360 bytes
/dev/sdb1               1         262     2104483+  8e  Linux LVM
/dev/sdb2             263         524     2104515   8e  Linux LVM
/dev/sdb3             525         786     2104515   8e  Linux LVM
Disk /dev/sdc: 21.5 GB, 21474836480 bytes
/dev/sdc1               1         262     2104483+  8e  Linux LVM
/dev/sdc2             263         524     2104515   8e  Linux LVM
/dev/sdc3             525         786     2104515   8e  Linux LVM

 

[root@Cloud ~]#pvcreate /dev/sdb{1,2,3} /dev/sdc{1,2,3} #创建pv卷
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created
  Physical volume "/dev/sdb3" successfully created
  Physical volume "/dev/sdc1" successfully created
  Physical volume "/dev/sdc2" successfully created
  Physical volume "/dev/sdc3" successfully created
[root@Cloud ~]#pvs #简要显示
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sda2  vg0  lvm2 a--u 59.99g 7.99g
  /dev/sdb1       lvm2 ----  2.01g 2.01g
  /dev/sdb2       lvm2 ----  2.01g 2.01g
  /dev/sdb3       lvm2 ----  2.01g 2.01g
  /dev/sdc1       lvm2 ----  2.01g 2.01g
  /dev/sdc2       lvm2 ----  2.01g 2.01g
  /dev/sdc3       lvm2 ----  2.01g 2.01g
[root@Cloud ~]#pvscan  #扫描pv卷
  PV /dev/sda2   VG vg0             lvm2 [59.99 GiB / 7.99 GiB free]
  PV /dev/sdb1                      lvm2 [2.01 GiB]
  PV /dev/sdb2                      lvm2 [2.01 GiB]
  PV /dev/sdb3                      lvm2 [2.01 GiB]
  PV /dev/sdc1                      lvm2 [2.01 GiB]
  PV /dev/sdc2                      lvm2 [2.01 GiB]
  PV /dev/sdc3                      lvm2 [2.01 GiB]
  Total: 7 [72.03 GiB] / in use: 1 [59.99 GiB] / in no VG: 6 [12.04 GiB]
[root@Cloud ~]#pvdisplay /dev/sdb1 #显示pv详细信息 ,,也可以选择多个pv卷
  "/dev/sdb1" is a new physical volume of "2.01 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1 #卷名
  VG Name               
  PV Size               2.01 GiB #pv卷大小
  Allocatable           NO
  PE Size               0   #尚未分配PE大小
  Total PE              0
  Free PE               0 
  Allocated PE          0
  PV UUID               Oa62B4-4jmr-CZ34-Xx9t-aXeE-2Xwr-2uaQ0o
由于PE是在创建VG时才给予的参数,因此在这里看的pv里面的PE都会时0

[root@Cloud ~]#vgcreate -s 16M VGone /dev/sdb{1,2,3} #创建VG组为VGone PE为16M
  Volume group "VGone" successfully created
[root@Cloud ~]#vgs #简要显示
  VG    #PV #LV #SN Attr   VSize  VFree
  VGone   3   0   0 wz--n-  6.00g 6.00g
  vg0     1   4   0 wz--n- 59.99g 7.99g
[root@Cloud ~]#vgscan #扫描查看
  Reading all physical volumes.  This may take a while...
  Found volume group "VGone" using metadata type lvm2
  Found volume group "vg0" using metadata type lvm2
[root@Cloud ~]#vgdisplay VGone #详细显示vg组VGone信息
  --- Volume group ---
  VG Name               VGone #VG名
  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               6.00 GiB #VG整体大小
  PE Size               16.00 MiB #PE大小
  Total PE              384
  Alloc PE / Size       0 / 0   
  Free  PE / Size       384 / 6.00 GiB
  VG UUID               Iv022h-Gayu-nOBU-HTZg-dXjm-MPCW-2ytSLe

[root@Cloud ~]#vgreduce VGone /dev/sdb1 #删除VGone中的/dev/sdb1
  Removed "/dev/sdb1" from volume group "VGone"
[root@Cloud ~]#vgdisplay VGone #显示VGone信息
  --- Volume group ---
  VG Name               VGone
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  2
  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               4.00 GiB #少了2G了 
  PE Size               16.00 MiB
  Total PE              256
  Alloc PE / Size       0 / 0   
  Free  PE / Size       256 / 4.00 GiB
  VG UUID               ZJzg4M-W3OM-MDFc-ldww-Xgku-13Jj-GPse8n
注:缩减时注意,如果组中有数据,空间必须要比VG中的文件要大,不然容易导出数据丢失或不完整!!!


[root@Cloud ~]#vgextend VGone /dev/sdb1 #拓展VGone大小
  Volume group "VGone" successfully extended
[root@Cloud ~]#vgdisplay VGone |grep ' VG Size'
  VG Size               6.00 GiB #显示增加为6G

[root@Cloud ~]#lvcreate -L 4G -n log1  /dev/VGone 创建/dev/VGone下为log1的逻辑卷
  Logical volume "log1" created.
[root@Cloud ~]#lvs #简要显示lv卷
  LV   VG    Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  log1 VGone -wi-a-----  4.00g                                                    
  root vg0   -wi-ao---- 20.00g                                                    
  swap vg0   -wi-ao----  2.00g                                                    
  usr  vg0   -wi-ao---- 10.00g                                                    
  var  vg0   -wi-ao---- 20.00g                                                    
[root@Cloud ~]#lvscan #扫描lv卷
  ACTIVE            '/dev/VGone/log1' [4.00 GiB] inherit
  ACTIVE            '/dev/vg0/root' [20.00 GiB] inherit
  ACTIVE            '/dev/vg0/swap' [2.00 GiB] inherit
  ACTIVE            '/dev/vg0/usr' [10.00 GiB] inherit
  ACTIVE            '/dev/vg0/var' [20.00 GiB] inherit
[root@Cloud ~]#lvdisplay /dev/VGone/log1 #详细显示lv卷
  --- Logical volume ---
  LV Path                /dev/VGone/log1
  LV Name                log1
  VG Name                VGone
  LV UUID                ACCmAR-Iu9k-IWk4-CGPS-rk7V-BwU7-otfOD0
  LV Write Access        read/write
  LV Creation host, time Cloud.GO, 2016-09-08 22:40:28 +0800
  LV Status              available
  # open                 0
  LV Size                4.00 GiB #lv总大小
  Current LE             256
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:4

  

[root@Cloud ~]#lvextend -L +1G /dev/VGone/log1  #加1G的lv卷
  Size of logical volume VGone/log1 changed from 4.00 GiB (256 extents) to 5.00 GiB (320 extents).
  Logical volume log1 successfully resized.
[root@Cloud ~]#lvdisplay /dev/VGone/log1 |grep 'LV Size'
  LV Size                5.00 GiB #增加了1G 
[root@Cloud ~]#resize2fs /dev/VGone/log1 #重设lv大小
resize2fs 1.41.12 (17-May-2010)
resize2fs: Bad magic number in super-block while trying to open /dev/VGone/log1
Couldn't find valid filesystem superblock.

注意:如果lv卷已经挂载,那么必须先卸载再检查才能缩减。有数据必须指定为比存储的数据空间大!

缩减逻辑卷:

umount /dev/VG_NAME/LV_NAME 必须先缩减

e2fsck -f /dev/VG_NAME/LV_NAME 

resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]

lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME  : [-]:减少多少,和减至多少

[root@Cloud ~]#lvreduce -L 2G /dev/VGone/log1 #压缩lv卷至2G
  WARNING: Reducing active logical volume to 2.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce VGone/log1? [y/n]: y #交互式
  Size of logical volume VGone/log1 changed from 5.00 GiB (320 extents) to 2.00 GiB (128 extents).
  Logical volume log1 successfully resized.
[root@Cloud ~]#lvdisplay /dev/VGone/log1 |grep 'LV Size' #显示大小
  LV Size                2.00 GiB


  

快照:snapshot

    就是将当时的系统信息记录下来,就好像照相机记录一般。将来若有任何数据改动了,则原始数据会被移到快照去,没有被改动的区域则由快照区与文件系统共享。

  lvcreate -L # [mMgGtT] -p -r -s -n snapshot_lv_name original_lv_name  创建快照

    

-s 指定是快照卷

-n 指定卷名字

-p r 指定只读

  lvcreate -s -L 512M -n mylv-snap -p r /dev/myvg/mylv

    创建快照

  mount /dev/myvg/mylv-snap /mnt

    挂载快照

  umount /mnt 

    卸载快照

[root@Cloud /snap]#mount /dev/VGone/log1 /media/ #挂载LV卷
[root@Cloud /media]#cp /etc/fstab /etc/issue ./ #复制文件到lv卷中
[root@Cloud /media]#ls
fstab  issue  lost+found
[root@Cloud /]#lvcreate -s -L 512M -n my-lv-snap  -p r /dev/VGone/log1 #创建快照
  Logical volume "my-lv-snap" created.
[root@Cloud /]#mount /dev/VGone/my-lv-snap /mnt/ #挂载快照
mount: block device /dev/mapper/VGone-my--lv--snap is write-protected, mounting read-only
[root@Cloud /]#ll /mnt/ #查看快照的内容
total 24
-rw-r--r-- 1 root root   921 Sep  8 23:21 fstab
-rw-r--r-- 1 root root   103 Sep  8 23:21 issue
drwx------ 2 root root 16384 Sep  8 23:12 lost+found
[root@Cloud /]#umount /mnt  #卸载
[root@Cloud /]#lvremove /dev/VGone/ #卸载快照
/dev/VGone/log1        /dev/VGone/my-lv-snap  
[root@Cloud /]#lvremove /dev/VGone/my-lv-snap 
Do you really want to remove active logical volume my-lv-snap? [y/n]: yes
  Logical volume "my-lv-snap" successfully removed

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

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code