加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Linux中LVM 磁盘管理学习实验笔记

(2017-04-19 15:26:53)
标签:

lvm

cinder-volume

扩容

存储

zhangguoqing

分类: 解决方案

LinuxLVM 磁盘管理学习实验笔记

 

一直对LVM的概念和实际使用不太熟练,借此文实验笔记加深印象也方便以后再次用到时查看。全文共三个部分:第一部分是LVM的基础知识和常规操作;第二部分为情景演练,添加/删除PV,分别对VGLV进行扩容和缩容;第三部分为应用,将devstack创建的openstack环境中的默认10GBcinder-volume扩展到20GB (RDO部署的OpenStack环境中的cinder-volume扩容也适用)

 

第一部分  基础知识与常规操作

传统磁盘管理方式

使用MBR(Master Boot Recorder)先对一个物理硬盘进行分区;然后再将该分区格式化为将要使用的文件系统;最后将分区挂载到Linux操作系统上即可使用。

缺点:硬盘分区一旦创建,就无法再动态调整大小,磁盘空间不足时需要添加新的物理磁盘,进行分区、格式化和挂载使用(迁移数据)。

http://s4/bmiddle/0020LIaCzy7aqiJA4krf3&690磁盘管理学习实验笔记" TITLE="Linux中LVM 磁盘管理学习实验笔记" />

http://s1/bmiddle/0020LIaCzy7aqiKSYDuf0&690磁盘管理学习实验笔记" TITLE="Linux中LVM 磁盘管理学习实验笔记" />

上图是在OpenStack中创建的一个CentOS7虚拟机,nova 使用的镜像在创建虚拟机时已经将物理磁盘/dev/vda进行分区,创建了一个物理分区/dev/vda1作为操作系统盘,格式化后并被挂载到/根目录下使用。可见物理分区/dev/vda1空间已经是固定40GB,后期使用时无法再进行调整其大小。

 

LVM的磁盘管理方式

LVM(Logical volume Manager)是逻辑卷管理的简称,LVM技术能对磁盘空间进行动态管理。工作原理是将底层的物理磁盘抽象为逻辑卷供上层使用,而不是让应用直接访问物理磁盘分区的文件系统。即使用逻辑卷LVLogical Volume)取代传统的物理分区,然后格式化LV成想要的文件系统,最后挂载就可以使用了。

PE(Physical Extend)   物理拓展

PV(Physical Volume)  物理卷

VG(Volume Group)  卷组

LV(Logical Volume)  逻辑卷

 

http://s6/mw690/0020LIaCzy7aqiOSBBb45&690磁盘管理学习实验笔记" TITLE="Linux中LVM 磁盘管理学习实验笔记" />

http://s2/bmiddle/0020LIaCzy7aqiQgzjH51&690磁盘管理学习实验笔记" TITLE="Linux中LVM 磁盘管理学习实验笔记" />

 

上图中在虚拟机中另外挂载了两个云硬盘Volume分别是/dev/vdb 80GB/dev/vdc 40GB。在接下来的实验中将/dev/vda/dev/vdb/dev/vdc视为三个物理磁盘,其中物理磁盘/dev/vda在创建虚拟机时已经自动创建了一个物理分区/dev/vda1作为操作系统盘,而/dev/vdb/dev/vdc暂未进行分区,接下来作为实验附加的两块物理磁盘。

# yum install lvm2

                                         

概念一: PVPhysical Volume)物理卷

可以将物理硬盘直接格式化为PV(物理卷),它是由若干个PEPhysical Extend,物理拓展)组成,PELVM管理中最小的存储单元,默认大小为4MB

 

PV的常规操作

查看当前系统中的PV物理卷

# pvscan

  No matching physical volumes found

 

将物理磁盘/dev/vdb/dev/vdc格式为PV物理卷

# pvcreate /dev/vdb

# pvcreate /dev/vdc

 

查看当前系统中的PV物理卷

# pvscan

  PV /dev/vdc                      lvm2 [40.00 GiB]

  PV /dev/vdb                      lvm2 [80.00 GiB]

  Total: 2 [120.00 GiB] / in use: 0 [0   ] / in no VG: 2 [120.00 GiB]

# pvs

  PV         VG Fmt  Attr PSize  PFree

  /dev/vdb      lvm2 ---  80.00g 80.00g

  /dev/vdc      lvm2 ---  40.00g 40.00g

 http://s12/bmiddle/0020LIaCzy7aqiUZkkr1b&690磁盘管理学习实验笔记" TITLE="Linux中LVM 磁盘管理学习实验笔记" />


查看当前系统中PV物理卷的详情

# pvdisplay

# pvdisplay /dev/vdb

# pvdisplay /dev/vdc

http://s11/bmiddle/0020LIaCzy7aqiWmw1Y2a&690磁盘管理学习实验笔记" TITLE="Linux中LVM 磁盘管理学习实验笔记" />

 

删除一个PV物理卷

# pvremove /dev/vdb

http://s16/bmiddle/0020LIaCzy7aqiZdNjV3f&690磁盘管理学习实验笔记" TITLE="Linux中LVM 磁盘管理学习实验笔记" />

 

概念二 VGVolume Group)卷组

VG卷组是一个抽象的存储空间池,可容纳若干个PV物理卷(将来自若干个PV里的PE视为一个整体存储体)。本质是将若干个PV物理卷分组的操作,故一般会指定一个有意义的名称,并且VG卷组可以随时添加或者移除这些物理磁盘PV。而PE的数量直接决定空间的大小。创建VG后可以在/dev目录下看到VG的信息,表示为/dev/vgname

扩充VG:添加PV           缩减VG:移除PV

 

VG的常规操作:

查看当前系统中VG

# vgscan

  Reading volume groups from cache.

 

创建一个VG,并指定名称为vg-001,包含/dev/vdb/dev/vdc两个PV

# vgcreate vg-001 /dev/vdb /dev/vdc

  Volume group "vg-001" successfully created

 

查看当前系统中的VG(此时有两个PV,容量为80GB+40GB

# vgscan

# vgs

# vgdisplay

# vgdisplay vg-001

http://s3/bmiddle/0020LIaCzy7aqj2m5Dc22&690磁盘管理学习实验笔记" TITLE="Linux中LVM 磁盘管理学习实验笔记" />

将一个PV从一个VG卷组中移除(此时有一个PV,容量为80GB

# vgreduce vg-001 /dev/vdc

# vgdisplay vg-001

 

# vgreduce vg-001 /dev/vdb

  Can't remove final physical volume "/dev/vdb" from volume group "vg-001"

 

添加PV /dev/vdc到卷组vg-001

# vgextend vg-001 /dev/vdc

  Volume group "vg-001" successfully extended

 

 

概念三 LVLogical Volume)逻辑卷

LV逻辑卷类似于传统磁盘管理中的物理磁盘分区,是能将其格式化成想要使用的文件系统,并能直接挂载到系统目录下直接使用的存储资源(PE物理拓展,PV物理卷,VG卷组是不能直接使用的)。一个VG卷组下可以创建若干LV逻辑卷,创建LV本质上就是从VG中划分若干数量PE的操作。创建LV后可以在/dev目录下看到LV的信息,表示为/dev/vgname/lvname

扩充LV:添加PE            缩减LV:移除PE

 

LV的常规操作

查看当前系统中的LV逻辑卷

# lvscan

# lvs

# lvdisplay

 

基于VG卷组vg-001创建LV逻辑卷lv-001,大小为5GB

# lvcreate -n lv-001 -L 5G vg-001

  Logical volume "lv-001" created.

 

# ll /dev/vg-001/

lrwxrwxrwx. 1 root root 7 Apr 19 03:56 lv-001 -> ../dm-0

http://s15/bmiddle/0020LIaCzy7aqj68wKW1e&690磁盘管理学习实验笔记" TITLE="Linux中LVM 磁盘管理学习实验笔记" />

 

扩展LV逻辑卷lv-001的容量到8GB

# lvextend -L +3G /dev/vg-001/lv-001

  Size of logical volume vg-001/lv-001 changed from 5.00 GiB (1280 extents) to 8.00 GiB (2048 extents).

  Logical volume vg-001/lv-001 successfully resized.

# lvs

# lvdisplay

 

缩小LV逻辑卷lv-001的容量到2GB

# lvreduce -L -6G /dev/vg-001/lv-001

  WARNING: Reducing active logical volume to 2.00 GiB.

  THIS MAY DESTROY YOUR DATA (filesystem etc.)

Do you really want to reduce vg-001/lv-001? [y/n]: y

  Size of logical volume vg-001/lv-001 changed from 8.00 GiB (2047 extents) to 2.00 GiB (511 extents).

  Logical volume vg-001/lv-001 successfully resized.

 

VG卷组vg-001中删除LV逻辑卷lv-003

# lvremove  /dev/vg-001/lv-003

Do you really want to remove active logical volume vg-001/lv-003? [y/n]: y

  Logical volume "lv-003" successfully removed

 

格式化LV逻辑卷并挂载使用

格式化LV逻辑卷lv-001

# mkfs.ext4 /dev/vg-001/lv-001

mke2fs 1.42.9 (28-Dec-2013)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=0 blocks, Stripe width=0 blocks

327680 inodes, 1310720 blocks

65536 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=1342177280

40 block groups

32768 blocks per group, 32768 fragments per group

8192 inodes per group

Superblock backups stored on blocks:

              32768, 98304, 163840, 229376, 294912, 819200, 884736

 

Allocating group tables: done

Writing inode tables: done

Creating journal (32768 blocks): done

Writing superblocks and filesystem accounting information: done

 

挂载LV逻辑卷lv-001到系统目录/mnt/lv

# mkdir /mnt/lv

# mount /dev/vg-001/lv-001 /mnt/lv/

# touch /mnt/lv/file1.txt

# ll /mnt/lv/

total 16

-rw-r--r--. 1 root root     0 Apr 19 04:21 file1.txt

drwx------. 2 root root 16384 Apr 19 04:18 lost+found

 

 

 

第二部分  情景演练

Linux使用LVM的基本过程

1、将物理硬盘格式化成PV(物理卷)

# pvcreate /dev/vdb

# pvcreate /dev/vdc

# pvdisplay

 

2、创建卷组(VG),并将PV加入到卷组中

# vgcreate vg-001 /dev/vdb  /dev/vdc

# vgdisplay

或者

# vgcreate vg-001 /dev/vdb

# vgextend vg-001 /dev/vdc

# vgdisplay

 

3、基于卷组(VG)创建逻辑卷(LV)

# lvcreate -n lv-001 -L 2G vg-001

# lvcreate -n lv-002 -L 3G vg-001

# lvdisplay

# ll /dev/vg-001/

total 0

lrwxrwxrwx. 1 root root 7 Apr 19 05:53 lv-001 -> ../dm-0

lrwxrwxrwx. 1 root root 7 Apr 19 05:53 lv-002 -> ../dm-1

 

4、格式化LV并挂载使用

# mkfs.ext4 /dev/vg-001/lv-001

# mkdir /mnt/lv

# mount /dev/vg-001/lv-001 /mnt/lv

# touch /mnt/lv/file.txt

# echo "THIS IS A TEST" > /mnt/lv/file.txt

# df -h

 

演练:LV逻辑卷扩容(可在线)

确保LVVG中还有充足的空间(Free  PE / Size

# vgdisplay

使用lvextend命令为lv-001(原始2GB)扩容3GB

# lvextend -L +3G /dev/vg-001/lv-001

检查结果(lv-001的容量应为5GB

# lvdisplay

# df -h (此处显示的lv-001还是原始的2GB)

更新文件系统

# resize2fs /dev/vg-001/lv-001

检查验证

# df -h

# cat /mnt/lv/file.txt

 

演练:LV逻辑卷缩容(必须离线)

卸载以挂载的lv-001

# umount /mnt/lv/

缩小文件系统到3GB大小

# e2fsck -f /dev/vg-001/lv-001

# resize2fs /dev/vg-001/lv-001 3G

缩小LV(减小2GB

# lvreduce -L -2G /dev/vg-001/lv-001

检查验证

# lvdisplay

# mount /dev/vg-001/lv-001 /mnt/lv/

# cat /mnt/lv/file.txt

# df -h

 

演练:VG卷组扩容(可在线)

向系统中添加一块物理硬盘(/dev/vdd),并格式化为PV物理卷

# pvcreate /dev/vdd

# pvdisplay

将新的PV/dev/vdd)加入到VGvg-001)中

# vgextend vg-001 /dev/vdd

# vgdisplay

 

演练:VG卷组缩容

必须将VG中的所以LVM都卸载掉

# umount /mnt/lv/

PV/dev/vdc)从VGvg-001)中 移除

# vgreduce vg-001 /dev/vdc

# vgdisplay

检验验证

# mount /dev/vg-001/lv-001  /mnt/lv/

# cat /mnt/lv/file.txt

 

 

第三部分  拓展devstack中的cinder-volume空间

查看当前cinder配置

$ vim /etc/cinder/cinder.conf

[lvmdriver-1]

image_volume_cache_enabled = True

lvm_type = default

iscsi_helper = tgtadm

volume_group = stack-volumes-lvmdriver-1

volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver

volume_backend_name = lvmdriver-1

 

http://s3/mw690/0020LIaCzy7aqja9wLE82&690磁盘管理学习实验笔记" TITLE="Linux中LVM 磁盘管理学习实验笔记" />

目标是拓展VG stack-volumes-lvmdriver-1的容量(由当前的10GB拓展到20GB)

 

详细过程

准备新的PV物理卷,使用loop设备/dev/loop2

# dd if=/dev/zero of=new-cinder-volumes bs=1 count=0 seek=10G

# losetup /dev/loop2 new-cinder-volumes

# fdisk /dev/loop2

Welcome to fdisk (util-linux 2.23.2).

 

Changes will remain in memory only, until you decide to write them.

Be careful before using the write command.

 

Device does not contain a recognized partition table

Building a new DOS disklabel with disk identifier 0x088a95cb.

 

Command (m for help): n

Partition type:

    primary (0 primary, 0 extended, 4 free)

    extended

Select (default p): p

Partition number (1-4, default 1): 1

First sector (2048-20971519, default 2048):[回车]

Using default value 2048

Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): [回车]

Using default value 20971519

Partition 1 of type Linux and of size 10 GiB is set

 

Command (m for help): t

Selected partition 1

Hex code (type L to list all codes): 8e

Changed type of partition 'Linux' to 'Linux LVM'

 

Command (m for help): w

The partition table has been altered!

 

Calling ioctl() to re-read partition table.

 

WARNING: Re-reading the partition table failed with error 22: Invalid argument.

The kernel still uses the old table. The new table will be used at

the next reboot or after you run partprobe(8) or kpartx(8)

Syncing disks.

 

将物理磁盘/dev/loop2格式化为PV物理卷

# pvcreate /dev/loop2

WARNING: dos signature detected on /dev/loop2 at offset 510. Wipe it? [y/n]: y

  Wiping dos signature on /dev/loop2.

  Physical volume "/dev/loop2" successfully created.

# pvs

  PV         VG                        Fmt  Attr PSize  PFree

  /dev/loop0 stack-volumes-default     lvm2 a--  10.01g 10.01g

  /dev/loop1 stack-volumes-lvmdriver-1 lvm2 a--  10.01g  9.01g

  /dev/loop2                           lvm2 ---  10.00g 10.00g 【还不属于任何VG

 

PV /dev/loop2加入到VG stack-volumes-lvmdriver-1

# vgextend stack-volumes-lvmdriver-1  /dev/loop2

  Volume group "stack-volumes-lvmdriver-1" successfully extended

# pvs

  PV         VG                        Fmt  Attr PSize  PFree

  /dev/loop0 stack-volumes-default     lvm2 a--  10.01g 10.01g

  /dev/loop1 stack-volumes-lvmdriver-1 lvm2 a--  10.01g  9.01g

  /dev/loop2 stack-volumes-lvmdriver-1 lvm2 a--  10.00g 10.00g 【属于VG stack-volumes-lvmdriver-1

 

检查验证

# vgs

  VG                        #PV #LV #SN Attr   VSize  VFree

  stack-volumes-default         0 wz--n- 10.01g 10.01g

  stack-volumes-lvmdriver-1     0 wz--n- 20.00g 19.00g

# vgdisplay  stack-volumes-lvmdriver-1

  --- Volume group ---

  VG Name               stack-volumes-lvmdriver-1

  System ID

  Format                lvm2

  Metadata Areas        2

  Metadata Sequence No  5

  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               20.00 GiB

  PE Size               4.00 MiB

  Total PE              5121

  Alloc PE / Size       256 / 1.00 GiB

  Free  PE / Size       4865 / 19.00 GiB

  VG UUID               G1A9V9-jnqw-zpAY-2w6C-981W-iFQ4-jCmcfP

 

 

附录:loop设备的简易管理

查看未使用的loop设备

# losetup –f

 

查看使用的loop设备挂载情况

# losetup -a

 

挂载到空闲loop设备上

losetup -f /path/name.img

 

挂载到指定loop设备上

# losetup /dev/loop2 /path/name.img

 

删除loop设备

# losetup -d /dev/loop2

 

参考

http://www.cnblogs.com/xiaoluo501395377/archive/2013/05/22/3093405.html

http://www.cnblogs.com/xiaoluo501395377/archive/2013/05/24/3096087.html

http://www.cnblogs.com/xiaoluo501395377/archive/2013/05/24/3097785.html



 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有