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 08:51
下一篇 2016-09-06 08:51

相关推荐

  • 第三周作业

      1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 who | cut -d" " -f1 | sort -u who | cut -d" " -f1 | uniq 2、取出最后登录到当前系统的用户的相关信息。    who | tail -1 …

    Linux干货 2016-11-19
  • linux添加用户

    今天给大家说一下linux添加用户,大家可能觉得添加用户很简单,’adduser 用户名’就这个命令搞掂了。那么大家知道这个命令帮我们完成了那些事情呢,今天就给大家普及一下 添加一个linux用户需要关系到以下几个文件: 保存用户组的/etc/group文件。 保存用户ID和密码的/etc/passwd文件。 在home目录下生产一个…

    Linux干货 2017-05-28
  • 编译内核制作小型的linux

    1.  前言       今天我将会给大家带来如何定制一个属于自己linux系统,也就是编译内核,那为什么要编译内核呢? 内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统管理,决定着系统的性能和稳定性。Linux作为一个自由软件,在广 大爱好者的支持下,内核版本不…

    Linux干货 2016-08-03
  • ansible进阶(roles应用)

    ansible 进阶 一、roles简介 一个项目从开始到结束,不是简单几十个playbook就可以完事了,当文件数很多,有上百个的话,仅通过简单的includes不停的引用,那最终的结果错综复杂。这个时候ansible roles就可以很好的发挥它的作用了。 roles,字面意思是角色的含义,可以理解为有相互关联功能的集合。我们把安装ntp、mem、ngi…

    2017-01-05
  • shell的变量功能

                                                      &nbsp…

    2017-08-05
  • 2016-10-18作业

    2016-10-17 课后作业  1. 生产环境发现一台服务器系统时间产生偏差,造成服务异常,请帮忙校正。     1)首先,查看本地硬件时间是否正确,命令如下:       hwclock       如果该时间是正确的,使用该时间来更新系统时间。命令如下: &nbs…

    Linux干货 2016-10-20