LVM: Logical Volume Manager
LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。
LVM的工作原理其实很简单,它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。比如说我增加一个物理硬盘,这个时候上层的服务是感觉不到的,因为呈现给上层服务的是以逻辑卷的方式。
LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。如果我们新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性。
基本的逻辑卷管理概念:
PV(Physical Volume)- 物理卷
物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘,也可以是raid设备。
VG(Volumne Group)- 卷组
卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。
LV(Logical Volume)- 逻辑卷
逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组。
PE(Physical Extent)- 物理块
LVM 默认使用4MB的PE区块,而LVM的LV最多仅能含有65534个PE (lvm1 的格式),因此默认的LVM的LV最大容量为4M*65534/(1024M/G)=256G。PE是整个LVM 最小的储存区块,也就是说,其实我们的资料都是由写入PE 来处理的。简单的说,这个PE 就有点像文件系统里面的block 大小。所以调整PE 会影响到LVM 的最大容量!不过,在 CentOS 6.x 以后,由于直接使用 lvm2 的各项格式功能,因此这个限制已经不存在了。
将pv提供的存储空间划分为大小相同的n个存储块,pe大小是在pv加入vg之后决定的,
dm:vevice mapper
将一个或多个底层块设备组织成一个逻辑设备的模块,存放在:/dev/dm-#
关系图如下:
lvcreate |
在卷组中创建逻辑卷: # lvcreate -L 100 /dev/vg00 |
lvdisplay |
显示有关逻辑卷的信息: # lvdisplay -v /dev/vg00/lvol1 |
lvextend |
为逻辑卷添加镜像 # lvextend -m 1 /dev/vg00/lvol3 |
lvextend |
增加逻辑卷的大小 # lvextend -L 120 /dev/vg00/lvol3 |
lvreduce |
减小逻辑卷的大小: # lvreduce -L 100 /dev/vg00/lvol3 |
lvremove |
从卷组中删除逻辑卷: # lvremove /dev/vg00/lvol6 |
pvcreate |
创建用作卷组的一部分的物理卷: # pvcreate /dev/rdisk/disk2 |
pvdisplay |
显示有关物理卷的信息: # pvdisplay -v /dev/disk/disk2 |
pvmove |
将盘区从一个物理卷移动到另一个物理卷: # pvmove /dev/disk/disk2 /dev/disk/disk3 |
pvremove |
从物理卷中删除 LVM 数据结构: # pvremove /dev/rdisk/disk2 |
vgcreate |
创建卷组: # vgcreate /dev/vg01 /dev/disk/disk2 /dev/disk/disk3 |
vgdisplay |
显示有关卷组的信息: # vgdisplay -v /dev/vg00 |
vgextend |
通过添加物理卷来扩充卷组: # vgextend /dev/vg00 /dev/disk/disk2 |
vgexport |
从系统中删除卷组: # vgexport /dev/vg01 |
vgscan |
扫描卷组的系统磁盘: # vgscan -v |
vgreduce |
通过从卷组中删除一个或多个物理卷来缩小卷组: # vgreduce /dev/vg00 /dev/disk/disk2 |
vgremove |
从系统和磁盘中删除卷组定义: # vgremove /dev/vg00 /dev/disk/disk2 |
vgsync |
同步卷组中的所有镜像逻辑卷: # vgsync vg00 |
VG:Volume Group 卷组
vg管理工具:
vgcreate [-s #[kmgtpe]] volumegroupname physicaldevicepath [physicaldevicepath...]
vgcreate -s pe大小创建卷组的名称 指定pv路径(可以多个)
#vgcreate vg1 /dev/sdb
-s:pe大小
扩展vg:(加磁盘)
vgextend volumegroupname physicaldevicepath [physicaldevicepath...]
vgextend 要扩展的vg组名添加的磁盘路径(可以多个)
#vgextend vg1 /dev/sdc1
缩减vg:(减磁盘)
vgreduce volumegroupname physicaldevicepath [physicaldevicepath…]
vgreduce 要缩减的vg组 缩减的磁盘路径(可以是多个)
vgreduce参数:
-a:如果命令行中没有指定要删除的物理卷,则删除所有的空物理卷;
–removemissing:删除卷组中丢失的物理卷,使卷组恢复正常状态。
#vgreduce myvg /dev/sda5
注:缩减vg时,缩减的是磁盘,所以务必先使用vgmove命令移动磁盘上的数据(将要移除的vg上的数据移动到同一个vg组的pv上)
LV:Logical Volume 逻辑卷管理
lvcreate -L #[mMgGtT] -n NAME VolumeGroup lvcreate -L 指定lv大小 -n 指定lv名称 指定在哪个vg组里创建lv -L:指定lv大小 (卷组有足够的空间情况下) -n:name #lvremove /dev/VG_name/lv_name
扩展逻辑卷:
lvextend -L [+]num[mMgGtT] /dev/vg_name/LV_NAME
+:加+号代表在原有基础上增加多少,不带+号则代表增加到
如:原有2G,现要扩展到5G
1.加+号,#lvextend -L +3G /dev/vg1/lv1
2.不加+号,#lvextend -L 5G /dev/vg1/lv1
扩展后需要修改逻辑边界
resize2fs /dev/VG_NAME/LV_NAME
#resize2fs /dev/myvg/mylv
扩展到此lv大小
只针对ext系列文件系统
lv:lvreduce缩减逻辑卷
先缩减内部文件系统大小(逻辑边界)到指定大小,再缩减物理大小
1.卸载文件系统:
umount /dev/vg_name/lv_name #umount /dev/vg1/lv1
2.文件系统强制检测
e2fsck -f /dev/VG_NAME/LV_NAME #e2fsck -f /dev/vg1/lv1
3.缩减文件系统逻辑边界(缩减至多大)
resize2fs /dev/VG_name/LV_NAME #[mMgGtT] resize2fs /dev/vg1/lv1 10G
4.再次执行缩减
lvreduce -L [-]num[mMgGtT] /dev/VG-name/LV-name -:加-号代表在原有基础上减少多少,不带-号则代表减少到多少 如:原有5G,现要缩减到2G 1.加-号,#lvextend -L -3G /dev/vg1/lv1 2.不加-号,#lvextend -L 2G /dev/vg1/lv1
5.重新挂载
mount /dev/vg_name/lv_name /path/to/somefile #mount /dev/vg1/lv1 /mnt/lv1
示例:
1.创建一个至少有两个pv组成的大小为20G的名为testvg的VG,要求PE大小为16MB,而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录
###创建pv和vg:
-s指定pe大小
[root@localhost ~]# vgcreate testvg -s 16M /dev/sd{b,c}1 Physical volume "/dev/sdb1" successfully created Physical volume "/dev/sdc1" successfully created Volume group "testvg" successfully created
###创建lv
-L:指定lv大小
-n:指定lv名称
[root@localhost ~]# lvcreate -L 5G -n testlv testvg Logical volume "testlv" created.
###格式化testlv
-t:指定文件系统
-L:指定LABEL
[root@localhost ~]# mke2fs -t ext4 -L testlvm /dev/testvg/testlv
###挂载目录
[root@localhost ~]# touch /users
[root@localhost ~]# mount /dev/testvg/testlv /users
###创建所有信息;
##物理卷信息(pv)
[root@localhost /]# pvs /dev/sd{b,c}1 PV VG Fmt Attr PSize PFree /dev/sdb1 testvg lvm2 a--u 10.00g 5.00g /dev/sdc1 testvg lvm2 a--u 10.00g 10.00g
##卷组信息(vg)
[root@localhost /]# vgs /dev/testvg VG #PV #LV #SN Attr VSize VFree testvg 2 1 0 wz--n- 20.00g 15.00g
##逻辑卷信息(lv)
[root@localhost /]# lvs /dev/testvg/testlv LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert testlv testvg -wi-ao---- 5.00g
2.新建用户archlinux,要求其家目录为/users/archlinux,而后su切换至archlinux用户,复制/etc/pam.d目录至自己的家目录
###新建用户
-d:指定家目录
[root@localhost users]# useradd -d /users/archlinux archlinux [root@localhost users]# getent passwd archlinux archlinux:x:501:501::/users/archlinux:/bin/bash
###复制pam.d 目录到用户家目录
[root@localhost ~]# cp -r /etc/pam.d /users/archlinux/ [root@localhost ~]# ls /users/archlinux/ pam.d
3.扩展testlv至7G,要求archlinux用户的文件不能丢失;
####查看原逻辑分区
[root@localhost ~]# lvs /dev/testvg/testlv LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert testlv testvg -wi-ao---- 5.00g
####扩展逻辑分区
-L:指定扩展的大小
+2G:在原有的5G上增加2G
[root@localhost ~]#lvextend -L +2G /dev/testvg/testlv
###发现实际容量并没有变化,因为我们的系统还不认识刚刚添加进来的磁盘的文件系统,所以还需要对文件系统进行扩容
[root@localhost ~]#resize2fs /dev/testvg/testlv [root@localhost ~]# lvs /dev/testvg/testlv LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert testlv testvg -wi-ao---- 7.00g
###查看分区是否增加容量,如我们没有使用resize2fs 对文件系统进行扩容,此大小还是原有大小5G
[root@localhost pam.d]# df -TH Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/vg0-root ext4 22G 352M 20G 2% / tmpfs tmpfs 515M 0 515M 0% /dev/shm /dev/sda1 ext4 199M 35M 154M 19% /boot /dev/mapper/vg0-usr ext4 11G 2.1G 7.9G 21% /usr /dev/mapper/vg0-var ext4 22G 122M 20G 1% /var /dev/mapper/testvg-testlv ext4 7.3G 13M 6.9G 1% /users
###验证
[root@localhost pam.d]# du -sh 204K. [root@localhost pam.d]# pwd /etc/pam.d [root@localhost pam.d]# cd /users/archlinux/pam.d/ [root@localhost pam.d]# du -sh 204K. [root@localhost pam.d]# pwd /users/archlinux/pam.d
4.收缩testlv至3G,要求archlinux用户的文件不能丢失
缩减逻辑卷(lv)
lvreduce
先缩减内部文件系统大小(逻辑边界)到指定大小,再缩减物理大小
1.卸载文件系统:
[root@localhost ~]# umount /dev/testvg/testlv
2.文件系统强制检测
列如:e2fsck -f /dev/VG_NAME/LV_NAME
[root@localhost ~]# e2fsck -f /dev/testvg/testlv e2fsck 1.41.12 (17-May-2010) .......
3.缩减文件系统逻辑边界(缩减至多大)
例:resize2fs /dev/VG_name/LV_NAME #[mMgGtT]
[root@localhost ~]# resize2fs /dev/testvg/testlv 3G resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/testvg/testlv to 786432 (4k) blocks. The filesystem on /dev/testvg/testlv is now 786432 blocks long.
4).再次执行缩减
lvreduce -L [-]num[mMgGtT] /dev/VG-name/LV-name
-:加-号代表在原有基础上减少多少,不带-号则代表减少到多少
如:原有5G,现要缩减到2G
1.加-号,#lvextend -L -3G /dev/vg1/lv1
2.不加-号,#lvextend -L 2G /dev/vg1/lv1
[root@localhost ~]# lvreduce -L 3G /dev/testvg/testlv WARNING: Reducing active logical volume to 3.00 GiB. THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce testvg/testlv? [y/n]: y Size of logical volume testvg/testlv changed from 7.00 GiB (448 extents) to 3.00 GiB (192 extents). Logical volume testlv successfully resized.
5).mount 重新挂载
[root@localhost ~]# mount /dev/testvg/testlv /users/
###验证
[root@localhost ~]# du -sh /etc/pam.d 204K/etc/pam.d [root@localhost ~]# du -sh /users/archlinux/pam.d 204K/users/archlinux/pam.d [root@localhost ~]#
5.对testlv创建快照,并尝试基于快照备份数据,验证快照的功能
快照:snapshot
lvcreate -L #[mMgGtT] -p r -s -n snapshot_lv_name original_lv_name
lvcreate -L size -p 权限(r,rw) -s 创建快照卷 -n 快照卷名称 原lv卷
-L:变化量大小,原卷和快照卷的大小变化
[root@localhost ~]# lvcreate -s -L 1G -p r -n lvsnap /dev/testvg/testlv Logical volume "lvsnap" created. [root@localhost users]# mount /dev/testvg/lvsnap /testdir/snap/ mount: block device /dev/mapper/testvg-lvsnap is write-protected, mounting read-only [root@localhost users]# ls aaa abcd archlinux lost+found [root@localhost users]# ls /testdir/snap/ archlinux lost+found [root@localhost users]# touch abc [root@localhost users]# ls /testdir/snap/ archlinux lost+found
dd命令:convert and copy file
用法:dd if=/path/from/src of=/path/to/dest
bs=num 复制单元大小block size(单位字节)
count=num :复制多少个bs
#dd if=/etc/fstab of=/tmp/fstab #dd if=/etc/fstab of=/tmp/fstab bs=1 count=100
磁盘复制:
dd if=/dev/sda of=/dev/sdb
备份MBR:
dd if=/dev/sda of=/tmp/mbr_bak bs=512 count=1
清除磁盘分区:
# dd if=/dev/zero of=/dev/sda bs=512 count=1
破坏mbr的bootloader:
bs=256
原创文章,作者:Lii,如若转载,请注明出处:http://www.178linux.com/41107
评论列表(1条)
文章对lvm知识把我的很全面,同时通过具体操作对此命令进行了练习,但是前面的命令和选项连在一起了,这需要作者多加注意。同时需要注意的是lvm对于数据的物理备份是很关键的,需要多加练习,熟练掌握。