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

标签:
lvmcinder-volume扩容存储zhangguoqing |
分类: 解决方案 |
Linux中LVM 磁盘管理学习实验笔记
一直对LVM的概念和实际使用不太熟练,借此文实验笔记加深印象也方便以后再次用到时查看。全文共三个部分:第一部分是LVM的基础知识和常规操作;第二部分为情景演练,添加/删除PV,分别对VG和LV进行扩容和缩容;第三部分为应用,将devstack创建的openstack环境中的默认10GB的cinder-volume扩展到20GB (RDO部署的OpenStack环境中的cinder-volume扩容也适用)。
第一部分
传统磁盘管理方式
使用MBR(Master Boot Recorder)先对一个物理硬盘进行分区;然后再将该分区格式化为将要使用的文件系统;最后将分区挂载到Linux操作系统上即可使用。
缺点:硬盘分区一旦创建,就无法再动态调整大小,磁盘空间不足时需要添加新的物理磁盘,进行分区、格式化和挂载使用(迁移数据)。
http://s4/bmiddle/0020LIaCzy7aqiJA4krf3&690磁盘管理学习实验笔记" TITLE="Linux中LVM
上图是在OpenStack中创建的一个CentOS7虚拟机,nova 使用的镜像在创建虚拟机时已经将物理磁盘/dev/vda进行分区,创建了一个物理分区/dev/vda1作为操作系统盘,格式化后并被挂载到/根目录下使用。可见物理分区/dev/vda1空间已经是固定40GB,后期使用时无法再进行调整其大小。
LVM的磁盘管理方式
LVM(Logical volume Manager)是逻辑卷管理的简称,LVM技术能对磁盘空间进行动态管理。工作原理是将底层的物理磁盘抽象为逻辑卷供上层使用,而不是让应用直接访问物理磁盘分区的文件系统。即使用逻辑卷LV(Logical Volume)取代传统的物理分区,然后格式化LV成想要的文件系统,最后挂载就可以使用了。
①PE(Physical Extend)
②PV(Physical Volume) 物理卷
③VG(Volume Group) 卷组
④LV(Logical Volume) 逻辑卷
http://s6/mw690/0020LIaCzy7aqiOSBBb45&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
概念一: PV(Physical Volume)物理卷
可以将物理硬盘直接格式化为PV(物理卷),它是由若干个PE(Physical Extend,物理拓展)组成,PE是LVM管理中最小的存储单元,默认大小为4MB。
PV的常规操作
查看当前系统中的PV物理卷
# pvscan
将物理磁盘/dev/vdb和/dev/vdc格式为PV物理卷
# pvcreate /dev/vdb
# pvcreate /dev/vdc
查看当前系统中的PV物理卷
# pvscan
# pvs
查看当前系统中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
概念二 VG(Volume Group)卷组
VG卷组是一个抽象的存储空间池,可容纳若干个PV物理卷(将来自若干个PV里的PE视为一个整体存储体)。本质是将若干个PV物理卷分组的操作,故一般会指定一个有意义的名称,并且VG卷组可以随时添加或者移除这些物理磁盘PV。而PE的数量直接决定空间的大小。创建VG后可以在/dev目录下看到VG的信息,表示为/dev/vgname。
扩充VG:添加PV
VG的常规操作:
查看当前系统中VG
# vgscan
创建一个VG,并指定名称为vg-001,包含/dev/vdb和/dev/vdc两个PV
# vgcreate vg-001 /dev/vdb /dev/vdc
查看当前系统中的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
添加PV /dev/vdc到卷组vg-001中
# vgextend vg-001 /dev/vdc
概念三 LV(Logical Volume)逻辑卷
LV逻辑卷类似于传统磁盘管理中的物理磁盘分区,是能将其格式化成想要使用的文件系统,并能直接挂载到系统目录下直接使用的存储资源(PE物理拓展,PV物理卷,VG卷组是不能直接使用的)。一个VG卷组下可以创建若干LV逻辑卷,创建LV本质上就是从VG中划分若干数量PE的操作。创建LV后可以在/dev目录下看到LV的信息,表示为/dev/vgname/lvname。
扩充LV:添加PE
LV的常规操作
查看当前系统中的LV逻辑卷
# lvscan
# lvs
# lvdisplay
基于VG卷组vg-001创建LV逻辑卷lv-001,大小为5GB
# lvcreate -n lv-001 -L 5G vg-001
# 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
# lvs
# lvdisplay
缩小LV逻辑卷lv-001的容量到2GB
# lvreduce -L -6G /dev/vg-001/lv-001
Do you really want to reduce vg-001/lv-001? [y/n]: y
从VG卷组vg-001中删除LV逻辑卷lv-003
#
lvremove
Do you really want to remove active logical volume vg-001/lv-003? [y/n]: y
格式化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:
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
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
# 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逻辑卷扩容(可在线)
确保LV在VG中还有充足的空间(Free
# 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)加入到VG(vg-001)中
# vgextend vg-001 /dev/vdd
# vgdisplay
演练:VG卷组缩容
必须将VG中的所以LVM都卸载掉
# umount /mnt/lv/
将PV(/dev/vdc)从VG(vg-001)中 移除
# vgreduce vg-001 /dev/vdc
# vgdisplay
检验验证
# mount
/dev/vg-001/lv-001
# cat /mnt/lv/file.txt
第三部分
查看当前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:
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
# pvs
将PV /dev/loop2加入到VG stack-volumes-lvmdriver-1中
# vgextend
stack-volumes-lvmdriver-1
# pvs
检查验证
# vgs
#
vgdisplay
附录: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