写在前面:
本文一共分个部分来讲解逻辑卷的一些操作及注意事项,其中第一部分介绍了什么是逻辑卷,逻辑卷的实现原理是什么,还有包括其中的一些名词解释;第二部分主 要是介绍怎么创建,删除,和增加物理卷(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 |
总结:快照功能能将在现在创建功能的时候的数据记录下来,在当数据发生改变的时候才会将这个数据最原始也就是在创建快照功能时候的数据状态保存到快照区域,所以快照其实占用空间不大,只有逻辑卷发生改变的时候才会将其数据保存到快照区。快照恢复可以采用打包方式打包恢复,具体操作在这里就不做介绍了。