LVM是逻辑盘卷管理(Logical Volume Manager)的简称。

Table of Contents

安装 Linux 操作系统时遇到的一个最常见的难以决定的问题就是如何正确地给评估各分区大小,以分配合适的硬盘空间。 而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号链接,或者使用调整分区大小的工具(比如 PatitionMagic 等),但这都只是暂时解决办法,没有根本解决问题。 随着 Linux 的逻辑盘卷管理功能的出现,这些问题都迎刃而解,使得用户在无需停机的情况下方便地调整各个分区大小。

Demo

目标

  1. 用三块磁盘sdc,sdd,sde都是2G。先把sdc,sdd,组成卷组no1vg大小为4G,划分出逻辑卷data大小为200M,把该逻辑卷挂载到lvmtest目录,再对逻辑卷data进行扩展到容量为300M,对卷组no1vg进行扩展,也就是把磁盘sde加入no1vg使其容量为6G。
  2. 对逻辑卷data,把它的名字改为data2,然后减少逻辑卷data2容量到250M,最后把逻辑卷data2移除掉;对卷组no1vg改名为vgtest,然后减少卷组vgtest容量到4G;最后移去物理卷sde等相关操作的命令.

Steps

  1. 分别把三块磁盘创建成Linux lvm

    # check if lvm2 is installed
    # sudo dpkg -l lvm2
    # 若没安装则安装
    # sudo apt-get install lvm2
    # sudo dpkg -l lvm2
    # sudo fdisk /dev/sdc
    lvm01
    lvm02
    

    三块磁盘的分区结果相同,操作过程也相同。

  2. 初始化sdc,sdd,sde

    # 初始化前先查看下
    # sudo pvscan
    # sudo pvdisplay
    # 开始初始化
    lvm03
    # 再查看下,和之前有什么不同
    # sudo pvdisplay
    
  3. 创建卷组no1vg,大小为4G

    # 先查看下
    # sudo vgdisplay
    # 创建卷组no1vg
    # sudo vgcreate no1vg /dev/sd[c,d]1
    # sudo vgdisplay no1vg
    lvm04
    

    默认的情况,PE为4M,也就是最大的LV可为256G.

  4. 创建逻辑卷data,大小为200M

    # 先查看
    # sudo lvdisplay
    # 创建逻辑卷data
    # sudo lvcreate –n data –L 200M no1vg
    # or
    # sudo lvcreate –n data –l 50 no1vg
    # sudo lvdisplay /dev/no1vg/data
    

    :-L 后面是大小,若你给的不是4的倍数,它会给你自动分配成4的倍数的大小的空间。-l 后面是PE的个数,504=200M,所以两个命令的结果是相同的。

  5. 格式化逻辑卷data,用ext4文件系统

    # sudo mkfs.ext4 /dev/no1vg/data
    
  6. 挂载逻辑卷data到文件夹lvmtest

    #sudo mount /dev/no1vg/data lvmtest
    lvm05
    #sudo cd lvmtest
    #sudo mkdir test.txt
    
  7. 对逻辑卷data进行扩展到容量为300M

    # 先查看扩展前的信息
    # sudo lvdisplay /dev/no1vg/data
    # 先umount掉挂载的逻辑卷data
    # sudo umount lvmtest
    # sudo lvextend –L +100M /dev/no1vg/data
    # 强行检查data逻辑卷
    # sudo e2fsck –f /dev/no1vg/data
    # 重新定义分区大小
    # sudo resize2fs /dev/no1vg/data
    # 先查看扩展后的信息
    # sudo lvdisplay /dev/no1vg/data
    # sudo mount /dev/no1vg/data lvmtest
    # sudo df –h
    lvm08
    查看卷组信息
    lvm07
    
  8. 扩展卷组no1vg,把sde磁盘加入其中,容量到达6G

    # sudo vgextend no1vg /dev/sde1
    

    查看扩展后的卷组信息

    # sudo vgdisplay /dev/no1vg
    lvm10
    扩展后的数据仍在
    lvm11
    

第二个实验目标

  1. 辑卷data改名为data2,并减少其容量到250M,并把它移除

    # sudo lvrename /dev/no1vg/data /dev/no1vg/data2
    # 查看逻辑卷信息
    # sudo lvs
    # or
    # sudo lvscan
    # or
    # sudo lvdisplay
    

    在初次做这个实验时出现如下问题:

    缩减其容量后发现,挂载不上,重新格式化后,才可以挂载,后来经过查询要按如下步骤操作:先使用resize2fs 对其操作后,接着用e2fsck -f ,再用lvreduce;与增加容量时的操作相反,增加时是先用lvextend后,再用e2fsck -f ,接着是resize2fs.

    # sudo resize2fs /dev/no1vg/data2 250M<br />
    # sudo e2fsck -f /dev/no1vg/data2<br />
    # sudo lvreduce -L 50M /dev/no1vg/data2</p>
    # 停止逻辑卷data2
    # sudo lvchange -a n /dev/no1vg/data2
    # 查看其状态
    # sudo lvdisplay
    # 激活逻辑卷data2
    # sudo lvchange -a y /dev/no1vg/data2
    # 查看其状态
    # sudo lvdisplay
    # 通过快照备份逻辑卷
    # sudo lvcreate -s -L 250M -n snapno1 /dev/no1vg/data2
    # 查看
    # sudo lvs
    

    快照不需格式化就可以直接使用

    # 挂载快照到目录snap
    #sudo mount /dev/no1vg/snapno1 snap
    

    移除逻辑卷data2前,若有快照,就要先移除快照,否则移除是不成功的

    # 移除快照snapno1
    # sudo lvremove /dev/no1vg/snapno1
    # 移除逻辑卷的命令与移除快照相同
    # sudo lvremove /dev/no1vg/data2
    # 查看逻辑卷信息
    # sudo lvdisplay
    # sudo lvs
    # sudo lvscan
    
  2. 对卷组的改名,缩减容量,分离卷组,移除卷组,合并卷组操作

    # 对卷组no1vg改名为vgtest
    # sudo vgrename no1vg vgtest
    # 查看
    # sudo vgs
    # or
    # sudo vgscan
    # or
    # sudo vgdisplay
    # 把物理卷sde从卷组vgtest中移除也就是缩减了其容量从6G到4G
    # sudo vgreduce /dev/vgtest /dev/sde1
    # sudo vgdisplay
    # 停止卷组vgtest
    # sudo vgchange -a n /dev/vgtest
    # 停止卷组后,把物理卷sdd1从卷组vgtest分离出来,并把加入vgtest2中
    # sudo vgsplit /dev/vgtest /dev/vgtest2 /dev/sdd1
    # 原有的逻辑卷的数据仍在
    # sudo vgdiaplay /dev/vgtest
    # 激活卷组vgtest
    # sudo vgchange -a y /dev/vgtest
    # 移除卷组vgtest
    # sudo vgremove /dev/vgtest
    

    合并卷组:把卷组vgtest1,vgtest2合并到卷组vgtest 可以先看下vgmerge的用法

    # man vgmerge<br />
    # sudo vgmerge /dev/vgtest /dev/vgtest1<br />
    # sudo vgmerge -v /dev/vgtest /dev/vgtest2<br />
    

    另外还有卷组的导出vgexport

    # sudo vgexport /dev/vgtest
    

    卷组的导入

    #sudo vgimport vgtest /dev/sd[c,d]1<br />
    
  3. 物理卷sde的移除

    先将sde是数据移到sdc上,这个要花一点时间

    # sudo pvmove /dev/sde1 /dev/sdc1
    

    移完后数据仍在 数据移完后,将其移除

    # sudo pvremove /dev/sde1
    

Conclusion

LVM 能放大也能缩小,能拆分能合并,并且数据不丢,在实际的应用中,当然不建议改动已建好的逻辑卷,卷组,物理卷的大小,理论上数据不会丢,可又有谁能保证在线操作时,就没问题呢。

Ubuntu 挂载 LVM

本人电脑有 Windows 7、Fedora 和 Ubuntu 10.04 三个系统,因学习需要装了 Ubuntu 10.04,不料发现不能加载 lvm,故查阅资料,借鉴别人,整理如下:

  1. 首先使用vgscan 扫描 lvm 结果如下
oxnz@a2di:/$ sudo vgscan
Reading all physical volumes. This may take a while...
Found volume group "vg_zpwtechinc" using metadata type lvm2

2.通过 vgdisplay vg_zpwtechinc 查看 lvm 的 VG UUID

oxnz@a2di:/$ sudo vgdisplay vg_zpwtechinc
--- Volume group ---
VG Name VolGroup00
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 19.62 GiB
PE Size 32.00 MiB
Total PE 628
Alloc PE / Size 628 / 19.62 GiB
Free PE / Size 0 / 0
VG UUID xPw6Yb-1SYW-ayBT-TqOP-hF4i-w02x-vY0165

3.重命名(本人认为此步可省,可能是源于简洁吧,呵呵,没试,你可以试试,呵呵)

oxnz@a2di:/$ sudo vgrename VolGroup00 /dev/vg0
Volume group "VolGroup00" successfully renamed to "vg0"

这个时候通过 vgdisplay 就可以看到 VG的信息了

oxnz@a2di:/$ sudo vgdisplay
--- Volume group ---
VG Name vg0
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 19.62 GiB
PE Size 32.00 MiB
Total PE 628
Alloc PE / Size 628 / 19.62 GiB
Free PE / Size 0 / 0
VG UUID xPw6Yb-1SYW-ayBT-TqOP-hF4i-w02x-vY0165

4.激活VG

VG重命名后,默认是非ACTIVE状态,我们要通过以下方式激活VG

oxnz@a2di:/$ sudo lvscan
ACTIVE '/dev/vg0/LogVol00' [18.16 GiB] inherit
ACTIVE '/dev/vg0/LogVol01' [1.47 GiB] inherit

激活 VG

oxnz@a2di/$ sudo vgchange -ay /dev/vg0
2 logical volume(s) in volume group "vg0" now active

查看状态

oxnz@a2di:/$ sudo lvscan
/LogVol00' [18.16 GiB] inherit
ACTIVE '/dev/vg0/LogVol01' [1.47 GiB] inherit
oxnz@a2di:/$ sudo vgscan
Reading all physical volumes. This may take a while...
Found volume group "vg0" using metadata type lvm2

到此为止,可以在Ubuntu下看见久违的centos了,不过/home下的用户进不去,实乃遗憾,说权限不够,改了权限也不行,期待高手指点。 挂载LVM问题解决