linux下LVM相关知识(动态增减LVM,快照功能)的总结

一,什么是LVM

LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。LVM是磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件系统。物理卷(physical volume)物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。

二,LVM解决了什么难题

每个Linux使用者在安装Linux时都会遇到这样的困境:在为系统分区时,如何精确评估和分配各个硬盘分区的容量,因为系统管理员不但要考虑到当前某个分区需要的容量,还要预见该分区以后可能需要的容量的最大值。因为如果估 计不准确,当遇到某个分区不够用时管理员可能甚至要备份整个系统、清除硬盘、重新对硬盘分区,然后恢复数据到新分区。  虽然现在有 很多动态调整磁盘的工具可以使用,例如PartationMagic等等,但是它并不能完全解决问题,因为某个分区可能会再次被耗尽;另外一个方面这需要 重新引导系统才能实现,对于很多关键的服务器,停机是不可接受的,而且对于添加新硬盘,希望一个能跨越多个硬盘驱动器的文件系统时,分区调整程序就不能解 决问题。  因此完美的解决方法应该是在零停机前提下可以自如对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区。幸运的是Linux提供的逻辑盘卷管理(LVM,LogicalVolumeManager)机制就是一个完美的解决方案。

归纳来讲LVM提供两种比较厉害的功能:

1):可以动态的增大或者缩小磁盘的大小而不影响磁盘原有的数据

2):提供一种实现数据备份的通道--快照功能

三,LVM的逻辑结构

这里要说明以下几点:

1),pv被创建后是由很多的PE(physical extension物理盘区)组成的,物理盘区就相当于我们说的block,不过通常比一般的block大,可以是4M,8M,16M等,

2),当VG被创建后,我们才能正常查看PE的数量

3),其实最后的LV就是由这些PE组成的,不过在LV里面这些PE叫做LE

4),一个系统上可以有很多个PV,VG,LV

以下是LVM管理的相关命令:

四,LVM创建过程

这里我们在虚拟机里面创建在底层准备两个10G的分区作为PV(两个分区的大小不一定非得相等)

1),创建两个分区sdb1和sdb2         //这里不再列出创建过程,注意创建分区的ID号为8e

2),把这两个分区创建成PV

#pvcreate /dev/sdb1 /dev/sdb2  //创建成PV

#pvdisplay                     //查看创建的PV详细信息

3),把创建的PV做成VG

#vgcreate vg0 /dev/sdb1 /dev/sdb2 //创建成VG(记得指定创建的VG名字)

#vgdisplay vg0                  //查看创建好的vg信息

4),创建LV

#lvcreate -L 5G -n lvm1 vg0    //创建LV (-L指定LV大小,-n指定LV名字,注意要制定要在哪个vg中创建LV,因为一个磁盘上是可以存在多个卷组vg的)

#lvdisplay /dev/vg0/lvm1       //查看创建的LV信息(注意这里不能使用lvdisplay lvm1,需要指定lvm1的路径或者指定卷组名称才能显示出来详细信息。例如#lvdisplay vg0)

到这里我们的lv已经创建完毕,它跟我们的基本磁盘分区一样,要想使用必须先格式化。

5),格式化创建的LV

#mke2fs -j /dev/vg0/lvm1        //格式化成ext3文件系统

#mount /dev/vg0/lvm1  /mnt      //挂载新的分区到/mnt

//如果想每次开机自动挂载可以写到 /etc/fstab下

#ls /mnt                        //会有lost+found文件,证明磁盘分区建立成功

其他的命令介绍:

#pvremove  /dev/sdb2            //删除一个pv

#vgextend  vg0 /dev/sdb3        //扩展vg的大小(要先创建sdb3作为pv)

#vgreduce  vg0 /dev/sdb3        //缩小vg的大小(缩减的时候要先使用pvmove /dev/sdb3,把数据移除)

缩减VG

想要减小VG的大小,首先确认想删减的分区是否已经写上数据:

[[email protected] ~]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/hda6
  VG Name               vgtest
  PV Size               964.81 MB / not usable 830.00 KB
  Allocatable           yes
  PE Size (KByte)       4096
  Total PE              241  
  Free PE               100  
  Allocated PE             141   #这个说明hda6上已经有141个PE上已经写上了数据
  Allocated PE          0
  PV UUID               uTYGW9-MKq4-OEdn-FNzV-77DK-j4XI-IeNLtb

--- Physical volume ---
  PV Name               /dev/hdb5
  VG Name               vgtest
  PV Size               1.87 GB / not usable 1.96 MB
  Allocatable           yes
  PE Size (KByte)       4096
  Total PE              478
  Free PE               297

  Allocated PE          181
  PV UUID               o4LYXW-fm9v-e4oN-ZSuW-SI6e-pLoW-gMrPKa

--- Physical volume ---
  PV Name               /dev/hda5
  VG Name               vgtest
  PV Size               1.87 GB / not usable 1.96 MB
  Allocatable           yes
  PE Size (KByte)       4096
  Total PE              478
  Free PE               478
  Allocated PE          0
  PV UUID               xD2DkY-G12w-XU7S-a5tB-jEig-4LXB-e0ZK0K

可以直接移出hda5,因为它完全没有数据;也可以移出hda6,只需把hda6上的数据移动到其他分区就可以了:
# pvmove /dev/hda6 /dev/hdb5 #把hda6上的数据备份到hdb5上

然后开始减小VG的大小,我们这里删去hda5,当然,如删去hda6,步骤也完全一样:
[[email protected] ~]# vgreduce vgtest /dev/hda5
  Removed "/dev/hda5" from volume group "vgtest"
[[email protected] ~]# pvscan
  PV /dev/hda6   VG vgtest          lvm2 [964.00 MB / 964.00 MB free]
  PV /dev/hdb5   VG vgtest          lvm2 [1.87 GB / 1.16 GB free]
  PV /dev/hda5                      lvm2 [1.87 GB]
  Total: 3 [4.68 GB] / in use: 2 [2.81 GB] / in no VG: 1 [1.87 GB]

#除去hda5的PV属性
[[email protected] ~]# pvremove /dev/hda5
  Labels on physical volume "/dev/hda5" successfully wiped
[[email protected] ~]# pvscan
  PV /dev/hda6   VG vgtest   lvm2 [964.00 MB / 964.00 MB free]
  PV /dev/hdb5   VG vgtest   lvm2 [1.87 GB / 1.16 GB free]
  Total: 2 [2.81 GB] / in use: 2 [2.81 GB]  / in no VG: 0 [0   ]
此时的hda5就恢复到了初始的模式,再将其system id从8e变为83,则它就完全成为了一个普通的分区。

五,扩展或者缩减一个LVM的大小

这里我们要引入两个概念:物理边界和逻辑边界

物理边界:我们对一个磁盘进行分区的分区边界

逻辑边界:我们格式化分区,建立文件系统后形成的分区边界

在我们对LVM扩展的时候,我们要先扩展物理边界,然后再扩展逻辑边界;缩减LVM的时候则相反(读者这里可以好好体会下为什么这样做)

其实就是水(逻辑边界)与水桶(物理边界)的问题

扩展LVM:

    #lvextend -L +2G /dev/vg0/lvm1   //为LVM1增加2G的大小(注意这里是扩展的物理边界)

    #df -lh                        //显示发现LVM1的大小没有变化(因为我们还没有扩展逻辑边界)

#resize2fs -p /dev/vg0/lvm1      //扩展其逻辑边界(-p显示扩展的过程)

#df -lh                          //这时候发现lvm1的大小已经增加了2G,表明扩展成功

缩减LVM:缩减存在一定的风险,所以在生产环境中我们一般不缩减LVM大小

#umount  /dev/vg0/lvm1           //必须先卸载掉

#e2fsck  -f /dev/vg0/lvm1        //对这个逻辑卷进行自检,保证其数据的一致性

#resize2fs  /dev/vg0/lvm1 3G     //缩减逻辑卷到3G大小(缩减的是逻辑边界)

#lvreduce -L 3G /dev/vg0/lvm1    //缩减的是物理边界

#mount  /dev/vg0/lvm1 /mnt       //挂载逻辑卷到/mnt

#ls /mnt                         //查看数据是否被损坏

六,快照snapshot(主要是用作在线备份)

介绍几个概念,关于数据的备份

冷备份:卸载掉文件系统,不能读不能写

温备份:不卸载文件系统,能读取文件系统内容但是不能写

热备份:不卸载文件系统,既能读取文件系统内容又能写入

注意两点:

1),快照其实也是一个逻辑卷

2),快照只能对逻辑卷LVM进行备份,并且只能对同一个卷组的逻辑卷进行备份

创建过程:

#lvcreate -L 512M -s -n lvm1-snap -p r /dev/vg0/lvm1   //创建一个512M的快照(-s指定这是一个快照,-n指定快照名字,-p指定这个快照的权限)

#mkdir /snap                       //创建一个目录作为快照卷的挂载点

#mount /dev/vg0/lvm1-snap /snap          //将快照挂载到 /snap 目录下

#tar -jcf /tmp/snap.tar.gz  /snap/* //备份快照卷的内容到/tmp下

这个时候无论你在逻辑卷上做什么变化都不用担心数据丢失了,从备份的快照文件里面可以恢复之前的文件,这就是快照卷的强大之处了……

当快照备份完之后我们就可以释放并删除这个快照了,以免对系统的负载过大

#umount /dev/vg0/lvm1-snap

#lvremove /dev/vg0/lvm1-snap

时间: 2024-07-31 22:08:47

linux下LVM相关知识(动态增减LVM,快照功能)的总结的相关文章

linux下grub相关知识详解

一.grub相关知识详解 (1)grub:GRand Unified Bootloader grub 0.x :grub legacy grub 1.x : grub2 grub legacy: stage1:mbr的bootloader阶段 stage1_5:mbr之后的扇区,让stage1的bootloader能够识别stage2所在分区的文件系统 stage2:磁盘分区(/boot/grub/) 配置文件:/etc/grub.conf-->/boot/grub/grub.conf stag

linux下分区相关知识

Linux 规定了主分区(或者扩展分区)占用 1 至 16 号码中的前 4 个号码.以第一个 IDE 硬盘为例说明,主分区(或者扩展分区)占用了 hda1.hda2.hda3.hda4,而逻辑分区占用了 hda5 到 hda16 等 12 个号码.因此,Linux 下面每一个硬盘总共最多有 16 个分区. 因此 hda1- hda4 是主区的意思. hda5以后是逻辑分区!! Linux下,每一个硬盘设备都被映射到一个系统的设备文件:对于磁盘,光驱等IDE或者SCSI设备也不例外. 此处要渗透一

Linux下线程相关知识总结

1.线程的基本介绍 (1)线程的概述 线程与进程类似,也允许应用程序并发执行多个任务的一种机制.一个进程可以包含多个线程,同一程序中的所有线程共享同一份全局内存区域,线程之间没有真正意义的等级之分.同一个进程中的线程可以并发执行,如果处理器是多核的话线程也可以并行执行,如果一个线程因为等待I/O操作而阻塞,那么其他线程依然可以继续运行 (2)线程优于进程的方面 argv,environ 主线程栈 线程3的栈 线程2的栈 线程1的栈 共享函数库共享的内存 堆 未初始化的数据段 初始化数据段 文本

Linux系统的相关知识、常用命令及拓展、centos 7网卡配置

一.Linux系统的相关知识 1.Linux中根目录下所有文件夹的含义和用途 目录 功能 /bin 存放可执行文件 /dev 存放设备文件 (如:网卡.CPU) /media 存放可移除设备文件 (如:U盘.CD/DVD.VMTools) /opt 存放第三方软件的默认位置 /tmp  存放临时文件 (如:日志文件) /root root用户的家目录,主文件夹 /home 普通用户的家目录,文件夹的命名是以用户的名字来命名的 /etc 存放配置文件 /usr 存放操作系统软件资源 /var 存放

Linux系统的相关知识、常用命令及centos 7网卡配置

(本文仅为平时学习记录,若有错误请大佬指出,如果本文能帮到你那我也是很开心啦) 一.Linux系统的相关知识 1.Linux中根目录下所有文件夹的含义和用途(括号内为举例存放的文件) /  根目录 cd /  切换到根目录 / bin  存放可执行文件 /dev  存放设备文件  (网卡 CPU) /media  存放可移除设备文件   (U盘 CD/DVD  VMTools) /opt  存放第三方软件的默认位置 /tmp  存放临时文件  (日志文件) /root  root用户的家目录,主

indy openssl lazarus 编程linux下出现不能装载动态库的问题原因!

版本不对的原因. 具体在10.5.9下修改此参数即可解决问题. LoadFunction() has an ACritical parameter. It is set to True by default, but can be set to False for individual functions (and currently is False for TLS 1.1+ and DTLS functions). You can patch IdSSLOpenSSLHeaders.pas

Linux下静态库和动态库的制作与使用

p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; font-size: 10.5pt; font-family: "Times New Roman", serif } h2 { margin-top: 14.0pt; margin-right: 0cm; margin-bottom: 14.0pt; margin-left: 28.8pt;

linux下网卡相关查看设置

查整机硬件信息命令dmesg 查看网卡设备相关dmesg | grep eth 查看网卡eth0信息dmesg | grep eth0 使用ethtool命令查看指定网卡信息ethtool eth0 使用 mii-tool命令查看指定网卡情况mii-tool -v eth1 为了使用lspci命令需要安装以下软件包yum -y install pciutils 查看pci接口硬件信息lspci 在linux的proc文件系统中,通过查看/proc/net/dev文件可以得到每个网络接口的吞吐量c

Linux下gcc编译控制动态库导出函数小结

Linux下gcc编译控制动态库导出函数小结 来源 https://www.cnblogs.com/lidabo/p/5703890.html 根据说明文档“How To Write Shared Libraries"介绍, 有四种方法: 1. 在方法声明定义时,加修饰:__attribute__((visibility("hidden"))) 就是说将不公开的函数都加上这个属性,没加的就是可见的 2. gcc 在链接时设置 -fvisibility=hidden,则不加 v

rlwrap: command not found和解决linux下sqlplus 提供浏览历史命令行的功能

rlwrap工具可以解决linux下sqlplus 提供浏览历史命令行的功能,和删除先前输入错误的字母等问题 1.安装 需要readline包 这个安装光盘就有 [[email protected] RedHat]# cd RPMS/[[email protected] RPMS]# rpm -Uvh readline*warning: readline-4.3-13.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60eerror: Failed