LVM管理

一、简介

LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。

LVM的工作原理是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。

LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。如果我们新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性。

基本的逻辑卷管理概念:

PV(Physical Volume)- 物理卷 

物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘,也可以是raid设备。

VG(Volumne Group)- 卷组 

卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。

LV(Logical Volume)- 逻辑卷 

逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组。

关系图如下:

wKiom1fEHyWD2tzoAACJRcxUYzs495.jpg

PE(Physical Extent)- 物理块

LVM 默认使用4MB的PE区块,而LVM的LV最多仅能含有65534个PE (lvm1 的格式),因此默认的LVM的LV最大容量为4M*65534/(1024M/G)=256G。PE是整个LVM 最小的储存区块,也就是说,其实我们的资料都是由写入PE 来处理的。简单的说,这个PE 就有点像文件系统里面的block 大小。所以调整PE 会影响到LVM 的最大容量!

wKioL1fEH0yyh3gAAAAOnK_uTos844.gif

二,系统环境及磁盘准备

系统平台:CentOS release 7

LVM版本:lvm2-2.02.130-5.el7.x86_64

设备类型:分区、物理磁盘

磁盘准备:新增一块磁盘做实验

三,安装LVM管理工具

1,检查系统中是否安装了LVM管理工具

  # rpm -qa | grep lvm

2,如果未安装,则使用yum方式安装

  # yum -y install lvm*

[root@localhost ~]# rpm -qa lvm2
lvm2-2.02.130-5.el7.x86_64

四,新建一个分区

1,使用/dev/sdb模拟分区

  # fdisk /dev/sdb

   文件系统类型为:8e (Linux LVM)

  # fdisk -l /dev/sdb

wKioL1fFMz3BTJmvAAA7ufTQWaw282.png

五,创建PV

  命令介绍:

    # pvcreate  将物理分区新建成为PV

    # pvscan  查询目前系统里面任何具有PV的磁盘

    # pvdisplay  显示出目前系统上面的PV状态

    # pvremove  将PV属性移除,让该分区不具有PV属性

1,查询目前系统里面是否有PV的磁盘

wKioL1fFNLDSVo5XAAArrazlAZM426.png

2,将/dev/sdb5-/dev/sdb8新建成为PV格式

wKioL1fFNRqAq0lWAAAqjzV1NJU252.png

3,查询目前系统里面任何具有PV的磁盘

wKioL1fFNV_DcNGNAAArrazlAZM968.png

六,创建VG

  命令介绍:

    # vgcreate  新建VG

     vgcreate [-s N[mgt]] VG名称 VG名称

      -s  接PE的大小

    # vgscan  查询目前系统里面是否有VG的磁盘

    # vgdisplay  显示出目前系统上面的VG状态

    # vgextend  在VG内增加额外的PV

    # vgreduce  在VG内删除PV

    # vgchange  设置VG是否启动(active)

    # vgremove  删除一个VG

  PV的名称是分区的设备文件名字,VG名称可以自定义的,我将VG的名称定义为myvg

1,将/dev/sdb5-/dev/sdb7新建为一个VG,且指定PE为15MB

wKiom1fFOVmz88T1AAATAfkyn8Y342.png

2,查看系统上的VG状态

wKioL1fFOPLweo5fAAAzMQZJBzg163.png

3,显示出目前系统上面的VG状态

  # vgdisplay

wKioL1fFOtvi5wODAAAXz0W1aHg170.png

4,新增PV给myvg

wKiom1fFPB_h_BfwAAARDwb5nmE325.png

5,显示出目前系统上面的VG状态

  # vgdisplay

wKioL1fFPGHjqWzIAAAXRzkTvso611.png

七,创建LV

  命令介绍:

   # lvcreate  新建LV

     lvcreate [-L N[mgt]] [-n LV名称] VG名称

     lvcreate [-l N] [-n LV名称] VG名称

注意: -L 后面接容量,最小单位为PE, 数量必须是PE的倍数,若不相符,系统会自行计算最相近的容量

    -l 后面接PE的“个数”,而不是数量

    -n 后面接LV的名称

   # lvscan  查询系统LV

   # lvdisplay  显示系统LV状态

   # lvextend  在LV里增加容量

   # lvreduce  在LV里减少容量

   # lvremove  删除一个LV

   # lvresize  对LV进行容量大小的调整

1,将整个myvg全部分配给mglv

wKioL1fFQlvhQRBDAAA4ZWjgY6k746.png 

 实验中报错,说是空闲空间不够,可以接受545个,但只有544个,其原因是-L选项后面接的容量必须是PE的倍数,一个PE的容量为15M,总容量为7.97G,不能被15整除,故报错,下面的是 解决方法,只要将总容量改为能被15整除的数就好,因为PE的大小已经确定,VG的容量是由若干个PE组成的,故VG的大小可以改变

2,查看LV情况

wKiom1fFRRCCvZZ7AABg8j35isc728.png

3,进行格式化与挂载

 # mke2fs -t ext4 /dev/myvg/mglv

 # mkdir /mnt/lvm

 # mount /dev/myvg/mglv /mnt/lvm

wKioL1fFR0HgBUEhAABjuX8bqP0709.png

4,复制文件

wKioL1fFSAGxziPBAAAT0vqt6Mo091.png

八,放大LV容量

   步骤:

  1,利用fdisk设置新的额具有8e /systemID的分区

  2,利用pvcreate构建PV

  3,利用vgextend将PV加进myvg

  4,利用lvresize将新加入的PV内的PE加入mglv中

  5,通过resize2fs将文件系统的容量增加

1,原先已经创建好/dev/sdb9分区

2,新建新的PV

wKioL1fFSYvSC7cYAABO8xEE2Fg383.png

3,增加VG容量

wKioL1fFTRWT7q-MAAAROVCcFcw544.png

wKioL1fFTZrizsztAABhDS99GkE519.png

4,增加LV容量

wKioL1fFToPR1t8zAACEsdiQ5E4409.png

5,查看

wKiom1fFTwfy-_lTAAAcLaPWk0g833.png

6,将LV的容量扩充到整个文件系统

  # dumpe2fs /dev/myvg/mglv  查看文件系统内的superblock记录情况

  # resize2fs [-f] [device] [size]  将LV的容量扩充到整个文件系统

wKioL1fFUDrjG1KjAAAr27VgUDA312.png

7,查看

wKiom1fFUIbjD3d5AAAcPz1yNhs236.png

wKiom1fFUOKAPiGxAAAcoeeJxo4202.png

九,缩小LV容量

1,先卸载

wKiom1fFaomDo-WyAAAHLeU9-f4399.png

2,降低文件系统的容量

wKioL1fFasfRxIh4AACFnF9Z7Fg267.png

3,重新挂载并查看容量大小

wKioL1fFa0zDAfLgAAAkVx1Pi-E879.png

4,降低LV容量,抽离/dev/sdb5,这个PV有136个PE

wKioL1fFa5eyfvOQAABAzAz-ReI280.png

5,查看容量大小

wKioL1fFbIeShrruAABHAKICYSQ414.png

6,将/dev/sdb5从mgvg中移除

wKioL1fFbIfSAvsJAABBTTwfr7Q401.png

wKiom1fFbIjRX7pLAAA2xoHd2bc833.png

wKiom1fFbIjhDJzXAAAUuzrR444030.png

wKioL1fFbIiBbS81AACjNA2wzRo973.png


总结:

1,LVM最主要的用处是在实现一个可以弹性调整容量的文件系统上,而不是在新建一个性能为主的磁盘上。LVM默认的读写模式是线性模式

2,实现的流程:

wKioL1fM57Si4yT0AACPliHkZzo864.png

3,删除系统内的LVM

 1)先卸载系统上面的 LVM 文件系统(包括快照与所有LV)

 2)使用 lvremove 删除 LV

 3)使用 vgchange -an VGname 让 VGname 这个 VG 不具有 Active 的标志

 4)使用 vgremove 删除VG

 5)使用 pvremove 删除PV

 6)使用 fdisk 将 ID 修改回来

4,PV, VG, LV 常用命令的总结

wKioL1fMveLCVRKSAAAZ0fi5pXU831.png

作业:

1:创建一个可用空间为1G的RAID1设备,文件系统为ext4,有一个空闲盘,开机可自动挂载至/backup目录

[root@localhost ~]# fdisk /dev/sdb    fdisk /dev/sdc    fdisk /dev/sdd
/dev/sdb1   20975616    23072767     1048576   fd  Linux raid autodetect
/dev/sdc1    23074816    25171967     1048576   fd  Linux raid autodetect
/dev/sdd1    25174016    27271167     1048576   fd  Linux raid autodetect
[root@localhost ~]# mdadm -C /dev/md0 -a yes -l 1 -n 2 -x 1 /dev/sdb1 /dev/sdc1 /dev/sdd1
 Number   Major   Minor   RaidDevice State
       0       8       21        0      active sync   /dev/sdb1
       1       8       22        1      active sync   /dev/sdc1
       2       8       23        -      spare   /dev/sdd1
[root@localhost ~]# mke2fs -j /dev/md0
[root@localhost ~]# mke2fs -t ext4 /dev/md0
[root@localhost ~]# mount /dev/md0 /backup
[root@localhost ~]# cat /etc/fstab 
UUID=1026f9f2-27e5-4e34-be98-6e75eb1e633d  /backup   ext4  defaults 0 0

2:创建由三块硬盘组成的可用空间为2G的RAID5设备,要求其chunk大小为256k,文件系统为ext4,开机可自动挂载至/mydata目录

[root@localhost ~]# fdisk /dev/sdb  fdisk /dev/sdc  fdisk /dev/sdd
/dev/sdb5      20975616    25169919     2097152   fd  Linux raid autodetect
/dev/sdc6      25171968    29366271     2097152   fd  Linux raid autodetect
/dev/sdd7      29368320    33562623     2097152   fd  Linux raid autodetect
[root@localhost ~]# mdadm -C /dev/md1 -a yes -l 5 -n 3 -c 256 /dev/sdb5 /dev/sdc6 /dev/sdd7
[root@localhost ~]# mke2fs -j /dev/md1
[root@localhost ~]# mke2fs -t ext4 /dev/md1
[root@localhost ~]# mount /dev/md1 /mydata
[root@localhost ~]# mdadm -D /dev/md1
[root@localhost ~]# cat /etc/fstab 
UUID=3ef9776c-97dc-4b28-991b-43086a06b3ed  /mydata   ext4  defaults 0 0

1、创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小为16MB,而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录

[root@localhost ~]# fdisk /dev/sdb
[root@localhost ~]# pvcreate /dev/sdb1
[root@localhost ~]# pvcreate /dev/sdb2
[root@localhost ~]# vgcreate -s 16M testvg /dev/sdb{1,2}
[root@localhost ~]# lvcreate -n textlv -L 5G /dev/testvg
[root@localhost ~]# mkfs.ext4 /dev/testvg/testlv
[root@localhost ~]# mkdir /users
[root@localhost ~]# mount /dev/testvg/testlv /users/

wKiom1fM6bCxrVi4AAA1ViQWCMs449.png

wKioL1fM6jfQjd0kAABF9KNXX6s719.png

wKioL1fNBanw6i2GAABKnv2_o3g877.png

2、新建用户archlinux,要求其家目录为/users/archlinux,后su切换至archlinux用户,复制/etc/pam.d目录至自己的家目录中

[root@localhost ~]# useradd -d /users/archlinux archlinux
[root@localhost ~]# su - archlinux 
[archlinux@localhost ~]$ pwd
/users/archlinux
[archlinux@localhost ~]$ cp -r  /etc/pam.d .
[archlinux@localhost ~]# ll pam.d/ | wc
     46     419    2386

3、扩展testlv至7G,要求archlinux用户的文件不能丢失

[root@localhost ~]# lvextend -L 7G /dev/testvg/textlv
[root@localhost ~]# resize2fs /dev/testvg/textlv
[root@localhost ~]# su - archlinux 
[archlinux@localhost ~]$ ll pam.d/ | wc
     46     419    2836

wKiom1fNBr3TUxfaAABKdeND0Wg409.png

4、收缩testlv至3G,要求archlinux用户的文件不能丢失

[root@localhost ~]# umount /dev/testvg/testlv
[root@localhost ~]# e2fsck -f /dev/testvg/testlv 
[root@localhost ~]# resize2fs /dev/testvg/testlv 3G
[root@localhost ~]# lvreduce -L 3G /dev/testvg/testlv 
[root@localhost ~]# mount /dev/testvg/testlv /users/
[root@localhost ~]# ll /users/archlinux/pam.d/ | wc

     46     419    2836

wKioL1fNB3-AQPgFAABKKBtiQoE730.png

5、对testlv创建快照,并尝试基于快照备份数据,验正快照的功能

[root@localhost ~]#  lvcreate -L 1G -p r -s  -n testlv-snap  /dev/testvg/testl
[root@localhost ~]# mkdir /mnt/snap
[root@localhost ~]# mount /dev/testvg/testlv-snap /mnt/snap/
[root@localhost ~]# rm -f /users/archlinux/pam.d/c*
[root@localhost ~]# ls /users/archlinux/pam.d/c*
ls: cannot access /users/archlinux/pam.d/c*: No such file or directory
[root@localhost ~]# ls /mnt/snap/archlinux/pam.d/c*
/mnt/snap/archlinux/pam.d/chfn         /mnt/snap/archlinux/pam.d/crond
/mnt/snap/archlinux/pam.d/chsh         /mnt/snap/archlinux/pam.d/cups
/mnt/snap/archlinux/pam.d/config-util

wKioL1fNCC_yYBveAABRrcb1j7I285.png

原创文章,作者:pingsky,如若转载,请注明出处:http://www.178linux.com/43716

(0)
pingskypingsky
上一篇 2016-09-06
下一篇 2016-09-06

相关推荐

  • N26 第三周作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@localhost ~]# useradd tom [root@localhost ~]# echo "123456" | passwd –st…

    Linux干货 2017-01-20
  • Linux下软链接与硬链接

    Linux下软链接与硬链接的区别 Linux中的文件都文件名和数据,在linux上面被分为两个部分:元数据与数据。用户数据,即文件数据块(data block),数据块是记录文件真实内容的地方,而元数据是文件的附加属性,如大小,创建时间,所有者等信息。在Linux中,元数据中的inode号(inode是文件的元数据的一部分,但其不包含文件名,inode号即索…

    Linux干货 2016-10-20
  • RHCE基础实验

    实验:配额实现 1. 启用配额功能 vim /etc/fstab defaults usrquota,grpquota mount -o remount /home 2. 创建配额数据库 quotacheck -cug /home 3. 启用数据库 quotaon /home quotaon -p /home 查看 4. edquota wang setqu…

    Linux干货 2017-05-02
  • 浅谈群红包的实现

    前言:红包是支付的方式, 也是社交的延伸。群红包在这两块领域串联得很好, 表现尤为的浓墨重彩. 承接上两篇技术浅谈:1). 浅谈接龙红包的技术实现.2). 浅谈微信红包摇一摇的技术实现.这一次, 让我们谈谈群红包的技术实现. 一为是红包的分配算法, 二为竞抢的技术实现. 分配算法:最初玩群红包的时候, 并没有意识到分配算法的难度…

    Linux干货 2015-03-10
  • read,locate ,find 的总结及相关联系

    read 变量名 read 变量名1 [变量名2] < 文件名不支持管道read 变量名1 [变量名2] <<< “值1 [值2] …”使用read来把输入值分配给一个或者多个shell变量     -p 指定要显示的提示     # read -p…

    Linux干货 2017-08-12
  • 计算机组成及功能

    计算器:进行逻辑和算数运算 控制器:读取,接受,发出控制指令 存储器:存取程序和数据 I/O设备:输入指令并显示到标准输出设备

    Linux干货 2018-03-03