逻辑卷
来源:互联网 发布:贾斯汀比伯 知乎 编辑:程序博客网 时间:2024/05/16 01:24
0.目录
- 目录
- 逻辑卷
- 1 什么是逻辑卷
- 2 逻辑卷组成及说明
- 3 逻辑卷的设备文件
- 各管理命令
- 1 物理卷管理命令
- 2 卷组管理命令
- 3 逻辑卷管理命令
- 快照卷
- 1 什么是快照卷
- 2 使用场景
- 3 命令创建及效果验证
1.逻辑卷
1.1 什么是逻辑卷
由逻辑卷管理器(LVM,Logical Volume Manager),把多个底层的块设备组织成一个逻辑设备,即逻辑卷(LV,Logical Volume)。
软RAID使用的是内核中的md(mutil device)模块,而LVM使用的是dm(device mapper)模块。
1.2 逻辑卷组成及说明
物理卷(Physical Volume)
磁盘分区、RAID等块设备均可作为PV(上图为了方便展示,都搞成磁盘了)。生产环境中应尽量使用有冗余能力的RAID。卷组(Volume Group)
VG由各PV组成创建,在VG上可创建LV(这也就是创建LV的步骤),VG本身不可直接被使用1。VG会把组成它的各PV划分为“块”,称为PE(物理盘区,Physical extent)。PE大小在创建VG时可定义,默认是4M。
VG分给LV的最小单位就是PE2,分配给LV的PE被称为LE(逻辑盘区,Logical Extent)。
VG可通过添加、移除PV,实现扩展、缩减大小。注意在移除某PV时,应先把该PV上的数据移动到其他PV上,且要确保剩余的PV有足够空间存储这些数据。
- 逻辑卷
LV相对于普通磁盘分区的优势,在于其可在VG上扩展或缩减而不影响其上的数据3,只要剩余空间足够。而普通磁盘分区空间需变化时,只能重新分区、格式化。
所以它可用于无法预知使用空间的场景,比如红帽linux的根文件系统就在逻辑卷上。
1.3 逻辑卷的设备文件
逻辑卷的设备文件为/dev/dm-#,#为数字。
为便于识别、管理,有两符号链接文件指向逻辑卷设备文件:
/dev/mapper/VG_name-LV_name
在/dev/mapper目录下,卷组名-其上的逻辑卷名。如卷组myvg1上的逻辑卷mylv1。[root@local ~]# ls -l /dev/mapper/myvg1-mylv1lrwxrwxrwx. 1 root root 7 Feb 6 21:00 /dev/mapper/myvg1-mylv1 -> ../dm-0
/dev/VG_name/LV_name
/dev下,卷组名作为目录,逻辑卷名作为链接文件。[root@local ~]# ls -l /dev/myvg1/mylv1lrwxrwxrwx. 1 root root 7 Feb 6 21:00 /dev/myvg1/mylv1 -> ../dm-0
2.各管理命令
2.1 物理卷管理命令
管理PV的工具,均以pv开头。
pvcreate
用于创建物理卷。- 选项“-u”,指定创建的设备的UUID。
- 选项“-v”,显示创建细节。
- 选项“-f”,强制创建,即便覆盖原有数据。
比如把/dev/sdb1、/dev/sdb2、/dev/sdb3创建为PV。
Device Boot Start End Blocks Id System/dev/sdb1 1 654 5253223+ 8e Linux LVM/dev/sdb2 655 1308 5253255 8e Linux LVM/dev/sdb3 1309 1962 5253255 8e Linux LVM# 创建之前应先把各分区类型改为8e[root@local ~]# pvcreate /dev/sdb{1,2,3}Physical volume "/dev/sdb1" successfully createdPhysical volume "/dev/sdb2" successfully createdPhysical volume "/dev/sdb3" successfully created
pvdisplay
用于显示PV详细信息,可指定显示设备,不指定则显示所有PV信息。在PV加入VG之前,不可被使用且没有分配PE,所以PE信息均为0、Allocatable为“NO”。
[root@local ~]# 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 Nh5wxi-3xMs-5zFp-7wZy-Lj4B-5De1-unnoLV
pvs
用于显示PV简要信息,用法同pvdisplay。[root@local ~]# pvs /dev/sdb1 PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 ---- 5.01g 5.01g
pvmove
用于把某PV上的PE(也就是其上的数据数据),移动至其他PV,以便从该VG移除此PV。pvremove
用于删除PV。
2.2 卷组管理命令
管理VG的工具均已vg开头。
vgcreate
用于创建VG。- 选项“-s”,指定创建的VG的PE大小,不指定则使用默认。创建后PE大小不会改变除非重新创建VG。
把/dev/sdb1添加至名为vg1的VG(一个VG可以仅由一个PV组成)。
[root@local ~]# vgcreate vg1 /dev/sdb1 Volume group "vg1" successfully created
vgdisplay
用于显示VG详细信息,不指定VG名则显示所有VG。[root@local ~]# vgdisplay vg1 --- Volume group --- VG Name vg1 System ID Format lvm2 Metadata Areas 1 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 1 Act PV 1 VG Size 5.01 GiB PE Size 4.00 MiB Total PE 1282 Alloc PE / Size 0 / 0 Free PE / Size 1282 / 5.01 GiB VG UUID rindE8-Me1J-rRUg-VjQa-TdYA-4JCY-ZlCIDU
vgs
用于显示VG简要信息。[root@local ~]# vgs vg1 VG #PV #LV #SN Attr VSize VFree vg1 1 0 0 wz--n- 5.01g 5.01g
vgrename
用于重命名VG。把vg1重命名为myvg1。
[root@local ~]# vgrename vg1 myvg1 Volume group "vg1" successfully renamed to "myvg1"
vgremove
用于删除VG。vgextend
用于扩展VG,也就是把新的PV加入到VG。把/dev/sdb2、/dev/sdb3添加进myvg1。
[root@local ~]# vgextend myvg1 /dev/sdb{2,3} Volume group "myvg1" successfully extended[root@local ~]# vgs VG #PV #LV #SN Attr VSize VFree myvg1 3 0 0 wz--n- 15.02g 15.02g# 可以看到PV数量变为了3,空间大小也扩展了
vgreduce
用于缩减VG,就是把某PV移除出VG。把/dev/sdb3移除出myvg1。
[root@local ~]# pvmove /dev/sdb3 No data to move for myvg1 # 如前所述,移除PV前应先移动其上的数据,不过此处的/dev/sdb3上没存数据[root@local ~]# vgreduce myvg1 /dev/sdb3 Removed "/dev/sdb3" from volume group "myvg1"[root@local ~]# vgs VG #PV #LV #SN Attr VSize VFree myvg1 2 0 0 wz--n- 10.02g 10.02g# PV数变为了2,空间也对应缩减
2.3 逻辑卷管理命令
管理LV的工具均已lv开头。
lvcreate
用于在某VG上创建LV。- 选项“-L | –size”,用于指定LV大小。
- 选项“-n | –name”,用于指定LV名。
- 选项“-l”,不直接指定LV大小,而是指定分配给该LV多少盘区(LE)。
在卷组myvg1上创建大小为3G,名为mylv1的逻辑卷。
[root@local ~]# lvcreate -L 3G -n mylv1 myvg1 Logical volume "mylv1" created.[root@local ~]# vgs VG #PV #LV #SN Attr VSize VFree myvg1 2 1 0 wz--n- 10.02g 7.02g# VG上的LV数量增加,VG空闲空间对应减少
lvdisplay、lvs
用于显示LV的详细、简要信息,参数也可以是VG。[root@local ~]# lvdisplay /dev/myvg1/mylv1 --- Logical volume --- LV Path /dev/myvg1/mylv1 LV Name mylv1 VG Name myvg1 LV UUID 9PBiDC-zOsZ-MyRY-zKMO-GsFf-RBmr-MBmU9b LV Write Access read/write LV Creation host, time local, 2017-02-05 12:41:53 +0800 LV Status available # open 0 LV Size 3.00 GiB Current LE 768 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0
[root@local ~]# lvs /dev/myvg1/mylv1 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv1 myvg1 -wi-a----- 3.00g
lvrename
用于重命名LV。lvextend
用于扩展LV。- 选项“-L | –size”,指定扩展大小。后跟数字#表示扩展到#大小;后跟“+#”表示在原空间基础上扩展#大小。
注意:
1、LV的扩展可以联机进行,即可以在LV挂载的情况下,直接进行,而无需先卸载。
2、如果VG空间不够,应先扩展VG,再扩展LV。即先扩展下层,才能扩展上层。
3、LV扩展完成后,其上的文件系统(如果扩展前建立的话)大小并没有改变,可使用命令resize2fs扩展文件系统的大小(该命令仅适用于ext系列文件系统,其他文件系统可使用其他工具),而不用重新对LV格式化。如不指定扩展大小,则表示文件系统扩展到整个LV的大小。把逻辑卷mylv1由3G扩展到4G。
[root@local ~]# lvextend -L 4G /dev/myvg1/mylv1 Size of logical volume myvg1/mylv1 changed from 3.00 GiB (768 extents) to 4.00 GiB (1024 extents).[root@local ~]# lvs /dev/myvg1/mylv1 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lvreduce
用于缩减LV。缩减操作有风险,尽量不使用。- 选项“-L | –size”,指定缩减大小。后跟数字#表示缩减到#大小;后跟“-#”表示在原空间基础上扩展#大小。
注意:
1、LV缩减不允许联机进行,即如果要缩减,应先卸载LV,缩减完成后再挂载。
2、因缩减操作易出错,所以缩减前应先强制检测文件系统(命令fsck、e2fsck等)。
3、与扩展相反,缩减应是从上层先进行。先缩减文件系统(同样可使用resize2fs);再缩减LV;再缩减VG(如果需要的话)等等。把逻辑卷mylv1由4G缩减至3G。mylv1没有格式化和挂载,所以可直接缩减。
[root@local ~]# lvreduce -L 3G /dev/myvg1/mylv1 WARNING: Reducing active logical volume to 3.00 GiB. THIS MAY DESTROY YOUR DATA (filesystem etc.)Do you really want to reduce myvg1/mylv1? [y/n]: y Size of logical volume myvg1/mylv1 changed from 4.00 GiB (1024 extents) to 3.00 GiB (768 extents). Logical volume mylv1 successfully resized.[root@local ~]# lvs /dev/myvg1/mylv1 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert mylv1 myvg1 -wi-a----- 3.00g
lvremove
用于删除LV。
显然如果LV所在的VG被删除,LV也一并被删除。
3.快照卷
3.1 什么是快照卷
对某一LV做快照卷,就是在同一卷组创建一个逻辑卷,作为此LV的另一访问路径4。一旦原卷上的数据发生变化,变化前的数据会立即先复制到快照卷。未发生变化的数据,快照卷不做记录。
这样由快照卷访问的数据,总是做快照那一刻的数据。所以快照卷主要用于数据的备份。
极端情况下,原LV上的数据如果都发生变化,创建的快照卷需和原LV一样大才能存储这些数据。
不过如果创建的快照卷仅短时间内使用,在这段时间内如果可以预见原LV上的数据变化不会超过某大小,那么快照卷创建为此大小即可。
3.2 使用场景
比如备份较多数据时,复制后一半时,前一半很可能已经发生变化了。这样复制完成后,前后数据就会是处于不同的时刻完成复制的。
如果使用快照卷作为访问路径进行备份,则复制的数据就都是做快照时刻的状态了。
3.3 命令创建及效果验证
同样使用命令lvcreate,其选项“-s”即表示创建的是快照卷。另外因快照卷一般只作为读取访问的入口,所以可使用选项“-p”设定其权限为只读。
效果验证:
在mylv1上创建ext4文件系统,并挂载至目录/tmp/lv_test。
[root@local ~]# mke2fs -t ext4 /dev/myvg1/mylv1 > /dev/nullmke2fs 1.41.12 (17-May-2010)[root@local ~]# mount /dev/myvg1/mylv1 /tmp/lv_test
在目录/tmp/lv_test创建内容为“hello”的文件hello。
[root@local ~]# echo hello > /tmp/lv_test/hello
此时对mylv1创建一个1G大小,名为mylv1-snap快照卷5,并挂载至目录/tmp/lv-snap_test。
[root@local ~]# lvcreate -s -L 1G -p r -n mylv1-snap /dev/myvg1/mylv1 Logical volume "mylv1-snap" created.[root@local ~]# mount -o ro /dev/myvg1/mylv1-snap /tmp/lv-snap_test
分别从mylv1和其快照卷所挂载的目录访问,查看内容,二者内容相同。
[root@local lv_test]# cd /tmp/lv_test/[root@local lv_test]# cat hello hello[root@local lv_test]# cd /tmp/lv-snap_test/[root@local lv-snap_test]# cat hello hello
修改文件hello内容为haha,查看两目录内容,快照卷仍为hello。
[root@local ~]# echo haha > /tmp/lv_test/hello [root@local ~]# cat /tmp/lv_test/hello haha[root@local ~]# cat /tmp/lv-snap_test/hello hello
在原卷所挂载的目录创建新的文件,效果也一样。
[root@local ~]# touch /tmp/lv_test/hello2[root@local ~]# ls /tmp/lv_test/hello hello2 lost+found[root@local ~]# ls /tmp/lv-snap_test/hello lost+found
即便卸载原卷,快照卷的挂载点依然可以使用。这再次证明快照卷是原卷的另一访问入口。
[root@local ~]# umount /dev/myvg1/mylv1[root@local ~]# ls /tmp/lv-snap_test/hello lost+found[root@local ~]# cat /tmp/lv-snap_test/hello hello
(完)
- 就像磁盘上的扩展分区不能直接使用,而要在其上建立逻辑分区才可使用一样。 ↩
- 类似磁盘的磁道与分区的关系,某磁道分配给某分区只能是整个都分配,不能取部分。所以有时磁盘分区的大小会不精确,LV的大小也一样会有这种情况,PE只能整个分配,不能取部分。 ↩
- 逻辑卷扩展,一般问题不大;缩减则是有风险的,生产环境一般不使用缩减。 ↩
- 这点类似硬链接,硬链接不能跨分区,快照卷和原卷也是必须在同一VG上。 ↩
- 注意,要在原卷格式化后再创建快照卷,因为快照卷记录的是创建的时刻原卷上数据的状态,所以原卷如果没有格式化,那么快照卷的记录也是没有文件系统,这样快照卷在挂载时会报错(提示没有文件系统,无法挂载)。
且可以想见,如果快照卷在原卷未格式化时创建,原卷格式化时,快照卷会视为是原卷上数据的变化,从而记录的就是创建的文件系统,没什么意义。
这也再次说明,快照卷记录的是创建那一刻的原卷上的状态(即便原卷没有格式化)。 ↩
- 逻辑卷
- 逻辑卷
- AIX 物理卷、逻辑卷、卷组
- lvm逻辑逻辑卷管理
- 逻辑卷管理-LVM
- 逻辑卷管理
- 逻辑卷管理
- hp 新建逻辑卷
- 逻辑卷管理
- 逻辑盘卷管理
- 逻辑卷管理
- lvm逻辑卷管理
- lvm逻辑卷
- AIX创建逻辑卷
- 逻辑卷管理
- LVM(逻辑卷管理器)
- 逻辑卷管理
- 逻辑卷管理器
- 【Js应用实例】javascript管理cookie
- 1030. 完美数列(25)
- 【BZOJ2818】Gcd(莫比乌斯反演)
- CMake 入门实战
- Leetcode 338 - Counting Bits(dp + 位运算)
- 逻辑卷
- SQL Server-聚焦事务、隔离级别详解(二十九)
- 算法训练 2的次幂表示
- DMitry ----- 信息收集工具
- 1065. 单身狗(25)
- 【报表】JFreeChart使用
- Android组件之RecyclerView的基本使用
- ECMA5forEach
- android后台下载服务的完成及事项