- LVM命令简介
LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由HeinzMauelshagen在Linux 2.4内核上实现。LVM将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。
与传统的磁盘与分区相比,LVM为计算机提供了更高层次的磁盘存储。它使系统管理员可以更方便的为应用与用户分配存储空间。在LVM管理下的存储卷可以按需要随时改变大小与移除(可能需对文件系统工具进行升级)。LVM也允许按用户组对存储卷进行管理,允许管理员用更直观的名称(如"sales‘、 ‘development‘)代替物理磁盘名(如‘sda‘、‘sdb‘)来标识存储卷。
1.1. LVM组成部分
■.物理卷Physical volume (PV):可以在上面建立卷组的媒介,可以是硬盘分区,也可以是硬盘本身或者回环文件(loopback file)。物理卷包括一个特殊的header,其余部分被切割为一块块物理区域(physical extents)。 Think of physical volumes as big building blocks which can be usedto build your hard drive.
■卷组Volume group (VG):将一组物理卷收集为一个管理单元。Group of physical volumes that are used as storage volume (as onedisk). They contain logical volumes. Think of volume groups as hard drives.
■逻辑卷Logical volume (LV):虚拟分区,由物理区域(physical extents)组成。A "virtual/logical partition" that resides in a volumegroup and is composed of physical extents. Think of logical volumes as normalpartitions.
■物理区域Physical extent (PE):硬盘可供指派给逻辑卷的最小单位(通常为4MB)。A small partof a disk (usually 4MB) that can be assigned to a logical Volume. Think ofphysical extents as parts of disks that can be allocated to any partition.
1.2 LVM基本术语
物理存储介质(Thephysical media):这里指系统的存储设备:硬盘,如:/dev/hda1、/dev/sda等等,是存储系统最低层的存储单元。
物理卷PV(physical volume):物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
卷组VG(Volume Group):LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
逻辑卷LV(logical volume):LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。
PE(physical extent):每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
LE(logical extent):逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。
简单来说就是:
PV:是物理的磁盘分区
VG:LVM中的物理的磁盘分区,也就是PV,必须加入VG,可以将VG理解为一个仓库或者是几个大的硬盘。
LV:也就是从VG中划分的逻辑分区
1.3 PV/VG/LV三者关系图
2. 创建LVM
创建lv,逻辑卷之前首先要创建物理卷其后创建卷组,在卷组之上创建能够被格式化并且挂载使用的逻辑卷。
2.1 常用LVM管理命令
■物理卷/PV管理命令:物理卷命令以pv开头
pvcreate:用于创建物理卷
命令格式:pvcreate /dev/device
pvdisplay:用于显示物理卷的详细信息
命令格式:pvdisplay /dev/device
pvremove:用于删除物理卷
命令格式:pvremove /dev/device
pvscan:用于显示系统中的物理卷
pvmove:移除物理卷
■卷组管理命令:卷组管理命令以vg开头
vgcreate:用于创建卷组
命令格式:vgcreate vgname /dev/device
-s:指定PE大小MB
vgscan:显示系统中的卷组
vgdisplay:显示卷组的详细信息
vgextend:扩展卷组容量
命令格式:vgextend vgname /dev/device
vgreduce:缩减卷组容量。缩减卷组容量之前需要先移除物理卷
命令格式:vgreduce vgname /dev/device
vgremove:删除卷组
■逻辑卷管理命令:逻辑卷管理命令以lv开头
lvcreate:用于创建逻辑卷
命令格式:lvcreate -L size -n Name 卷组名
-L:指定逻辑卷容量大小[bBsSkKmMgGtTpPeE]
-n:指定逻辑卷名称
-s:创建快照
-p:指定逻辑卷权限为只读或者读写{r|rw}
lvextend:用于扩展逻辑卷容量
命令格式:lvextend -L [+]size /dev/卷组名/逻辑卷名
lvreduce:用于缩减逻辑卷容量
命令格式:lvreduce -L [-]Size /path/to/lv_device
lvdisplay:查看逻辑卷详细信息
命令格式:lvdisplay /path/to/lv_device
lvscan:显示系统中所有逻辑卷
lvremove:删除逻辑卷
2.2 创建物理卷/PV实例
#创建两个物理卷,创建之前首先保证磁盘的分区类型为8e
[[email protected] ~]# fdisk -l /dev/sdb Disk /dev/sdb: 53.7 GB, 53687091200bytes 255 heads, 63 sectors/track, 6527cylinders Units = cylinders of 16065 * 512 =8225280 bytes Sector size (logical/physical): 512bytes / 512 bytes I/O size (minimum/optimal): 512 bytes /512 bytes Disk identifier: 0xee3ae3f0 Device Boot Start End Blocks Id System /dev/sdb1 1 2612 20980858+ 8e Linux LVM /dev/sdb2 2613 5224 20980890 8e Linux LVM [[email protected] ~]# pvcreate /dev/sdb{1,2} Physical volume "/dev/sdb1" successfully created Physical volume "/dev/sdb2" successfully created [[email protected] ~]# pvscan PV /dev/sdb1 lvm2 [20.01GiB] PV /dev/sdb2 lvm2 [20.01GiB] Total: 2 [40.02 GiB] / in use: 0 [0 ] / in no VG: 2 [40.02 GiB]
2.3 创建卷组/VG实例
#创建一个卷组名称为myvg,创建在上一步创建的两个物理卷之上。
[[email protected] ~]# vgcreate myvg /dev/sdb{1,2} Volume group "myvg" successfully created [[email protected] ~]# vgs VG #PV #LV #SN Attr VSize VFree myvg 2 0 0 wz--n- 40.02g 40.02g
2.4 创建逻辑卷/LV实例
#在myvg卷组之上创建一个逻辑卷名为mylv1,大小为5G,并格式化为ext4文件系统,将其挂载到/users目录
[[email protected] ~]# lvcreate-L 5G -n mylv1 myvg Logical volume "mylv1" created [[email protected] ~]# lvdisplay/dev/myvg/mylv1 --- Logical volume --- LV Path /dev/myvg/mylv1 LV Name mylv1 VG Name myvg LV UUID MsGrBc-0Sdk-DRJp-uv1Q-kOcL-bFUJ-Kw4iZi LV Write Access read/write LV Creation host, time moban, 2016-03-02 13:38:25 +0800 LV Status available # open 0 LV Size 5.00 GiB Current LE 1280 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 [[email protected] ~]# mke2fs-t ext4 /dev/myvg/mylv1 #格式化操作 [[email protected] ~]# mount/dev/myvg/mylv1 /users/ [[email protected] ~]# df-h Filesystem Size Used Avail Use% Mounted on /dev/sda3 6.6G 1.4G 4.9G 23% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 190M 27M 153M 16% /boot /dev/mapper/myvg-mylv1 4.8G 10M 4.6G 1% /users
2.5 扩展逻辑卷实例
#将上一步创建的mylv1逻辑卷的容量从5G扩展到10G
[[email protected] ~]#lvextend -L 10G /dev/myvg/mylv1 Size of logical volume myvg/mylv1 changed from 5.00 GiB (1280 extents) to 10.00 GiB (2560 extents). Logical volume mylv1 successfully resized [[email protected] ~]# df-h Filesystem Size Used Avail Use% Mounted on /dev/sda3 6.6G 1.4G 4.9G 23% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 190M 27M 153M 16% /boot /dev/mapper/myvg-mylv1 4.8G 10M 4.6G 1% /users
#扩展器逻辑卷容量后通过df -h命令发现容量大小扔为5G并没有扩展到10G,是因为我们只将其物理边界扩大到10G,但其逻辑边界扔为5G大小。所以需要将其逻辑边界也扩大到10G。使用resize2fs命令扩展器逻辑大小。
[[email protected] ~]# resize2fs/dev/myvg/mylv1 resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/myvg/mylv1 is mountedon /users; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of/dev/myvg/mylv1 to 2621440 (4k) blocks. The filesystem on /dev/myvg/mylv1 is now2621440 blocks long. [[email protected] ~]# df-h Filesystem Size Used Avail Use% Mounted on /dev/sda3 6.6G 1.4G 4.9G 23% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 190M 27M 153M 16% /boot /dev/mapper/myvg-mylv1 9.8G 12M 9.3G 1% /users
逻辑卷扩展步骤: 1.先确定扩展的大小:并确保所属的卷组有足够的剩余空间 2.扩展物理边界: #lvextend-L [+]Size /dev/卷组名/逻辑卷名 3.扩展逻辑边界: #resizee2fs /dev/卷组名/逻辑卷名
2.6 缩减逻辑卷实例
#上一步我们将mylv1这个逻辑卷扩展到10G大小,现在需要将其大小缩减为原来的5G大小。
#1.卸载逻辑卷挂载
[[email protected] ~]# umount/users/
#2.对逻辑卷强制进行文件系统检测是否有错误
[[email protected] ~]# e2fsck-f /dev/myvg/mylv1 e2fsck 1.41.12 (17-May-2010) Pass 1: Checking inodes, blocks, andsizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summaryinformation /dev/myvg/mylv1: 11/655360 files (0.0%non-contiguous), 76783/2621440 blocks
#3.缩减其逻辑大小到5G
[[email protected] ~]# resize2fs/dev/myvg/mylv1 5G resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on/dev/myvg/mylv1 to 1310720 (4k) blocks. The filesystem on /dev/myvg/mylv1 is now1310720 blocks long.
#4.缩减其物理大小到5G
[[email protected] ~]# lvreduce-L 5G /dev/myvg/mylv1 WARNING: Reducing active logical volume to 5.00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce mylv1?[y/n]: y Size of logical volume myvg/mylv1 changed from 10.00 GiB (2560 extents) to 5.00 GiB (1280 extents). Logical volume mylv1 successfully resized [[email protected] ~]# lvdisplay/dev/myvg/mylv1 --- Logical volume --- LV Path /dev/myvg/mylv1 LV Name mylv1 VG Name myvg LV UUID MsGrBc-0Sdk-DRJp-uv1Q-kOcL-bFUJ-Kw4iZi LV Write Access read/write LV Creation host, time moban, 2016-03-02 13:38:25 +0800 LV Status available # open 0 LV Size 5.00 GiB Current LE 1280 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0
缩减逻辑卷的步骤: 1、卸载卷,并执行强制检测 #e2fsck -f /path/to/lv_device 2、缩减逻辑边界: #resize2fs /path/to/lv_device SIZE 3、缩减物理边界: # lvreduce -L [-]Size/path/to/lv_device
3.1 LVM快照概述
LVM机制还提供了对LV做快照的功能,以此来获得文件系统的状态一致性备份。LVM采用写时复制技术(Copy-On-Write,COW),不用停止服务或将逻辑卷设为只读就可以进行备份,使用LVM快照功能既可以获得一致备份,又不会影响服务器的可用性。
LVM采用的写时复制,是指当LVM快照创建的时候,仅复制原始卷中数据的元数据。换句话说,也就是在创建LVM逻辑卷的时候,并不会发生数据的物理复制。再换句话说,复制元数据,不复制物理数据,够清楚了吧?因此快照的创建几乎是实时的。当原始卷上有写的操作执行时,快照会跟踪原始卷中块的改变,这个时候原始卷上将要改变的数据会在改变之前拷贝到快照预留的空间。
快照卷:逻辑卷的一种,通常为只读
3.2 创建快照命令格式
命令格式: lvcreate-s -L Size -n name -p r /dev/卷组名/逻辑卷名
3.3 创建快照实例
需求1. 将逻辑卷mylv1挂载至/users/目录,复制一些文件到/users目录内然后对mylv1做快照,查看快照中内容是否与/users目录中内容一致。
需求2. 修改/users/目录下文件内容,验证快照中文件内容是否也被修改。
#1.挂载mylv1到/users/目录
[[email protected] ~]# df-h Filesystem Size Used Avail Use% Mounted on /dev/sda3 6.6G 1.4G 4.9G 23% / tmpfs 491M 0 491M 0% /dev/shm /dev/sda1 190M 27M 153M 16% /boot /dev/mapper/myvg-mylv1 4.8G 10M 4.6G 1% /users
#2.复制文件或者创建文件
[[email protected] ~]# cd/users/ [[email protected] users]# cp /etc/issue /etc/fstab ./ [[email protected]]# echo "2016-03-02" >>test.txt [[email protected] users]# cat test.txt 2016-03-02
#3.对mylv1创建快照,快照名为snap-mylv1,快照大小为50M,权限为只读
[[email protected] ~]#lvcreate -s -L 50M -n snap-mylv1 -p r /dev/myvg/mylv1 Rounding up size to full physical extent 52.00 MiB Logical volume "snap-mylv1" created [[email protected] ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv1 myvg owi-aos--- 5.00g snap-mylv1 myvgsri-a-s--- 52.00m mylv1 0.02
#4.挂载快照snap-mylv1到/mnt目录下并查看快照中文件完整性
[[email protected] ~]# mount/dev/myvg/snap-mylv1 /mnt/ mount: block device/dev/mapper/myvg-snap--mylv1 is write-protected, mounting read-only [[email protected] ~]# ls/mnt/ fstab issue lost+found test.txt [[email protected] ~]#cat /mnt/test.txt 2016-03-02
#5.修改原数据中内容查看快照中内容是否被修改
[[email protected] ~]# echo"new line" >>/users/test.txt [[email protected] ~]# cat/users/test.txt 2016-03-02
new line
#6.查看快照中test.txt文件内容
[[email protected] ~]# cat /mnt/test.txt 2016-03-02
3.4 小结
通过上面可以说明,当我们对元数据制作快照后修改元数据的内容并不会修改其快照中的内容。当我们需要备份某个数据但又不能终止其业务时可以使用快照的功能。
3.5 LVM快照功能及命令练习
1、创建一个由两个物理卷组成大小为20G的卷组myvg,要求PE大小16M;而后新建 大小为7G逻辑卷mylv1,要求其文件系统为ext4,块大小为2048,且开机能自动挂载至/users;
[[email protected] ~]# pvcreate /dev/sdb{1,2} Physical volume "/dev/sdb1" successfully created Physical volume "/dev/sdb2" successfully created [[email protected] ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 --- 20.01g 20.01g /dev/sdb2 lvm2 --- 20.01g 20.01g [[email protected] ~]# vgcreate myvg -s 16M /dev/sdb{1,2} Volume group "myvg"successfully created [[email protected] ~]# lvcreate -L 7G -n mylv1myvg Logical volume "mylv1" created [[email protected] ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv1 myvg -wi-a----- 7.00g [[email protected] ~]# mke2fs -t ext4 -b 2048/dev/myvg/mylv1 [[email protected] ~]# mkdir /users [[email protected] ~]# tail -1 /etc/fstab /dev/myvg/mylv1 /users ext4 defautls 0 0 [[email protected] ~]# mount /dev/myvg/mylv1/users/
2、新建用户openstack,其家目录为/users/openstack,而后切换至openstack用户,复制一些文件至其家目录中;
[[email protected] ~]# useradd -d/users/openstack openstack [[email protected] ~]# su - openstack [[email protected] ~]$ cp /etc/issue/etc/fstab ./ [[email protected] ~]$ ls fstab issue
3、缩减mylv1至5G大小;而后切换至openstack用户,确保其数据没有丢失;
[[email protected] ~]# umount /users/ [[email protected] ~]# e2fsck -f/dev/myvg/mylv1 e2fsck 1.41.12 (17-May-2010) Pass 1: Checking inodes, blocks, andsizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summaryinformation /dev/myvg/mylv1: 18/458752 files (0.0%non-contiguous), 96263/3670016 blocks [[email protected] ~]# resize2fs/dev/myvg/mylv1 5G resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on/dev/myvg/mylv1 to 2621440 (2k) blocks. The filesystem on /dev/myvg/mylv1 is now2621440 blocks long. [[email protected] ~]# lvreduce -L 5G/dev/myvg/mylv1 WARNING: Reducing active logical volume to5.00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce mylv1?[y/n]: y Size of logical volume myvg/mylv1 changed from 7.00 GiB (448 extents) to5.00 GiB (320 extents). Logical volume mylv1 successfully resized [[email protected] ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv1 myvg -wi-a----- 5.00g [[email protected] ~]# mount /dev/myvg/mylv1/users/ [[email protected] ~]# su - openstack [[email protected] ~]$ ls fstab issue
4、对mylv1创建快照卷snap-mylv1,并通过其备份数据至/tmp/user.tar.bz2;
[[email protected] ~]# lvcreate -s -L 50M -nsnap-mylv1 /dev/myvg/mylv1 [[email protected] ~]# mount/dev/myvg/snap-mylv1 /media/ [[email protected] ~]# ls /media/ lost+found openstack [[email protected] ~]# cd / [[email protected] /]# tar jcf/tmp/user.tar.bz2 media/ [[email protected] /]# ls /tmp/ media media.tar.xz user.tar.bz2