目录:
一、概述
二、LVM的相关概念
三、概念图
四、LVM基本操作
1.创建PV
2.查看PV信息
3.创建VG
4.查看VG信息
5.创建LV
6.查看LV信息
7.挂载LV
8.扩展卷组
9.缩减卷组
10.扩展逻辑卷
11.缩减逻辑卷
12.移除逻辑卷
13.移除卷组
14.移除物理卷
五、LVM快照实现
六、总结
―――――――――――――――――――――――――――――――――――――――――――――――――
一、概述
LVM全称是Logical Volume Manager,即逻辑卷管理器。它是Linux环境下对磁盘分区进行管理的一种机制;它可以将多个物理分区整合在一起,并且可以根据实际需要动态调整文件系统空间。另外,它还可以提供快照,快照在刚创建的时候,其内容是和原卷一模一样的,只有数据在原卷中发生变化的时候,快照会将被改动数据的原数据保存起来。
二、LVM的相关概念
1.物理卷(Physical Volume)
物理卷是组成LVM的最底层的元素,即Linux上的物理分区。
2.卷组(Volume Group)
将各个独立的PV组合起来形成的一个存储空间就称为VG,VG的大小就是整个LVM的大小。
3.逻辑卷(Logical Volume)
可以被用户格式化、挂载并提供数据存储的对象就是LV。
4.物理扩展块(Physical Extent)
PE相当于Linux分区中的block,它是LVM的最小存储单位,默认为4M。
三、概念图
四、LVM基本操作
1.创建PV
首先得先创建分区,并将分区的类型改为8e。在这里,我们可以按照以下方式分别创建/dev/sdb1、/dev/sdb2、/dev/sdc1、/dev/sdc2.
创建PV使用以下命令格式:
pvcreate device_name
例如: pvcreate /dev/sdb1
[root@localhost ~]# fdisk /dev/sdb Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-2610, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +5G Command (m for help): t Selected partition 1 Hex code (type L to list codes): 8e Changed system type of partition 1 to 8e (Linux LVM) Command (m for help): p Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x05ff7b5d Device Boot Start End Blocks Id System /dev/sdb1 1 654 5253223+ 8e Linux LVM [root@localhost ~]# pvcreate /dev/sdb{1,2} /dev/sdc{1,2} Physical volume "/dev/sdb1" successfully created Physical volume "/dev/sdb2" successfully created Physical volume "/dev/sdc1" successfully created Physical volume "/dev/sdc2" successfully created
2.查看PV信息
使用的命令:
(1)pvs 简要查看PV信息
(2)pvsdisplay 详细查看PV信息。
A.pvsdisplay 直接使用该命令,查看所有PV的信息。
B.pvsdisplay device_name 表示查看device_name这个PV的信息。
[root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 --- 5.01g 5.01g /dev/sdb2 lvm2 --- 5.01g 5.01g /dev/sdc1 lvm2 --- 5.01g 5.01g /dev/sdc2 lvm2 --- 5.01g 5.01g [root@localhost ~]# pvdisplay /dev/sdb1 "/dev/sdb1" is a new physical volume of "5.01 GiB" --- NEW Physical volume --- PV Name /dev/sdb1 VG Name PV Size 5.01 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID rZsvZG-nMf0-To7I-3k2X-fzEL-jkvk-eNFd6h
3.创建VG
在有了PV之后,接下来我们要创建VG,创建VG使用以下命令:
vgcreate VG_NAME PV_NAME
-s PE:指定PE的大小
[root@localhost ~]# vgcreate testvg /dev/sd{b,c}1 Volume group "testvg" successfully created
4.查看VG信息
查看VG使用以下命令:
(1)vgs:简要查看VG信息。
(2)vgdisplay:详细查看VG信息。
A.vgdisplay: 直接使用该命令,查看所有VG的信息。
B.vgdisplay VG_NAME: 表示查看这个VG的信息。
[root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree testvg 2 0 0 wz--n- 10.02g 10.02g [root@localhost ~]# vgdisplay testvg --- Volume group --- VG Name testvg System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size 10.02 GiB PE Size 4.00 MiB Total PE 2564 Alloc PE / Size 0 / 0 Free PE / Size 2564 / 10.02 GiB VG UUID zmjsxc-4KPf-LEcC-96zL-BBDY-N0Cs-buSQ6n
5.创建LV
使用的命令:
lvcreate -L SIZE -n LV_NAME VG_NAME
-L 指定逻辑卷的大小
-n 指定逻辑卷的名称
-l PE的个数
[root@localhost ~]# lvcreate -L 5G -n mylv testvg Logical volume "mylv" created
6.查看LV信息
查看LV使用以下命令:
(1)lvs: 简要查看LV信息
(2)lvdisplay 逻辑卷的设备文件名称: 详细查看LV信息
逻辑卷的设备文件名称路径:/dev/VG_NAME/LV_NAME 或者 /dev/mapper/VG_NAME-LV_NAME
[root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv testvg -wi-a----- 5.00g [root@localhost ~]# ll /dev/testvg/mylv lrwxrwxrwx 1 root root 7 Jul 24 01:19 /dev/testvg/mylv -> ../dm-0 [root@localhost ~]# ll /dev/mapper/testvg-mylv lrwxrwxrwx 1 root root 7 Jul 24 01:19 /dev/mapper/testvg-mylv -> ../dm-0 [root@localhost ~]# lvdisplay /dev/testvg/mylv --- Logical volume --- LV Path /dev/testvg/mylv LV Name mylv VG Name testvg LV UUID cgrPIG-Zavs-GH9Z-55sR-MtSt-SFzg-SVETpG LV Write Access read/write LV Creation host, time localhost.localdomain, 2015-07-24 01:19:20 +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
7.挂载LV
在挂载LV之前,我们要对LV进行格式化后再挂载,然后存放文件看是否正常。
# 格式化LV [root@localhost ~]# mke2fs -t ext4 /dev/testvg/mylv mke2fs 1.41.12 (17-May-2010) 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 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 29 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override. # 挂载LV [root@localhost ~]# mount /dev/testvg/mylv /mnt # 查看挂载的分区信息 [root@localhost ~]# df -lh Filesystem Size Used Avail Use% Mounted on /dev/sda3 20G 1.1G 17G 6% / tmpfs 242M 0 242M 0% /dev/shm /dev/sda1 194M 26M 159M 14% /boot /dev/mapper/testvg-mylv 5.0G 138M 4.6G 3% /mnt # 测试存放文件 [root@localhost ~]# cp /etc/inittab /mnt/ [root@localhost mnt]# tail -4 /mnt/inittab # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:3:initdefault:
8.扩展卷组
步骤:
(1)准备好一个PV
(2)使用vgextend命令完成扩展,命令格式:vgextend VG_NAME /PATH/TO/PV
#查看使用和未使用的PV,其中/dev/sdb2和/dev/sdc2都还未使用 [root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 testvg lvm2 a-- 5.01g 8.00m /dev/sdb2 lvm2 --- 5.01g 5.01g /dev/sdc1 testvg lvm2 a-- 5.01g 5.01g /dev/sdc2 lvm2 --- 5.01g 5.01g #未扩展前的VG大小 [root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree testvg 2 1 0 wz--n- 10.02g 5.02g #扩展VG [root@localhost ~]# vgextend testvg /dev/sdb2 Volume group "testvg" successfully extended #扩展后的VG大小 [root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree testvg 3 1 0 wz--n- 15.02g 10.02g
9.缩减卷组
步骤:
(1)确定要移除的PV
(2)将此PV上的数据转移至其他的PV
命令:pvmove PV_NAME
(3)从卷组中将此PV移除
命令:vgreduce /PATH/TO/PV
# 查看已经使用在卷组中的PV [root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 testvg lvm2 a-- 5.01g 8.00m /dev/sdb2 testvg lvm2 a-- 5.01g 5.01g /dev/sdc1 testvg lvm2 a-- 5.01g 5.01g /dev/sdc2 lvm2 --- 5.01g 5.01g # 现在确定要移除/dev/sdb1,在移除前需要将数据转移到其他PV [root@localhost ~]# pvmove /dev/sdb1 /dev/sdb1: Moved: 0.0% /dev/sdb1: Moved: 100.0% # 将PV从卷组中移除 [root@localhost ~]# vgreduce testvg /dev/sdb1 Removed "/dev/sdb1" from volume group "testvg" # 查看移除后的VG大小 [root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree testvg 2 1 0 wz--n- 10.02g 5.02g
10.扩展逻辑卷
步骤:
(1)先确定扩展的LV大小,并确保对应卷组有足够的空间
(2)扩展物理边界
使用lvextend命令:lvextend -L [+]SIZE /PATH/TO/LV
参数说明:
-L [+]SIZE: 指定扩展的容量;如果带+号,表示扩展的容量是在原来的基础上加上SIZE的容量;如果不带,表示扩展容量到SIZE,单位为"kKmMgGtT"
-l [+]SIZE: 指定扩展的容量;如果带+号,表示扩展的容量是在原来的基础上加上SIZE个PE的容量;不带+号,表示扩展到SIZE个PE的容量
SIZE: 表示数字
(3)扩展逻辑边界
使用resize2fs /PATH/TO/DEVICE
# 确定VG的容量 [root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree testvg 2 1 0 wz--n- 10.02g 5.02g # 未扩展前的LV容量 [root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv testvg -wi-ao---- 5.00g # 扩展LV到8G,即物理边界 [root@localhost ~]# lvextend -L +3G /dev/testvg/mylv Size of logical volume testvg/mylv changed from 5.00 GiB (1280 extents) to 8.00 GiB (2048 extents). Logical volume mylv successfully resized # 查看挂载的LV大小,发觉还是5G,因为还没扩展逻辑边界 [root@localhost ~]# df -lh Filesystem Size Used Avail Use% Mounted on /dev/sda3 20G 1.1G 17G 6% / tmpfs 242M 0 242M 0% /dev/shm /dev/sda1 194M 26M 159M 14% /boot /dev/mapper/testvg-mylv 5.0G 139M 4.6G 3% /mnt # 扩展逻辑边界 [root@localhost ~]# resize2fs /dev/testvg/mylv resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/testvg/mylv is mounted on /mnt; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/testvg/mylv to 2097152 (4k) blocks. The filesystem on /dev/testvg/mylv is now 2097152 blocks long. # 查看分区大小,文件系统大小也扩展了 [root@localhost ~]# df -lh Filesystem Size Used Avail Use% Mounted on /dev/sda3 20G 1.1G 17G 6% / tmpfs 242M 0 242M 0% /dev/shm /dev/sda1 194M 26M 159M 14% /boot /dev/mapper/testvg-mylv 7.9G 140M 7.4G 2% /mnt
11.缩减逻辑卷
步骤:
(1)确定缩减后的大小,至少确保缩减后能容纳原来的所有数据
(2)执行缩减:
A.因为缩减有风险,所以必须卸载并检测文件系统,使用e2fsck -f命令
B.缩减逻辑边界,使用resize2fs命令
resize2fs /path/to/device SIZE
C.缩减物理边界,使用lvreduce命令
lvreduce -L [-]SIZE /path/to/lv
# 卸载并强行检测 [root@localhost ~]# umount /mnt/ [root@localhost ~]# e2fsck -f /dev/testvg/mylv e2fsck 1.41.12 (17-May-2010) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/testvg/mylv: 12/524288 files (0.0% non-contiguous), 68623/2097152 blocks # 缩减LV至3G,即逻辑边界 [root@localhost ~]# resize2fs /dev/testvg/mylv 3G resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/testvg/mylv to 786432 (4k) blocks. The filesystem on /dev/testvg/mylv is now 786432 blocks long. # 缩减物理边界 [root@localhost ~]# lvreduce -L 3G /dev/testvg/mylv WARNING: Reducing active logical volume to 3.00 GiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce mylv? [y/n]: y Size of logical volume testvg/mylv changed from 8.00 GiB (2048 extents) to 3.00 GiB (768 extents). Logical volume mylv successfully resized # 为确保安全,再次检测 [root@localhost ~]# e2fsck -f /dev/testvg/mylv e2fsck 1.41.12 (17-May-2010) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/testvg/mylv: 12/196608 files (0.0% non-contiguous), 47100/786432 blocks # 挂载,查看分区大小并查看分区里面的文件是否正常 [root@localhost ~]# mount /dev/testvg/mylv /mnt/ [root@localhost ~]# df -lh Filesystem Size Used Avail Use% Mounted on /dev/sda3 20G 1.1G 17G 6% / tmpfs 242M 0 242M 0% /dev/shm /dev/sda1 194M 26M 159M 14% /boot /dev/mapper/testvg-mylv 3.0G 136M 2.7G 5% /mnt [root@localhost ~]# cd /mnt/ [root@localhost mnt]# tail -4 /mnt/inittab # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:3:initdefault:
12.移除逻辑卷
移除逻辑卷之前,确保已经没有被挂载。此时使用lvremove /path/to/lv命令即可
# 查看逻辑卷 [root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert hello_lv testvg -wi-a----- 1.00g mylv testvg owi-aos--- 3.00g # 移除hello_lv [root@localhost ~]# lvremove /dev/testvg/hello_lv Do you really want to remove active logical volume hello_lv? [y/n]: y Logical volume "hello_lv" successfully removed # 再次查看逻辑卷信息 [root@localhost ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv testvg owi-aos--- 3.00g
13.移除卷组
使用vgremove VG_NAME
# 查看卷组信息 [root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree testvg 2 0 0 wz--n- 10.02g 10.02g # 移除testvg [root@localhost ~]# vgremove testvg Volume group "testvg" successfully removed
14.移除物理卷
使用pvremove PV_NAME命令
# 查看物理卷 [root@localhost ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb2 lvm2 --- 5.01g 5.01g /dev/sdc1 lvm2 --- 5.01g 5.01g /dev/sdc2 lvm2 --- 5.01g 5.01g # 移除物理卷 [root@localhost ~]# pvremove /dev/sdb2 Labels on physical volume "/dev/sdb2" successfully wiped [root@localhost ~]# pvremove /dev/sdc1 Labels on physical volume "/dev/sdc1" successfully wiped [root@localhost ~]# pvremove /dev/sdc2 Labels on physical volume "/dev/sdc2" successfully wiped
五、LVM快照实现
创建出来的快照卷是已经记录了原卷某个时刻所有文件的状态,在原卷没有做出修改之前,快照卷只是作为访问原卷的一个入口;一旦原卷中的文件发生改变的时候,系统会将原卷的文件复制一份到快照卷,这时的快照卷就不能作为访问原卷的入口了,快照卷里面只有原卷没有发生改变之前复制过来的文件。这时,我们就可以对快照卷里面的文件进行打包备份。
创建快照使用lvcreate命令,使用以下参数
-L SIZE: 指定快照卷的大小
-s: 表示创建快照卷
-p r: 限制快照卷为只读访问
-n LV_NAME: 指定快照卷的名称
示例:lvcreate -L SIZE -s -p r -n LV_NAME /path/to/lv
# 创建快照卷 [root@localhost mnt]# lvcreate -L 50M -s -p r -n mylv-snap /dev/testvg/mylv Rounding up size to full physical extent 52.00 MiB Logical volume "mylv-snap" created [root@localhost mnt]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv testvg owi-aos--- 3.00g mylv-snap testvg sri-a-s--- 52.00m mylv 0.02 # 挂载快照卷 [root@localhost ~]# mount -o ro /dev/testvg/mylv-snap /media/ # 查看快照卷,此时的快照卷只是作为原卷的入口,所以内容和快照卷的是一样的 [root@localhost mnt]# cd /media/ [root@localhost media]# ls inittab lost+found # 修改原卷的内容 [root@localhost mnt]# cp /etc/fstab /mnt/ [root@localhost mnt]# echo "Hello World" >> /mnt/inittab # 查看快照卷及里面的内容,发现没有新增的文件fstab,而且inittab的文件内容是和创建快照时一样 [root@localhost ~]# cd /media/ [root@localhost media]# ls inittab lost+found [root@localhost media]# tail -3 inittab # 6 - reboot (Do NOT set initdefault to this) # id:3:initdefault: # 打包备份 [root@localhost media]# tar zcf /tmp/backup.tar.gz /media/inittab tar: Removing leading `/' from member names [root@localhost media]# ls /tmp/backup.tar.gz /tmp/backup.tar.gz # 卸载快照卷 [root@localhost ~]# umount /media/
六、总结
创建LV的过程:
创建PV --> 创建VG --> 创建LV --> 格式化 --> 挂载
扩展卷组的过程:
准备PV --> 完成扩展
缩减卷组的过程:
确定移除的PV --> 转移移除PV的数据到别的PV --> 从卷组中移除PV
扩展逻辑卷的过程:
确定扩展大小 --> 扩展物理边界 --> 扩展逻辑边界
缩减逻辑卷的过程:
确定缩减大小 --> 卸载逻辑卷 --> 缩减逻辑边界 --> 缩减物理边界