文档章节

Linux LVM管理

雨中人X
 雨中人X
发布于 2015/12/05 15:25
字数 2345
阅读 119
收藏 14

对于Linux用户而言,在安装一台Linux机器的时候,遇到的问题之一就是给各分区估计和分派足够的硬盘空间。无论对一个正在为服务器寻找空间的系统管理员,还是一个磁盘即将用尽的普通用户来说,这都是一个非常常见的问题。解决的方法通常是使用符号链接,或者一些调整分区大小的工具(比如parted)。但是,这只是一个暂时性的解决办法,不久,我们又会面临同样的问题。 

  如果你是一个站点的系统管理员,管理着数量众多的、连接在Internet之上的服务器,那么你每关机一分钟,都会给公司带来很大损失。此外,使用这种方法,在修改了分区表之后,每一次都得重新启动系统。LVM(逻辑卷管理程序)可以帮助我们解决这些问题。 

LVM简介 

  Linux LVM可以使管理工作更加轻松。相对于硬盘和分区,LVM是从更高的层次来看待存储空间的。在使用LVM之前,先来看一些将要使用到的相关概念。 

物理卷 

  物理卷是指硬盘分区或者从逻辑上看起来和硬盘分区类似的设备(比如RAID设备)。 

逻辑卷 

  一个或者多个物理卷组成一个逻辑卷。对于LVM而言,逻辑卷类似于非LVM系统中的硬盘分区。逻辑卷可以包含一个文件系统(比如/home或者/usr)。 

卷组 

  一个或者多个逻辑卷组成一个卷组。对于LVM而言,卷组类似于非LVM系统中的物理硬盘。卷组把多个逻辑卷组合在一起,形成一个可管理的单元。 


LVM工作方式 

  下面来看一看LVM到底是怎样工作的。每一个物理卷都被分成几个基本单元,即所谓的PE(Physical Extents)。PE的大小是可变的,但是必须和其所属卷组的物理卷相同。在每一个物理卷里,每一个PE都有一个惟一的编号。PE是一个物理存储里可以被LVM寻址的最小单元。 

  每一个逻辑卷也被分成一些可被寻址的基本单位,即所谓的LE(Logical Extents)。在同一个卷组中,LE的大小和PE是相同的,很显然,LE的大小对于一个卷组中的所有逻辑卷来说都是相同的。 

  在一个物理卷中,每一个PE都有一个惟一的编号,但是对于逻辑卷这并不一定是必需的。这是因为当这些PE ID号不能使用时,逻辑卷可以由一些物理卷组成。因此,LE ID号是用于识别LE以及与之相关的特定PE的。正如前面所提到的,LE和PE之间是一一对应的。每一次存储区域被寻址访问或者LE的ID被使用,都会把数据写在物理存储设备之上。 

  你可能会觉得奇怪,有关逻辑卷和逻辑卷组的所有元数据都存到哪儿去了。类似的在非LVM系统中,有关分区的数据是存储在分区表中,而分区表被存储在了每一个物理卷的起始位置。VGDA(卷组描述符区域)功能就好象是LVM的分区表,它存储在每一个物理卷的起始处。 

  VGDA由以下信息组成: 

  ·一个PV描述符 
  ·一个VG描述符 
  ·LV描述符 
  ·一些PE描述符 

  当系统启动LV时,VG被激活,并且VGDA被加载至内存。VGDA帮助识别LV的实际存储位置。当系统想要访问存储设备时,由VGDA建立起来的映射机制就用于访问实际的物理位置来执行I/O操作。 

开始工作 

  下面具体看一看如何使用LVM。 

  第一步:配置内核。(一般已经内置了)在安装LVM之前,内核之中应该有LVM模块,可以使用以下的步骤来完成: 

#cd /usr/src/linux 
#make menuconfig


  选择Multi-device Support (RAID and LVM)子菜单,选中以下两个选项: 

[CODE]  [*] Multiple devices driver support (RAID and LVM) 
  <*> Logical volume manager (LVM) Support. [/CODE]

注:如果在安装Linux系统时已经安装了LVM相关软件包,上面几步操作可以省略掉,直接到第二步.

  第二步:检查驱动器上空闲硬盘空间的总量。这可以通过以下命令来未完成: 

# df -h 
Filesystem Size Used Avail Use% Mounted on 
/dev/hda1 3.1G 2.7G 398M 87% / 
/dev/hda2 4.0G 3.2G 806M 80% /home 
/dev/hda5 2.1G 1.0G 1.1G 48% /var


  第三步:在硬盘上创建一个LVM分区。使用fdisk或者其它的分区工具来创建一个LVM分区。Linux LVM的分区类型为8e。 

# fdisk /dev/hda 
press p (to print the partition table) and n (to create a new partition)


  第四步:创建一个物理卷。下述命令将在分区的起始处创建一个卷组描述符: 

# pvcreate /dev/hda6 
pvcreate -- -physical volume "/dev/hda6" successfully created 
# pvcreate /dev/hda7 
pvcreate- -- physical volume "/dev/hda7" successfully created


  第五步:创建一个卷组。通过下面的方法创建一个新的卷组,并且添加两个物理卷: 

  # vgcreate test_lvm /dev/hda6 /dev/hda7 
  vgcreate- -- INFO: using default physical extent size 4 MB 
  vgcreate- -- INFO: maximum logical volume size is 255.99 Gigabyte 
  vgcreate- -- doing automatic backup of volume group "test_lvm" 
  vgcreate- -- volume group "test_lvm" successfully created and activated

  上述命令将创建一个名为test_lvm,包含有/dev/hda6和/dev/hda7两个物理卷的卷组。使用下面命令来激活卷组: 

# vgchange -ay test_lvm

  使用“vgdisplay”命令来查看所建立卷组的细节信息。 

  # vgdisplay 
  --- Volume group --- 
  VG Name test_lvm 
  VG Access read/write 
  VG Status available/resizable 
  VG # 0 
  MAX LV 256 
  Cur LV 1 
  Open LV 0 
  MAX LV Size 255.99 GB 
  Max PV 256 
  Cur PV 2 
  Act PV 2 
  VG Size 3.91 GB 
  PE Size 4 MB 
  Total PE 1000 
  Alloc PE / Size 256 / 1 GB 
  Free PE / Size 744 / 2.91 GB 
  VG UUID T34zIt-HDPs-uo6r-cBDT-UjEq-EEPB-GF435E


  第六步:创建一个逻辑卷。使用lvcreate命令在卷组中创建一个逻辑卷: 

# lvcreate -L2G -nlogvol1 test_lvm

  第七步:创建文件系统。在该逻辑卷上选择使用mkfs日志文件系统: 

 # mkfs /dev/test_lvm/logvol1

  使用mount命令来加载新创建的文件系统。 

# mount -t reiserfs /dev/test_lvm/logvol1 /mnt/lv1

  第八步:在/etc/fstab和/etc/lilo.conf中添加一个入口。在/etc/fstab中加入以下入口,在启动时加载文件系统: 

 /dev/test_lvm/logvol1 /mnt/lv1 reiserfs defaults 1 1

  第九步:修改逻辑卷的大小。可以使用lvextend命令方便地修改逻辑卷的大小,增加逻辑卷大小的方法如下: 

  # lvextend -L+1G /dev/test_lvm/logvol1 
  lvextend -- extending logical volume "/dev/test_lvm/logvol1" to 3GB 
  lvextend -- doing automatic backup of volume group "test_lvm" 
  lvextend -- logical volume "/dev/test_lvm/logvol1" successfully extended

 
  类似的,减小逻辑卷大小的方法如下:

    # lvreduce -L-1G /dev/test_lvm/lv1 
  lvreduce -- -Warning: reducing active logical volume to 2GB 
  lvreduce- -- This may destroy your data (filesystem etc.) 
  lvreduce -- -do you really want to reduce "/dev/test_lvm/lv1"? [y/n]: y 
  lvreduce- -- doing automatic backup of volume group "test_lvm" 
  lvreduce- -- logical volume "/dev/test_lvm/lv1" successfully reduced


总结 
     
  从上面的讨论可以看到,LVM具有很好的可扩展性,并且使用起来很直观。一旦卷组建立起来以后,根据需求调整每一个逻辑卷的大小也非常容易。
    但是:boot分区不建议做LVM,boot分区不建议LVMboot分区不建议LVM   重要的事情说三遍,如果boot做了LVM很容易导致系统无法启动,个人亲身经历。


LVM操作的相关命令:
    fdisk -l :查看系统中都认到了那些物理硬盘
    pvdisplay:查看系统中已经创建好的物理卷
    pvcreate:创建一个新的物理卷
    pvremove:删除一个物理卷(也就是从物理卷中删除一个LVM标签)
    vgdisplay:查看系统中的卷组
    vgcreate:创建一个新的卷组
    vgreduce:从卷组中删除一个物理卷(也就是缩小卷组)
    vgremove:删除一个卷组
    lvdisplay:查看系统中已经创建好的逻辑卷
    lvcreate:创建一个新的逻辑卷
    lvreduce:缩小逻辑卷(也就是从一个逻辑卷中减少一些LE)
    lvremove:从系统中删除一个逻辑卷
    mkfs:基于逻辑卷创建一个相应类型的文件系统
    mkdir -p $mount_piont:创建一个挂载目录
    创建好的文件系统位于:
    /dev/$create_vg_name/$lv_name
    mount /dev/$create_vg_name/$lv_name $mount_piont:挂载文件系统

   vgscan:读取系统中创建的所有卷组
   vgchange -a y :激活所有卷组  (开机执行,redhat可在/etc/rc.d/rc.sysinit系统启动初始化脚本里可以找到)
   vgchange -a n :关闭所有卷组(提示:必须在umount所有的文件系统后,才能成功执行



© 著作权归作者所有

雨中人X
粉丝 8
博文 57
码字总数 15326
作品 0
深圳
高级程序员
私信 提问
如何在 Linux 中使用 LVM 创建和扩展交换分区

我们使用 LVM 进行灵活的卷管理,为什么我们不能将 LVM 用于交换分区呢? 这可以让用户在需要时增加交换分区。如果你升级系统中的内存,则需要添加更多交换空间。这有助于你管理运行需要大量...

作者: Ramya Nuvvula
2018/04/26
0
0
Linux手动挂载LVM分区

转自:http://www.itwhy.org/2011/08-08/793.html#3 LVM是什么 LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之...

小卒过河
2011/08/10
4.8K
1
Linux LVM 的使用详解

摘要: Linux用户安装Linux操作系统时遇到的一个最常见的难以决定的问题就是如何正确地给评估各分区大小,以分配合适的硬盘空间。而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号链...

Start-up
2012/05/28
469
0
Stratis 从 ZFS、Btrfs 和 LVM 学到哪些

深入了解这个强大而不繁琐的 Linux 存储管理系统。 在本系列第一部分中提到,Stratis 是一个卷管理文件系统volume-managing filesystem(VMF),功能特性类似于 ZFS 和 Btrfs。在设计 Strati...

09%
2018/06/13
0
0
非常全面的 Linux 知识点总结

Linux博大精深。我只在此讨论一些我对线上Linux机器维护人员的基本需求,比如装机,加硬盘,配网络。只讨论CentOS 6,或者类似的RHEL,当然Ubuntu也可以此类推,但是一些新特性不予讨论,因为...

oschina
2016/04/21
6.4K
13

没有更多内容

加载失败,请刷新页面

加载更多

Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
6
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
8
0
详解箭头函数和普通函数的区别以及箭头函数的注意事项、不适用场景

箭头函数是ES6的API,相信很多人都知道,因为其语法上相对于普通函数更简洁,深受大家的喜爱。就是这种我们日常开发中一直在使用的API,大部分同学却对它的了解程度还是不够深... 普通函数和...

OBKoro1
昨天
7
0
轻量级 HTTP(s) 代理 TinyProxy

CentOS 下安装 TinyProxy yum install -y tinyproxy 启动、停止、重启 # 启动service tinyproxy start# 停止service tinyproxy stop# 重启service tinyproxy restart 相关配置 默认...

Anoyi
昨天
2
0
Linux创建yum仓库

第一步、搞定自己的光盘 #创建文件夹 mkdir -p /media/cdrom #挂载光盘 mount /dev/cdrom /media/cdrom #编辑配置文件使其永久生效 vim /etc/fstab 第二步,编辑yun源 vim /ect yum.repos.d...

究极小怪兽zzz
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部