首页 > 代码库 > 磁盘管理之逻辑卷(转载)

磁盘管理之逻辑卷(转载)

写在前面:

        本文一共分个部分来讲解逻辑卷的一些操作及注意事项,其中第一部分介绍了什么是逻辑卷,逻辑卷的实现原理是什么,还有包括其中的一些名词解释;第二部分主 要是介绍怎么创建,删除,和增加物理卷(PV);第三部分是介绍怎么创建,删除,扩展,缩减卷组;第四部分主要是介绍逻辑卷的一些操作,其中包括逻辑卷的 创建,删除,挂载,在线扩容,缩减。第五部分是介绍关于LVM的快照功能及实现。实验操作是在centos6.8操作系统上完成,如有补充,或建议请尽情 的揉虐我的留言区。

 

 

 

 

一、逻辑卷介绍及名词解释

 

    逻辑卷是一种通过软件来组织一个或多个底层硬件为一个抽象的逻辑设备的一种逻辑方案。通过将一个或多个磁盘分区整合成一个整块的卷组,形成一个存储池子,通过在卷组上创建逻辑卷组,并进一步在逻辑卷组上创建文件系统,可以方便的来调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名,管理,分配!与直接使用物理存储相比较,在管理上逻辑卷提供了更好的灵活性,不会受限于物理磁盘的大小。

拿一个容易理解的例子来比较,就像你现在有两个橙子,有三个小朋友都想吃这个橙子,但是因为三个小朋友的年龄阶段都不一样,其中年龄最大的一个小朋友一次就能吃差不多一个橙子的三分之二,其他两个小朋友年龄比较小,不能确定吃多少,这个时候你怎么将这两个橙子均匀的分配出去?

其实可以将这两个橙子切成多个块,让他们然后装在盘子里面然他们自己能吃多少就去拿。

而逻辑卷也正是这样一种类似的方法,将一些零碎的磁盘进行分区合并成一个或多个大的磁盘(卷组),然后根据需求将这个磁盘划分出去,最值得一提的是这些小分区(逻辑卷)是支持动态扩容和缩小的。

下面是我画的一个PV VG LV 之间的一个关系图

技术分享

上面我们用一个小孩子吃橙子的例子,相信差不多读者对LVM能够有一个比较清晰理解,下面我们一起来了解一下要学习LVM就必须要知道的术语

 

PV  类似于磁盘分区具有有同样功能的设备,是LVM基本的存储逻辑快,但是和基本的物理存储不同的是包含有自己与LVM相关的参数。

   物理卷是LVM最底层的概念,是LVM逻辑存储块,物理卷与磁盘分区是一个逻辑对应关系,打个比方 小孩子玩的圆形积木在没有附加工具是不能固定组合的,但是方形却有组合功能,我们可以假设普通分区就是一个圆形,而物理卷就是一个方形,LVM提供了命令工具可以将分区装换为物理卷可以生成卷组。

 

VG 类似于非逻辑卷系统中的物理磁盘,由一个或多个物理卷(PV)组成,可以创建一个或多个卷组。

 

LV 相当于磁盘分区,逻辑卷建立在卷组之上,在逻辑卷之上可以建立文件系统。可在线扩展或缩小逻辑卷大小。

 

物理块 PE 在基本数据存储最小的单位是block(块儿)不过在LVM中数据最小的存储单位是PE与block功能一样!(每一个物理卷PV被划分成PE基本单元,唯一的编号的PE是可以被LVM选址的最小单元,PE大小是可以配置的默认是4M,物理卷的组成是由等同大小的PE组成。)

 

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

 

逻辑卷创建一个三个步骤!初始化物理卷,创建VG组,创建LV,下面我们就这三个步骤通过实验的方式来具体了解一下

 

二、PV管理

 

磁盘分区

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#创建磁盘分区sda6,并更改其分区类型为8e(LVM逻辑卷分区类型ID)
Command (m for help): p
 
Disk /dev/sda: 107.4 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 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: 0x0005d6ee
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1        5100    40960000   83  Linux
/dev/sda2            5100        6375    10240000   83  Linux
/dev/sda3            6375        7650    10240000   83  Linux
/dev/sda4            7650       13055    43416576    5  Extended
/dev/sda5            7650        7905     2048000   82  Linux swap / Solaris
/dev/sda6            7905        9210    10488221+  8e  Linux LVM
#将其保存退出查看其状态是否被加载到内存
[root@centos6 ~]# lsblk 
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0     11:0    1  3.7G  0 rom  /media/CentOS_6.8_Final
sda      8:0    0  100G  0 disk 
├─sda1   8:1    0 39.1G  0 part /boot
├─sda2   8:2    0  9.8G  0 part /
├─sda3   8:3    0  9.8G  0 part /testdir
├─sda4   8:4    0    1K  0 part 
├─sda5   8:5    0    2G  0 part [SWAP]
└─sda6   8:6    0   10G  0 part 
sdb      8:16   0   20G  0 disk 
└─sdb1   8:17   0   20G  0 part 
sdc      8:32   0   20G  0 disk 
└─sdc1   8:33   0   20G  0 part 
sdd      8:48   0   20G  0 disk 
sde      8:64   0   20G  0 disk 
#在这里我在sda上分了一个sda6分区,分区大小为10G ;在sdb、sdc上分别创建了一个分区为sdb1,sdc1,
分区大小各为20G,这里就不一一展示出来了。
#有关磁盘创建的方法请参考博文:http://snowbamboo1.blog.51cto.com/9291858/1842290

创建、删除、查看物理卷

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#创建PV,使用 pvcreate 后面可以跟上多个参数
[root@centos6 ~]# pvcreate /dev/sda6 /dev/sdb1 /dev/sdc1 
  Physical volume "/dev/sda6" successfully created
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdc1" successfully created
#列出已存在的物理卷
  [root@centos6 ~]# pvscan 
  PV /dev/sda6                      lvm2 [10.00 GiB]
  PV /dev/sdb1                      lvm2 [19.99 GiB]
  PV /dev/sdc1                      lvm2 [19.99 GiB]
  Total: 3 [49.99 GiB] / in use: 0 [0   ] / in no VG: 3 [49.9 GiB]
#还可以使用pvdisplay查看每个pv存在的状态
[root@centos6 ~]# pvdisplay 
  "/dev/sda6" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sda6
  VG Name               
  PV Size               10.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               NvX7sh-h1O9-twG9-HFsM-WfuJ-9iLa-lYWls0
    
  "/dev/sdb1" is a new physical volume of "19.99 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               19.99 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               hkMNjQ-cZwO-HAW4-xCNx-V0eC-iPiU-NuCaDQ
    
  "/dev/sdc1" is a new physical volume of "19.99 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc1
  VG Name               
  PV Size               19.99 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               KbVLO6-oFl2-pqN6-5u7a-q0Yb-e9qI-Yx6drd
#删除物理卷
[root@centos6 ~]# pvscan 
  PV /dev/sda6                      lvm2 [10.00 GiB]
  PV /dev/sdb1                      lvm2 [19.99 GiB]
  PV /dev/sdc1                      lvm2 [19.99 GiB]
  Total: 3 [49.99 GiB] / in use: 0 [0   ] / in no VG: 3 [49.99 GiB]
 
  [root@centos6 ~]# pvremove /dev/sdb1
  Labels on physical volume "/dev/sdb1" successfully wiped
 
[root@centos6 ~]# pvscan 
  PV /dev/sda6                      lvm2 [10.00 GiB]
  PV /dev/sdc1                      lvm2 [19.99 GiB]
  Total: 2 [30.00 GiB] / in use: 0 [0   ] / in no VG: 2 [30.00 GiB]

 

物理卷相关管理命令如下

1
2
3
4
pvcreate:将物理硬盘分区初始化为物理卷
pvdisplay:显示目前系统上存在的PV状态
pvremove:删除指定的一个存在的物理卷
pvscan:扫描系统中所有硬盘,列出已存在的物理卷列表

 

 

三、VG管理

 

我们先看看VG有哪些管理命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
vgdisplay:显示VG巻组属性
  
vgscan:查找系统现有VG巻组 
 
vgcreate:创建VG巻组(在VG上初始化VGDA)
   -l:卷组上允许创建的最大逻辑卷数; 
   -p:卷组中允许添加的最大物理卷数; 
   -s:卷组上的物理卷的PE大小
    
vgchange:改变VG巻组属性
   -a:,--available{y|n}:在操作VG时,控制一个VG的可使用性,换句话说控制一个VG能否被系统内核识
  别。 
  -x,--allocation{y|n}:控制一个VG能否被扩充或者缩减(控制一个VG内的PV能否被分配)。 
vgextend:用于向VG中添加新的PV
 
vgmerge:用于合并巻组。待合并的VG必须处于非活动状态。
  
vgsplit:用于拆分已经存在的VG,VG必须处于活动状态。
 
vgremove:用于删除VG,要求待删除的VG必须处于非激活状态。
 
vgrename:用于重命名VG,不要求VG处于非激活状态。
vgreduce: 命令用于通过删除LVM卷组中的物理卷来减少卷组容量,但是不能删除LVM卷组中剩余的最后一
个物理卷

创建VG

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@centos6 ~]# vgcreate vg1 /dev/sda6 
  Volume group "vg1" successfully created
[root@centos6 ~]# pvs
  PV         VG   Fmt  Attr PSize  PFree 
  /dev/sda6  vg1  lvm2 a--u 10.00g 10.00g
[root@centos6 ~]# pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sda6
  VG Name               vg1
  PV Size               10.00 GiB / not usable 2.40 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              2560
  Free PE               2560
  Allocated PE          0
  PV UUID               9qkx4V-kfIT-eJ1x-2WMZ-qNzf-2KL7-FTyaWk

VG添加PV

1
2
3
4
5
6
7
#将分区sdb1、sdc1加入卷组vg1,后面可以跟上多个参数(pv卷)
[root@centos6 ~]# vgextend vg1 /dev/sdb1 /dev/sdc1
  Physical volume "/dev/sdb1" successfully created
  Volume group "vg1" successfully extended
[root@centos6 ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  vg1    3   0   0 wz--n- 49.98g 49.98g

VC删除PV

1
2
3
4
5
6
7
8
9
10
[root@centos6 ~]# vgreduce vg1 /dev/sdc1
  Removed "/dev/sdc1" from volume group "vg1"
[root@centos6 ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  vg1    2   0   0 wz--n- 29.99g 29.99g
[root@centos6 ~]# pvscan
  PV /dev/sda6   VG vg1             lvm2 [10.00 GiB / 10.00 GiB free]
  PV /dev/sdb1   VG vg1             lvm2 [19.99 GiB / 19.99 GiB free]
  PV /dev/sdc1                      lvm2 [19.99 GiB]
  Total: 3 [49.99 GiB] / in use: 2 [29.99 GiB] / in no VG: 1 [19.99 GiB]

重命名VG名

1
2
3
4
5
[root@centos6 ~]# vgrename vg1 vg0
  Volume group "vg1" successfully renamed to "vg0"
[root@centos6 ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  vg0    3   0   0 wz--n- 49.98g 49.98g

ps:可以创建多个逻辑卷组,在删除物理卷来调节逻辑卷的缩减的时候要注意最后一个物理卷是不能删除的。

 

四、LV管理

LV管理命令如下

1
2
3
4
5
6
7
8
lvdisplay:显示LV的属性 
lvscan:查找系统现有LV
lvcreate:创建LV
lvdata:显示LV上的LVDA信息 
lvchange:改变LV属性
lvextend:添加容量
lvreduce:减少容量
lvresize:容量大小调整

创建LV-选项

1
2
3
4
5
lvcreate(选项) 卷组名|路径 逻辑卷路径
#选项:
-L 直接指定逻辑卷容量大小 单位可以是“kKmMgGtT”字节 +-l  指定多少个卷组中的PE创建逻
辑卷。(PE容量在创建卷组的时候就已经指定)
-n 指定逻辑卷 新建逻辑卷时需要使用-n选项

创建LV-实例

1
2
3
4
5
6
7
8
[root@centos6 ~]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  vg0    3   0   0 wz--n- 49.98g 49.98g
[root@centos6 ~]# lvs
[root@centos6 ~]# lvcreate -L 10G -n lv1 vg0
  Logical volume "lv1" created.
[root@centos6 ~]# lvscan 
  ACTIVE            ‘/dev/vg0/lv1‘ [10.00 GiB] inherit

到目前为止逻辑卷创建的基本步骤就已经完成了,接下来我们给这个逻辑卷一个文件系统并挂载到目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#赋予文件系统
[root@centos6 ~]# mkfs.ext4 /dev/vg0/lv1 
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
655360 inodes, 2621440 blocks
131072 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2684354560
80 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, 1605632
 
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
 
This filesystem will be automatically checked every 23 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
#挂载,这里采用的是临时挂载,一旦系统重启将会失效,所以建议挂载将其写进挂载文件/etc/fstab
#写进挂载文件格式为:
#/dev/vg0/lv1        /mysqlcache                         ext4  defaults     0 0  
 
[root@centos6 ~]# mkdir /mysqlcache
[root@centos6 ~]# mount /dev/vg0/lv1 /mysqlcache/
[root@centos6 ~]# mount |grep mysqlcache
/dev/mapper/vg0-lv1 on /mysqlcache type ext4 (rw)
/dev/mapper/vg0-lv1 on /mysqlcache type ext4 (rw)
[root@centos6 ~]
[root@centos6 ~]# df -hT
Filesystem          Type     Size  Used Avail Use% Mounted on
/dev/sda2           ext4     9.5G  4.2G  4.9G  46% /
tmpfs               tmpfs    491M   76K  491M   1% /dev/shm
/dev/sda1           ext4      39G   80M   37G   1% /boot
/dev/sda3           ext4     9.5G   22M  9.0G   1% /testdir
/dev/sr0            iso9660  3.7G  3.7G     0 100% /media/CentOS_6.8_Final
/dev/mapper/vg0-lv1 ext4     9.8G   23M  9.2G   1% /mysqlcache

我们在生产环境中可能会碰到某个目录专门来存放一些实时性的数据,而且数据又不能删除,当数据到达一定的量,存储空间不够时,这个时候怎么办?那么逻辑卷的优点就凸显出来了,逻辑卷支持在线扩容,不影响数据的完整性。 

 

下面来看看逻辑卷的最值得一提的功能在线扩容和缩减(注意缩减必须要umount,所以不属于在线缩减)

在线扩容

 

在这里写了一个较大的文件来模拟这个挂载点的存储空间快要用尽,需要进行扩容,我们先扩容10个G,扩容的时候要注意,卷组一

定要还有空间,如果没有先扩容卷组

1
2
3
4
5
6
7
8
[root@centos6 mysqlcache]# df -hT|grep mysqlcache
/dev/mapper/vg0-lv1 ext4     9.8G  7.9G  1.4G  86% /mysqlcache
 
[root@centos6 mysqlcache]# ll -h
total 7.9G
-rw-r--r--.   1 root root 7.9G Jul 28 09:46 20160831.file
drwxr-xr-x. 123 root root  12K Jul 28 09:42 etc
drwx------.   2 root root  16K Jul 28 08:29 lost+found

在线扩容一共两个步骤

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#  第一步是扩展物理边界 
[root@centos6 mysqlcache]# lvextend -L  +10G /dev/vg0/lv1 
  Size of logical volume vg0/lv1 changed from 10.00 GiB (2560 extents) to 20.00 GiB (5120 extents).
  Logical volume lv1 successfully resized.
 # 第二步是扩展逻辑边界
[root@centos6 mysqlcache]# resize2fs -p /dev/vg0/lv1 
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/vg0/lv1 is mounted on /mysqlcache; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 2
Performing an on-line resize of /dev/vg0/lv1 to 5242880 (4k) blocks.
The filesystem on /dev/vg0/lv1 is now 5242880 blocks long.
 
[root@centos6 mysqlcache]# df -hT |grep mysqlcache
/dev/mapper/vg0-lv1 ext4      20G  7.9G   11G  43% /mysqlcache

ps:在上面我们看到扩容的时候是在当前基础上再扩容扩大多少空间,使用的是 “+多大的空间”,

我们还可以直接指定空间直接扩容到多大,下面我们看看是怎么做的吧

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#同样第一步还是扩展物理边界,只是在这里我直接指定将当前空间扩容至多大
[root@centos6 mysqlcache]# lvextend -L 21G /dev/vg0/lv1 
  Size of logical volume vg0/lv1 changed from 20.00 GiB (5120 extents) to 21.00 GiB (5376 extents).
  Logical volume lv1 successfully resized.
#扩展逻辑边界
 [root@centos6 mysqlcache]# resize2fs -p /dev/vg0/lv1 
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/vg0/lv1 is mounted on /mysqlcache; on-line resizing required
old desc_blocks = 2, new_desc_blocks = 2
Performing an on-line resize of /dev/vg0/lv1 to 5505024 (4k) blocks.
The filesystem on /dev/vg0/lv1 is now 5505024 blocks long.
 
[root@centos6 mysqlcache]# df -hT
Filesystem          Type     Size  Used Avail Use% Mounted on
/dev/sda2           ext4     9.5G  4.2G  4.9G  46% /
tmpfs               tmpfs    491M   76K  491M   1% /dev/shm
/dev/sda1           ext4      39G   80M   37G   1% /boot
/dev/sda3           ext4     9.5G   22M  9.0G   1% /testdir
/dev/sr0            iso9660  3.7G  3.7G     0 100% /media/CentOS_6.8_Final
/dev/mapper/vg0-lv1 ext4      21G  7.9G   12G  41% /mysqlcache
[root@centos6 mysqlcache]#

当我们目前想要将所有vg空间都扩容至逻辑卷,可以使用百分比扩展至空间的大小,使用扩容的命令加上 -r  -l 选项,具体语法如下

1
lvextend -r -l +100%FREE 逻辑卷路径

我又添加了一分区到卷组中,大小为20G 到目前为止卷组大概差不多70G

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@centos6 mysqlcache]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree 
  vg0    4   1   0 wz--n- 69.98g 19.99g
 
[root@centos6 mysqlcache]# lvextend -r -l +100%FREE /dev/vg0/lv1 
  Size of logical volume vg0/lv1 changed from 49.98 GiB (12796 extents) to 69.98 GiB (17914 extents).
  Logical volume lv1 successfully resized.
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/vg0-lv1 is mounted on /mysqlcache; on-line resizing required
old desc_blocks = 4, new_desc_blocks = 5
Performing an on-line resize of /dev/mapper/vg0-lv1 to 18343936 (4k) blocks.
The filesystem on /dev/mapper/vg0-lv1 is now 18343936 blocks long.
 
[root@centos6 mysqlcache]# df -hT
Filesystem          Type     Size  Used Avail Use% Mounted on
/dev/sda2           ext4     9.5G  4.2G  4.9G  46% /
tmpfs               tmpfs    491M   76K  491M   1% /dev/shm
/dev/sda1           ext4      39G   80M   37G   1% /boot
/dev/sda3           ext4     9.5G   22M  9.0G   1% /testdir
/dev/sr0            iso9660  3.7G  3.7G     0 100% /media/CentOS_6.8_Final
/dev/mapper/vg0-lv1 ext4      69G  7.9G   58G  13% /mysqlcache
 
[root@centos6 mysqlcache]# vgs
  VG   #PV #LV #SN Attr   VSize  VFree
  vg0    4   1   0 wz--n- 69.98g    0 
  #我们这里看到vg空间已近全划分出去

 

在线缩减

当我们这个目录不在需要这么大的空间的时候,就需要将空间释放一些出来到卷组,供其他有需要的使用,下面来缩减一下空间,这里需要注意的是逻辑卷是不能支持在线缩减的,所以在使用缩减的时候一定确认清楚缩小的空间是否大于现在已近占用的空间,而且缩减的步骤一定要按照顺序进行缩减,错了一个步骤都会失败。

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[root@centos6 /]# umount /mysqlcache/
#第一步将挂载点卸载
[root@centos6 /]# e2fsck -f /dev/vg0/lv1 
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/vg0/lv1: 2530/4587520 files (0.1% non-contiguous), 2387412/18343936 blocks
#第二部强制检测此逻辑卷的文件系统
[root@centos6 /]# resize2fs /dev/vg0/lv1 5G
resize2fs 1.41.12 (17-May-2010)
resize2fs: New size smaller than minimum (2178747)
#第三步缩减逻辑边界
[root@centos6 /]# lvreduce -L 5G /dev/vg0/lv1 
  WARNING: Reducing active logical volume to 5.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg0/lv1? [y/n]: y
  Size of logical volume vg0/lv1 changed from 69.98 GiB (17914 extents) to 5.00 GiB (1280 extents).
  Logical volume lv1 successfully resized.
  #第四部缩减物理边界
[root@centos6 /]# lvs
  LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv1  vg0  -wi-a----- 5.00g
  #到这里貌似已近缩减成功那我们再将其挂起在到挂载点试试
  [root@centos6 /]# mount /dev/vg0/lv1 /mysqlcache/
mount: wrong fs type, bad option, bad superblock on /dev/mapper/vg0-lv1,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so  
   #挂载失败

ps:为什么会挂载失败,它提示超级块被损坏,什么原因,我们在缩减之前要注意哪些的事项,我们缩减步骤没有错,错在缩减之前没有查看挂载点的目录在缩减之前已近占用了7.9G的空间,就是说,我们这里面有7.9G的文件还存在,而我们缩减的大小至5G,明显会损害文件,导致文件系统错误。解决办法就只能重新删除逻辑卷后再创建挂载了,文件肯定找不回来了。

 

五、快照

 

   快照功能是将当前系统数据记录下来,在未来有所变动,便将会将变更之前的数据存放在快照区域进行保存,快照区有两部分组成,变更之前的数据和变更之后的数据。因为快照区与原本的LV共享很多PE,因此快照区与被快照区的LV必须在同一个VG上。

        下面我们通过实例来演示快照的创建及其其他一些特点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#实验场景:系统centos6.8
[root@centos6 ~]# df -hT
Filesystem          Type     Size  Used Avail Use% Mounted on
/dev/sda2           ext4     9.5G  4.2G  4.9G  46% /
tmpfs               tmpfs    491M   76K  491M   1% /dev/shm
/dev/sda1           ext4      39G   80M   37G   1% /boot
/dev/sda3           ext4     9.5G   22M  9.0G   1% /testdir
/dev/sr0            iso9660  3.7G  3.7G     0 100% /media/CentOS_6.8_Final
/dev/mapper/vg0-lv1 ext4     9.8G   23M  9.2G   1% /mnt/lv1
#我现在需要将逻辑卷lv1做快照
   
[root@centos6 ~]# ll /mnt/lv1
total 28
-rw-r--r--. 1 root root   982 Jul 28 11:50 1.txt
-rw-r--r--. 1 root root  1669 Jul 28 11:50 2.txt
-rw-r--r--. 1 root root    47 Jul 28 11:51 3.txt
drwx------. 2 root root 16384 Jul 28 11:49 lost+found
#lv1逻辑卷挂载点下有三个文件
 
 
 
[root@centos6 ~]# lvcreate -s -n lv1_snap -L 10G -p r /dev/vg0/lv1 
  Logical volume "lv1_snap" created.
#创建快照逻辑卷
   
  [root@centos6 ~]# mount /dev/vg0/lv1_snap /mnt/lv1_snap/
mount: block device /dev/mapper/vg0-lv1_snap is write-protected, mounting read-only
#挂载快照逻辑卷
 
[root@centos6 ~]# ll /mnt/lv1_snap/
total 28
-rw-r--r--. 1 root root   982 Jul 28 11:50 1.txt
-rw-r--r--. 1 root root  1669 Jul 28 11:50 2.txt
-rw-r--r--. 1 root root    47 Jul 28 11:51 3.txt
drwx------. 2 root root 16384 Jul 28 11:49 lost+found
  #挂载后可以看到lv1下的几个文件被同步过来

现在我来测试一下快照是否能够将我修改的原逻辑卷的文件保存下来

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[root@centos6 ~]# cd /mnt/lv1
[root@centos6 lv1]# ls
1.txt  2.txt  3.txt  lost+found
[root@centos6 lv1]# rm -fr 1.txt 
#删除一个文件测试
[root@centos6 lv1]# ll
total 24
-rw-r--r--. 1 root root  1669 Jul 28 11:50 2.txt
-rw-r--r--. 1 root root    47 Jul 28 11:51 3.txt
drwx------. 2 root root 16384 Jul 28 11:49 lost+found
[root@centos6 lv1]# ll /mnt/lv1_snap/
total 28
-rw-r--r--. 1 root root   982 Jul 28 11:50 1.txt
-rw-r--r--. 1 root root  1669 Jul 28 11:50 2.txt
-rw-r--r--. 1 root root    47 Jul 28 11:51 3.txt
drwx------. 2 root root 16384 Jul 28 11:49 lost+found
 
#给2.txt内添加内容
[root@centos6 lv1]# dd if=/dev/zero of=/mnt/lv1/2.txt bs=10M count=1
1+0 records in
1+0 records out
10485760 bytes (10 MB) copied, 0.0653043 s, 161 MB/s
[root@centos6 lv1]# ll -h 
total 11M
-rw-r--r--. 1 root root 10M Jul 28 12:04 2.txt
-rw-r--r--. 1 root root  47 Jul 28 11:51 3.txt
drwx------. 2 root root 16K Jul 28 11:49 lost+found
#逻辑卷内文件2.txt向文件内添加了10M的内容,我们来看看快照是否更新
[root@centos6 lv1]# ll -h /mnt/lv1_snap/
total 28K
-rw-r--r--. 1 root root  982 Jul 28 11:50 1.txt
-rw-r--r--. 1 root root 1.7K Jul 28 11:50 2.txt
-rw-r--r--. 1 root root   47 Jul 28 11:51 3.txt
drwx------. 2 root root  16K Jul 28 11:49 lost+found

总结:快照功能能将在现在创建功能的时候的数据记录下来,在当数据发生改变的时候才会将这个数据最原始也就是在创建快照功能时候的数据状态保存到快照区域,所以快照其实占用空间不大,只有逻辑卷发生改变的时候才会将其数据保存到快照区。快照恢复可以采用打包方式打包恢复,具体操作在这里就不做介绍了。

磁盘管理之逻辑卷(转载)