linux lvm

Posted chacha51

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux lvm相关的知识,希望对你有一定的参考价值。

linux lvm

lvm 虽然不常用,但是在小型应用上偶尔还是需要扩容之类的操作。当我们使用的一个分区所剩空间大小已经不够使用了,这个时候我们没法对分区进行扩充,因为受到传统磁盘管理的限制,其不能够进行动态的磁盘管理。因此,为了解决这个问题,LVM技术就诞生了。

Linux LVM介绍与配置

1. LVM介绍

LVM的全称是Logical Volumn Manager,是在Linux2.4内核以上实现的磁盘管理技术。它是Linux环境下对磁盘分区进行管理的一种机制。现在不仅仅是Linux系统上可以使用LVM这种磁盘管理机制,对于其它的类UNIX操作系统,以及windows操作系统都有类似与LVM这种磁盘管理软件。LVM的工作原理其实很简单,它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。比如说我增加一个物理硬盘,这个时候上层的服务是感觉不到的,因为呈现给上次服务的是以逻辑卷的方式。

2. LVM的优点与缺点

2.1 lvm的优点

  1. 可以在系统运行的状态下动态的扩展文件系统的大小。
  2. 文件系统可以跨多个磁盘,因此文件系统大小不会受物理磁盘的限制。
  3. 可以增加新的磁盘到LVM的存储池中。
  4. 可以以镜像的方式冗余重要的数据到多个物理磁盘。
  5. 可以方便的导出整个卷组到另外一台机器。

2.1 lvm的缺点

  1. 在从卷组中移除一个磁盘的时候必须使用reducevg命令(这个命令要求root权限,并且不允许在快照卷组中使用)。
  2. 当卷组中的一个磁盘损坏时,整个卷组都会受到影响。
  3. 因为加入了额外的操作,存贮性能受到影响。

3. LVM的用法

技术图片
enter description here

3.1 lvm的词汇解释

  • PV(Physical Volume):物理卷,处于LVM最底层,可以是物理硬盘或者分区。
  • PP(Physical Extend):物理区域,PV中可以用于分配的最小存储单元,可以在创建PV的时候制定(默认为4MB),组成同一VG中所有PV的PE大小应该相同。
  • VG(Volume Group):卷组,建立在PV之上,可以含有一个到多个PV。
  • LV(Logical Volume):逻辑卷,建立在VG之上,相当于原来分区的概念。不过大小可以动态改变。
  • 存储空间边界:物理边界:逻辑边界
  • 逻辑卷:
    扩展:物理 --> 逻辑
    缩减:逻辑 --> 物理
    缩减不能少于已经存储的所有数据空间的大小
    缩减存在较大的风险,操作需谨慎
  • 快照:snapshot

3.2 lvm创建的命令介绍

3.2.1 对于pv的命令

pvcreate, pvs, pvdisplay, pvremove, pvmove, pvscan

3.2.2 对于vg的命令

vgcreate, vgs, vgdisplay, vgremove, vgextend, vgreduce, vgscan

3.2.3 对于lv的命令

lvcreate, lvs, lvdisplay, lvremove, lvextend, lvreduce, lvscan

lvcreate
				-n lv_name
				-L #UNIT   mMgGtT
				VG_NAME

3.2.4 lvm的访问路径

lv的访问路径:
				1、/dev/VG_NAME/LV_NAME
					/dev/myvg/mylv

				2、/dev/mapper/VG_NAME-LV_NAME
					/dev/mapper/myvg-mylv

				此两者均为符号链接,指向的文件为/dev/dm-#

3.2.5 创建快照卷

lvcreate 
			-L 
			-n
			-s 
			-p r

		注意:快照卷是对某逻辑卷进行的,因此必须跟目标逻辑卷在同一个卷组中;无须指明卷组;

3.3 创建步骤

创建一个由至少两个物理卷组成的大小为10G的卷组;要求,PE大小8M;而后在卷组中创建大小为5G的逻辑卷mylv1,格式化为ext4文件系统,开机自动挂载至/users目录;

3.3.1 PV创建

  1. 用fdisk创建2个分区,注意分区的标记应该是lvm的,例如sdb5,sdb10
  2. PV创建
[root@backup ~]# pvcreate /dev/sdb5 /dev/sdb10
  Physical volume "/dev/sdb5" successfully created.
  Physical volume "/dev/sdb10" successfully created.
  [root@backup ~]# pvs
  PV         VG Fmt  Attr PSize PFree
  /dev/sdb10    lvm2 ---  5.00g 5.00g
  /dev/sdb5     lvm2 ---  5.00g 5.00g
  [root@backup ~]# pvdisplay (查看详细信息)
  "/dev/sdb5" is a new physical volume of "5.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb5
  VG Name               
  PV Size               5.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               Ta4n50-e2vo-PyE2-w7hZ-Ikbp-wP6w-gncbuk
   
  "/dev/sdb10" is a new physical volume of "5.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb10
  VG Name               
  PV Size               5.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               167d2z-y5Hy-rQc3-fdyy-UZmn-0ara-9uNgiF
   
  1. 创建vg
[root@backup ~]# vgcreate myvg -s 8m /dev/sdb5 /dev/sdb10
Volume group "myvg" successfully created
[root@backup ~]# 
[root@backup ~]# 
[root@backup ~]# vgs
VG   #PV #LV #SN Attr   VSize VFree
myvg   2   0   0 wz--n- 9.98g 9.98g
[root@backup ~]# vgdisplay
--- Volume group ---
VG Name               myvg
System ID             
Format                lvm2
Metadata Areas        2
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                2
Act PV                2
VG Size               9.98 GiB
PE Size               8.00 MiB
Total PE              1278
Alloc PE / Size       0 / 0   
Free  PE / Size       1278 / 9.98 GiB
VG UUID               GioUVV-eno8-vipm-7sdu-TsiP-BOUF-HGhwit
  1. 创建lv卷
[root@backup ~]# lvcreate -n mylv1 -L 5G myvg
WARNING: ext4 signature detected on /dev/myvg/mylv1 at offset 1080. Wipe it? [y/n]: y
Wiping ext4 signature on /dev/myvg/mylv1.
Logical volume "mylv1" created.
[root@backup ~]# vgs
VG   #PV #LV #SN Attr   VSize VFree
myvg   2   1   0 wz--n- 9.98g 4.98g
[root@backup ~]# vgdisplay
--- Volume group ---
VG Name               myvg
System ID             
Format                lvm2
Metadata Areas        2
Metadata Sequence No  2
VG Access             read/write
VG Status             resizable
MAX LV                0
Cur LV                1
Open LV               0
Max PV                0
Cur PV                2
Act PV                2
VG Size               9.98 GiB
PE Size               8.00 MiB
Total PE              1278
Alloc PE / Size       640 / 5.00 GiB
Free  PE / Size       638 / 4.98 GiB
VG UUID               GioUVV-eno8-vipm-7sdu-TsiP-BOUF-HGhwit
[root@backup ~]# lvs
LV    VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
mylv1 myvg -wi-a----- 5.00g                 
[root@backup ~]# lvdisplay
--- Logical volume ---
LV Path                /dev/myvg/mylv1
LV Name                mylv1
VG Name                myvg
LV UUID                gBbQGU-2deH-1lSY-7a4i-G3Ev-mFmB-SQQXyt
LV Write Access        read/write
LV Creation host, time backup, 2019-07-18 09:14:51 +0800
LV Status              available
# open                 0
LV Size                5.00 GiB
Current LE             640
Segments               2
Allocation             inherit
Read ahead sectors     auto
- currently set to     8192
Block device           253:0
[root@backup ~]# mke2fs -t ext4 -L ‘mylv1‘ /dev/myvg/mylv1       
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=mylv1
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310720 blocks
  1. 挂载至/users目录
[root@backup ~]# echo "LABEL="mylv1"  /users   ext4   defaults    0    0 " >>/etc/fstab 
[root@backup ~]# mount -a
[root@backup ~]# df -h |grep /users
/dev/mapper/myvg-mylv1  4.8G   20M  4.6G   1% /users

3.4 扩展lv卷

新建用lvm1,其家目录为/users/lvm1,而后su至lvm1用户,复制/etc/fstab文件至自己的家目录;扩展mylv1至7G,确保/users/lvvm1的数据不受影响;而后su至mageedu用户,验正数据可正常访问;

3.4.1 扩展lv卷的方法

  • 先确定扩展的目标大小;并确保对应的卷组中有足够的空闲空间可用;
  • 扩展物理边界
    lvextend -L 4G /dev/myvg/mylv
  • 扩展逻辑边界
    resize2fs /dev/myvg/mylv

3.4.2 上述例子步骤

  1. 新建 用户lvm1
    [root@backup ~]# useradd -m -d /users/lvm1 lvm1
    [root@backup ~]# cp /etc/fstab /users/lvm1/
  2. 扩容/users目录
[root@backup lvm1]# lvextend -L 7G /dev/myvg/mylv1 
  Size of logical volume myvg/mylv1 changed from 5.00 GiB (640 extents) to 7.00 GiB (896 extents).
  Logical volume myvg/mylv1 successfully resized.
[root@backup lvm1]# resize2fs /dev/myvg/mylv1 
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/myvg/mylv1 is mounted on /users; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/myvg/mylv1 is now 1835008 blocks long.
[root@backup lvm1]# df -h |grep users
/dev/mapper/myvg-mylv1  6.8G   23M  6.4G   1% /users
[root@backup lvm1]# ls -l /users/lvm1/
total 4
-rw-r--r--. 1 root root 605 Jul 18 10:04 fstab

3.5 缩小LV卷

缩减mylv1至4G,确保/users/mageedu的数据不受影响;而后su至mageedu用户,验正数据可正常访问;

3.5.1 缩减lv卷的方法

注意缩减lv卷风险很高,谨慎使用。

  1. 先确定缩减后的目标大小;并确保对应的目标逻辑卷大小中有足够的空间可容纳原有所有数据;
  2. 先制裁文件系统,并要执行强制检测
    e2fsck -f
  3. 缩减逻辑边界
    resize2fs DEVICE
  4. 缩减物理边界
    lvreduce

3.5.2 上述例子步骤

  1. 卸载文件系统,e2fsck强制检查
[root@backup /]# umount /users/
[root@backup /]# e2fsck -f /dev/mapper/myvg-mylv1 
e2fsck 1.42.9 (28-Dec-2013)
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
mylv1: 16/458752 files (0.0% non-contiguous), 67332/1835008 blocks
  1. 缩减逻辑边界到4G
[root@backup ~]# resize2fs /dev/mapper/myvg-mylv1 4g
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/mapper/myvg-mylv1 to 1048576 (4k) blocks.
The filesystem on /dev/mapper/myvg-mylv1 is now 1048576 blocks long.
  1. 缩减物理边界到4G
[root@backup ~]# lvreduce -L 4G /dev/mapper/myvg-mylv1 
  WARNING: Reducing active logical volume to 4.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce myvg/mylv1? [y/n]: y
  Size of logical volume myvg/mylv1 changed from 7.00 GiB (896 extents) to 4.00 GiB (512 extents).
  Logical volume myvg/mylv1 successfully resized.
  1. 重新挂载文件系统
[root@backup /]# mount /dev/mapper/myvg-mylv1 /users
[root@backup /]# cd /users && ls -l
total 20
drwx------. 2 root root 16384 Jul 18 09:17 lost+found
drwx------. 2 lvm1 lvm1  4096 Jul 18 10:04 lvm1

3.6 快照卷

对mylv1创建快照卷snap-mylv1,并通过其cp内部的数据至/backups/目录中,要求保留原有属主属组等信息;

3.6.1 lvm快照卷简述

  1. lvm支持快照卷,可以实时备份数据
  2. 快照卷是对某逻辑卷进行的,因此必须跟目标逻辑卷在同一个卷组中
  3. 快照卷无需指明卷组

3.6.2 lvm创建步骤

  1. lvcreate工具创建
[root@backup mapper]# lvcreate -s -n myvg-snap -p r  -L 30m /dev/mapper/myvg-mylv1 
  Rounding up size to full physical extent 32.00 MiB
  Logical volume "myvg-snap" created.
  1. 挂载快照卷
[root@backup mapper]# mount /dev/mapper/myvg-myvg--snap /mnt
mount: /dev/mapper/myvg-myvg--snap is write-protected, mounting read-only
  1. 确认快照卷内容,更改原卷,再查看快照卷
[root@backup mnt]# echo "aaaaaa=bbbbb" >/users/aaa
[root@backup mnt]# cat /users/aaa
aaaaaa=bbbbb
[root@backup mnt]# 
[root@backup mnt]# cat /mnt/aaa
aaa

以上是关于linux lvm的主要内容,如果未能解决你的问题,请参考以下文章

linux基础知识都有哪些

Linux汇总一——Linux程序管理,Linux终端,Linux命令格式命令类型及Linux命令帮助

Linux学习导航

Linux 文件/目录管理(初级)

Linux 内核Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )

嵌入式linux怎么学