利用Linux LVM进行快照备份

强颜欢笑 提交于 2020-01-06 17:04:09

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

1. LVM概述

LVM的全称为Logical Volume Manager,是Linux所提供的一种对磁盘分区进行灵活管理的机制。要理解LVM,首先需要从一个Linux用户经常遇到的问题开始,那就是“应该如何正确评估不同分区的大小来合适地分配硬盘空间?”。通常情况下,逻辑分区划分好后空间大小将无法改变,此时如果需要存储的文件过大,则单个逻辑分区无法存储,但该文件也无法跨越多个分区来存储,这是由上层文件系统限制造成的,以致于单个文件不能同时存储在不同的磁盘上。当出现某个分区的空间不足时,通常只能使用符号链接或者调整分区大小的工具来暂时解决问题,然而,这些临时性的措施都并非有效的解决方法,而LVM的机制则能够很好地解决这个问题,用户可以在不停机的情况下调整各分区的空间大小。

LVM层次结构

2.创建LV的步骤

  • 创建物理卷(Physical Volumes)
  • 创建卷组(Volume Group)
  • 创建逻辑卷(Logical Volumes)

2.1 物理卷

2.1.1 查看物理卷

使用pvs命令查看物理卷

[root@localhost ~]# pvs

结果如下:

PV         VG   Fmt     Attr    PSize   PFree
/dev/sda centos lvm2     a--    <7.00g    0

2.1.2 新增磁盘分区

  • 新增磁盘

为了创建新的物理卷,我们先增加一块新的磁盘,并且挂载到文件系统。先用fdisk命令看看目前系统的所有磁盘:

[root@localhost ~]# fdisk -l

结果如下:

接下来我们增加一块新的磁盘,再使用fdisk命令,结果如下所示,我们能看到多了一个/dev/sdb,这正是我们新增的磁盘:

  • 为新磁盘创建分区

使用fdisk /dev/sdb来对其创建分区:

这里选择p主分区:

最后,需要选择w保存设置,否则不会生效:

Command (m for help): w
Calling ioctl() to re-read partition table
Symcing disks

至此,分区就创建完毕了,再次使用fdisk -l命令可以看到现在已经存在/dev/sdb1分区

Device Boot    Start    End        Blocks     Id    System
/dev/sdb1      2048   20971519    10484736    83    Linux
  • 格式化分区

接下来要对分区进行格式化处理,使用mkfs命令实现格式化。下面的命令将/dev/sdb1格式化为ext4格式

[root@localhost ~]# mkfs -t ext4 /dev/sdb1
  • 挂载新分区

此时通过df -h命令查看分区分布,我们可以发现分区还没有被挂载,

[root@localhost ~]# df -h
Filesystem                 Size    Used    Avail    Use%    Mounted on
/dev/mapper/centos-root    6.2G    1007M   5.3G     16%     /
/devtmps                   908M    0       908M     0%      /dev
tmpfs                      920M    0       920M     0%      /dev/shm
tmpfs                      920M    8.6M    911M     1%      /run
tmpfs                      920M    0       920M     0%      /sys/fs/cgroup
/ddev/sda1                1014M    146M    869M     15%     /boot
tmpfs                      184M    0       184M     0%      /run/user/0

接下来我们将新分区/dev/sdb1挂载到/data上:

[root@localhost ~]# mkdir /data
[root@localhost ~]# mount /dev/sdb1 /data

此时再次执行df -h命令查看分区分布,可以看到/dev/sdb1已经挂载到/data上了:

Filesystem                 Size    Used    Avail    Use%    Mounted on
/dev/mapper/centos-root    6.2G    1007M   5.3G     16%     /
/devtmps                   908M    0       908M     0%      /dev
tmpfs                      920M    0       920M     0%      /dev/shm
tmpfs                      920M    8.6M    911M     1%      /run
tmpfs                      920M    0       920M     0%      /sys/fs/cgroup
/ddev/sda1                1014M    146M    869M     15%     /boot
tmpfs                      184M    0       184M     0%      /run/user/0
/dev/sdb1                  9.8G    37M     9.2G     1%      /data

另外,可以修改/etc/fstab文件,在最后一行加上下列的内容,使系统每次启动都自动挂载

/dev/sdb1 /data ext4 defaults 0 0

2.1.3 创建物理卷

使用pvcreate命令创建物理卷:

[root@localhost ~]# pvcreate /dev/sdb1

注意,如果如果/dev/sdb1已经挂载到文件系统上,需要先umount再执行pvcreate:

[root@localhost ~]# umount /dev/sdb1

创建后使用pvs命令查看物理卷

PV         VG   Fmt     Attr    PSize   PFree
/dev/sda centos lvm2     a--    <7.00g    0
/dev/sdb centos lvm2     ---     <10.00g  <10.00g

从结果中可以看到刚才新创建的物理卷/dev/sbd

2.2 卷组

2.2.1 查看卷组

使用vgs查看卷组

[root@localhost ~]# vgs

结果如下:

VG        #PV   #LV     #SN    Attr   VSize    VFree
centos     1     2       0    wz--n-  <7.00g     0

2.2.2 创建卷组

使用vgcreate命令创建卷组:

vgcreate <卷组名> <加入该卷组的空闲分区名>

例如,创建一个名为data_group的卷组:

vgcreate data_group /dev/sdb1

这时再次使用vgs命令,可以看到已经创建了一个名为data_group的卷组:

VG         #PV   #LV     #SN    Attr   VSize    VFree
centos      1     2       0    wz--n-  <7.00g     0
data_group  1     0       0    wz--n-  <10.00g   <10.00g

2.2.3 向卷组添加物理卷

向卷组中添加物理卷

vgextend <卷组名> <物理卷名>

例如,假设存在物理卷/dev/sdc1,则下面的命令可以向data_group这个卷组中添加物理卷/dev/sdc1:

[root@localhost ~]# vgextend data_group /dev/sdc1

结果如下:

VG         #PV   #LV     #SN    Attr   VSize    VFree
centos      2     2       0    wz--n-  <7.00g    0
data_group  2     0       0    wz--n-  <19.99g   <19.70g

2.3 逻辑卷

2.3.1 查看逻辑卷

使用lvs命令查看逻辑卷

[root@localhost ~]# lvs

结果如下:

LV    VG    Attr        LSize   Pool  Origin  Data%  Meta%  Move  Log  Cpy%Sync  Convert
root centos -wi-ao----   <6.20g
swap centos -wi-ao----   <820.00m

2.3.2 创建逻辑卷

使用lvcreate命令来创建逻辑卷:

lvcreate -L <逻辑卷空间大小> -n <逻辑卷名称>  <所属卷组>

例如,在centos卷组上创建一个名为data的逻辑卷:

[root@localhost ~]# lvcreate -L 150M -n data data_group

接着格式化逻辑卷:

[root@localhost ~]# mkfs -t ext4 /dev/data_group/data

操作的方式参考2.1.2,依次选择m、n、p随后的选项都选择默认回车即可。 最后挂载到指定目录:

[root@localhost ~]# mkdir /usr/local/data
[root@localhost ~]# mount /dev/data_group/data /usr/local/data

3. 利用LVM实现快照备份

3.1 创建快照逻辑卷

同样使用lvcreate命令来创建用于快照备份的逻辑卷

lvcreate -L <逻辑卷空间大小> -s -n <快照逻辑卷的名称> /dev/<卷组名>/<目标逻辑卷的名称>

例如,下面为data_group卷组中的data逻辑卷创建了一个大小为150MB的,名为backup的快照备份逻辑卷:

[root@localhost ~]# lvcreate -L 150M -s -n backup /dev/data_group/data

由于是快照逻辑卷,所以我们不需要对其进行格式化,直接挂载即可:

[root@localhost ~]# mkdir /usr/local/backup
[root@localhost ~]# mount /dev/data_group/backup /usr/local/backup

通过lvs命令查看逻辑卷的情况,可以发现分别增加了data和backup两个逻辑卷:

LV         VG      Attr        LSize   Pool  Origin  Data%  Meta%  Move  Log  Cpy%Sync  Convert
root      centos   -wi-ao----  <6.20g
swap      centos   -wi-ao----  <820.00m
backup  data_group swi-aos---  152.00m        data    1%
data    data_group owi-aos---  152.00m

另外,注意到backup逻辑卷的Origin属性指向了data,说明它作为了data的快照逻辑卷,Data%属性为1%,表示快照所占的空间大小。

3.2 修改data逻辑卷

现在向data逻辑卷挂载的目录中添加一个几MB的文件夹python2.7,让其占用一定的空间大小:

[root@localhost ~]# ls
lost+found    python2.7

此时再使用lvs命令查看逻辑卷的情况,会发现backup逻辑卷的Data%从1%变为了5.39%:

LV         VG      Attr        LSize   Pool  Origin  Data%  Meta%  Move  Log  Cpy%Sync  Convert
root      centos   -wi-ao----  <6.20g
swap      centos   -wi-ao----  <820.00m
backup  data_group swi-aos---  152.00m        data    5.39%
data    data_group owi-aos---  152.00m

3.3 利用backup逻辑卷恢复数据

4. 其它有用的命令

4.1 重命名卷组

vgrename <卷组名> <新卷组名>

4.2 删除卷组

vgremove <卷组名>

4.3 删除逻辑卷

lvremove /dev/<卷组名>/<逻辑卷名>

4.4 删除物理卷

pvremove <物理卷名>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!