LVM的英文全称时Logical Volume Manager,重点在于可以弹性的调整文件系统的容量,而并非在于性能与数据安全上面(这个时RAID的功能)。LVM可以整合多个物理分区在一起,让这些分区看起来就像是一个磁盘一样,而且,还可以将来将其他物理分区加入或者从这个LVM管理的磁盘中删除,如此一来,整个磁盘空间使用上,相当的有弹性捏捏。
====PV,PE,VG,LV的意义====
× PV,Physical Volume,物理卷
我们实际的分区需要调整系统标识符System ID成为8e(LVM的标识符),然后再经过pvcreate的命令将它转换成LVM最底层的物理卷(PV),之后才能将这些PV加以利用,而调整SystemID的方法就是通过fdisk
× VG,Volume Group,卷组
所谓的LVM大磁盘就是将许多PV整合成这个VG,所以VG就是LVM组合起来的大磁盘。那么这个大磁盘最大可以达到多少容量呢?这与下面要说明的PE有关,因为每个VG最多仅能包含65534个PE而已。如果使用LVM默认的参数,则一个VG最大可以达到256GB的容量(参考下面的PE说明吧~)
× PE,Physical Extend,物理扩展块
LVM默认使用4MB大小的PE块,而LVM的VG最多仅能含有65534个PE,因此默认最大256G。PE是整个LVM最小的存储块,这个有点类似与文件系统的block,所有文件数将的写入都由写入PE来处理
× LV,Logical Volume,逻辑卷
最终的VG还会被切成LV,这个LV就是最后可以被格式化使用的类似分区。LV的设备文件名通常是:/dev/vgname/lvname
LVM可以弹性更改文件系统的容量,这个怎么办到的丫,,其实就是通过交换PE来进行的,将原本LV内的PE转移到其他设备中以降低LV容量,或将其他设备的PE加到此LV中加大容量。
通过PV,VG,LV的规划后,再利用mkfs就可以将你的LV格式化成可利用的文件系统。
LV的写入模式建议用线性模式liner(先写入一个物理分区/dev/sda10,这个分区写完后,再写入到另一个物理分区),还有个交错模式triped,读写性能会好点,不过数据不安全。强调性能喝备份功能的话,请使用RAID,谢谢。
====LVM实作流程====
× 先分4个分区,每个分区容量均为1G,并且Sytem ID需要为8e
× 全部分区整合为一个VG,VG名称为yidaovg,且PE大小为8MB
× 全部的VG容量都丢给LV,LV的名称为yidaolv
× 将这个LV格式化为ext4的文件系统,且挂载在/mnt/lvm中
分区的这里就省略了,注意用t参数将System ID变成8e,分区结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
# fdisk -l /dev/sda
Disk
/dev/sda
: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors
/track
, 60801 cylinders, total 976773168 sectors
Units = 扇区 of 1 * 512 = 512 bytes
Sector size (logical
/physical
): 512 bytes / 4096 bytes
I
/O
size (minimum
/optimal
): 4096 bytes / 4096 bytes
Disk identifier: 0x5be4a3f9
设备 Boot Start End Blocks Id System
/dev/sda1
2048 206847 102400 7 HPFS
/NTFS/exFAT
/dev/sda2
* 206848 169859071 84826112 7 HPFS
/NTFS/exFAT
/dev/sda3
169859072 462827821 146484375 7 HPFS
/NTFS/exFAT
/dev/sda4
462829568 976773119 256971776 5 Extended
/dev/sda5
462833664 463243263 204800 83 Linux
/dev/sda6
463245312 631181311 83968000 83 Linux
/dev/sda7
631183360 799119359 83968000 83 Linux
/dev/sda8
799121408 803315711 2097152 82 Linux swap / Solaris
/dev/sda9
803317760 805365759 1024000 8e Linux LVM
/dev/sda10
805367808 807415807 1024000 8e Linux LVM
/dev/sda11
807417856 809465855 1024000 8e Linux LVM
/dev/sda12
809467904 811515903 1024000 8e Linux LVM
|
PV阶段—————:
× pvcreate:将物理分区新建成为PV
× pvscan:查询当前系统里面任何具有pv的磁盘
× pvdisplay:显示系统上的PV状态
× pvremove:将PV属性删除,让该分区不具有PV属性
先安装lvm2这个软件:
# yum install -y lvm2
# pvscan
No matching physical volumes found
# pvcreate /dev/sda{9,10,11,12}
# pvscan
PV /dev/sda9 lvm2 [1000.00 MiB]
PV /dev/sda10 lvm2 [1000.00 MiB]
PV /dev/sda11 lvm2 [1000.00 MiB]
PV /dev/sda12 lvm2 [1000.00 MiB]
Total: 4 [3.91 GiB] / in use: 0 [0 ] / in no VG: 4 [3.91 GiB]
# pvscan
PV /dev/sda9 lvm2 [1000.00 MiB]
PV /dev/sda10 lvm2 [1000.00 MiB]
PV /dev/sda11 lvm2 [1000.00 MiB]
PV /dev/sda12 lvm2 [1000.00 MiB]
Total: 4 [3.91 GiB] / in use: 0 [0 ] / in no VG: 4 [3.91 GiB]
# 上面分别显示的是每个PV的信息与系统所有PV的信息,尤其最后一行,显示的是:
# 整体PV的量 / 已经被使用到VG的PV量 / 剩余的PV量
现在应该对PV是啥东东有了解了吧,其实就是一个物理分区,将它变成了LVM的物理逻辑卷,供以后去用的。
更加详细的列出系统上面每个PV的信息:
# pvdisplay
“/dev/sda9″ is a new physical volume of “1000.00 MiB”
— NEW Physical volume —
PV Name /dev/sda9 <==实际的分区设备名
VG Name <==因为尚未分配出去,所以还是空白
PV Size 1000.00 MiB <==容量说明
Allocatable NO <==是否已经被分配给VG
PE Size 0 <==在此PV内的PE大小
Total PE 0 <==共分出几个PE
Free PE 0 <==剩余还有多少个PE,也就是没有被LV用掉的PE数量
Allocated PE 0 <==可被分配出去的PE数量(实际能不能被分配看这个参数)
PV UUID eZFYH8-2irq-wOqk-kv31-wyny-MkU5-1ZzxABmkfs.ext4 /dev/sdb1
VG阶段————–:
# vgcreate:新建VG的命令,它的参数比较多
# vgscan:查看系统上是否有VG存在
# vgdisplay:显示目前系统上面的VG状态
# vgextend:在VG内增加额外的PVmkfs.ext4 /dev/sdb1
# vgreduce:在VG内删除PV
# vgchange:设置VG是否启动(active)
# vgremove:删除一个VG
PV的名字就是设备文件名,而VG是可自己设置名字的。
# vgcreate [-s N[mgt]] VG名称 PV名称
-s:后接PE大小,单位可以是m,g,t(大小写均可)
# vgcreate -s 8M yidaovg /dev/sda{9,10,11}
Volume group “yidaovg” successfully created
# vgscan
Reading all physical volumes. This may take a while…
Found volume group “yidaovg” using metadata type lvm2
# pvscan
PV /dev/sda9 VG yidaovg lvm2 [992.00 MiB / 992.00 MiB free]
PV /dev/sda10 VG yidaovg lvm2 [992.00 MiB / 992.00 MiB free]
PV /dev/sda11 VG yidaovg lvm2 [992.00 MiB / 992.00 MiB free]
PV /dev/sda12 lvm2 [1000.00 MiB]
Total: 4 [3.88 GiB] / in use: 3 [2.91 GiB] / in no VG: 1 [1000.00 MiB]
# vgdisplay
— Volume group —
VG Name yidaovg
System ID
Format lvm2
Metadata Areas 3
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 3
Act PV 3
VG Size 2.91 GiB
PE Size 8.00 MiB
Total PE 372
Alloc PE / Size 0 / 0
Free PE / Size 372 / 2.91 GiB
VG UUID 3iLccM-upAe-IGny-COCP-jZUC-yfaG-qk22Ku
# 最后三行指的就是能够使用的PE情况,由于尚未切分出LV,所以是所有的PE均可自由使用
接下来你可以增加PG容量:
# vgextend yidaovg /dev/sda12
Volume group “yidaovg” successfully extended
LV阶段———:
创造出VG这个大磁盘后,接下来为这个yidaovg进行分区,通过LV功能来处理。
# lvcreate:新建LV
# lvscan:查询系统上面的LV
# lvdisplay:显示系统上面的LV状态
# lvextend:在LV里面增加容量
# lvreduce:在LV里面减少容量
# lvremove:删除一个LV
# lvresize:对LV进行容量大小的调整
# lvcreate [-L N[mgt]] [-n LV名称] VG名称
# lvcreate [-l N] [-n LV名称] VG名称
-L:后面接容量,单位是m,g,t(大小写均可),要注意的是这个数必须是PE大小的整数倍。
-l:后面接PE的个数,而不是容量
-n:后面接LV的名称
接下来我把yidaovg全部分给yidaolv,注意通过vgdisplay查看PE总数为496
# lvcreate -l 496 -n yidaolv yidaovg
Logical volume “yidaolv” created
# ll /dev/yidaovg/yidaolv
lrwxrwxrwx 1 root root 7 10月 28 17:15 /dev/yidaovg/yidaolv -> ../dm-0
# lvdisplay
— Logical volume —
LV Path /dev/yidaovg/yidaolv
LV Name yidaolv
VG Name yidaovg
LV UUID juEuxo-1eV1-VO5t-IBJx-bikL-RQ5H-F4NKlp
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2012-10-28 17:15:07 +0800
LV Status available
# open 0
LV Size 3.88 GiB
Current LE 496
Segments 4
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
接下来,我对LV进行处理,注意VG的名称为yidaovg,但是LV要用全名/dev/yidaovg/yidaolv。
# mkfs -t ext4 /dev/yidaovg/yidaolv
[root@localhost ~]# mkdir /mnt/lvm
[root@localhost ~]# mount /dev/yidaovg/yidaolv /mnt/lvm
[root@localhost ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
rootfs 82649712 4862176 73589136 7% /
devtmpfs 1963068 0 1963068 0% /dev
tmpfs 1975340 600 1974740 1% /dev/shm
tmpfs 1975340 1196 1974144 1% /run
/dev/sda6 82649712 4862176 73589136 7% /
tmpfs 1975340 8 1975332 1% /sys/fs/cgroup
/dev/sda7 82649712 8306064 70145248 11% /home
/dev/mapper/yidaovg-yidaolv 3999432 73464 3722808 2% /mnt/lvm
看到了吧,这个不需要多余的解释了吧。
====放大LV的容量====
步骤:
1,用fdisk设置新的具有8e System ID的分区
2,利用pvcreate构建PV
3,利用vgextend将PV加入我们的yidaovg
4,利用lvresize将新加入的PV内的PE加入yidaolv
5,通过resize2fs将文件系统的容量实际增加
注意最后一步:整个文件系统最初格式化的时候新建了inode/block/superblock等信息,不过因为文件系统格式化的时候新建的是多个block group,因此我们可用在文件系统中增减block group方式在增建文件系统的容量。使用resize2fs命令
# fdisk /dev/sda
……省略
# pvcreate /dev/sda14
注意,我在新建分区sda13后,pvcreate的时候老是提示分区已经被系统使用或者挂载了,不知道啥原因,估计是fedora的bug,或者是之前我用RAID没有卸载干净。没办法,我再重新新建了sda14分区,就用它了。
# pvscan
# vgextend yidaovg /dev/sda14
# vgdisplay
— Volume group —
VG Name yidaovg
System ID
Format lvm2
Metadata Areas 5
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 5
Act PV 5
VG Size 4.84 GiB
PE Size 8.00 MiB
Total PE 620
Alloc PE / Size 496 / 3.88 GiB
Free PE / Size 124 / 992.00 MiB
VG UUID 3iLccM-upAe-IGny-COCP-jZUC-yfaG-qk22Ku
# lvresize -l +124 /dev/yidaovg/yidaolv
Extending logical volume yidaolv to 4.84 GiB
Logical volume yidaolv successfully resized
# lvdisplay
# df -h /mnt/lvm/
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/yidaovg-yidaolv 3.9G 122M 3.6G 4% /mnt/lvm
注意,此时文件系统的容量并没有增加。
先看一下之前文件系统的superblock数据:
# dumpe2fs /dev/yidaovg/yidaolv
# resize2fs /dev/yidaovg/yidaolv
# df -h /mnt/lvm/
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/yidaovg-yidaolv 4.8G 122M 4.5G 3% /mnt/lvm
# df -h /mnt/lvm/
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/yidaovg-yidaolv 4.8G 122M 4.5G 3% /mnt/lvm
看到效果了吧。。。
====缩小LV的容量====
# pvscan
PV /dev/sda9 VG yidaovg lvm2 [992.00 MiB / 0 free]
PV /dev/sda10 VG yidaovg lvm2 [992.00 MiB / 0 free]
PV /dev/sda11 VG yidaovg lvm2 [992.00 MiB / 0 free]
PV /dev/sda12 VG yidaovg lvm2 [992.00 MiB / 0 free]
PV /dev/sda14 VG yidaovg lvm2 [992.00 MiB / 0 free]
Total: 5 [4.84 GiB] / in use: 5 [4.84 GiB] / in no VG: 0 [0 ]
# umount /mnt/lvm
# e2fsck -f /dev/yidaovg/yidaolv
# resize2fs /dev/yidaovg/yidaolv 3968M <===3968根据上面的992×4得来的
# mount /dev/yidaovg/yidaolv /mnt/lvm/
# df /mnt/lvm/
上面只是对文件系统进行所见,接下来我们要对LV的容量进行缩减。如果我们想要抽掉的是/dev/sda14,这个PV有124个PE(通过pvdisplay查看的结果),所以要这样做:
# lvresize -l -124 /dev/yidaovg/yidaolv
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
[root@localhost ~]
# pvdisplay
--- Physical volume ---
PV Name
/dev/sda9
VG Name yidaovg
PV Size 1000.00 MiB / not usable 8.00 MiB
Allocatable
yes
(but full)
PE Size 8.00 MiB
Total PE 124
Free PE 0
Allocated PE 124
PV UUID eZFYH8-2irq-wOqk-kv31-wyny-MkU5-1ZzxAB
--- Physical volume ---
PV Name
/dev/sda10
VG Name yidaovg
PV Size 1000.00 MiB / not usable 8.00 MiB
Allocatable
yes
(but full)
PE Size 8.00 MiB
Total PE 124
Free PE 0
Allocated PE 124
PV UUID hj9mQc-4QaC-NoOx-aGOW-GPzO-Gg8S-sOQVqC
--- Physical volume ---
PV Name
/dev/sda11
VG Name yidaovg
PV Size 1000.00 MiB / not usable 8.00 MiB
Allocatable
yes
(but full)
PE Size 8.00 MiB
Total PE 124
Free PE 0
Allocated PE 124
PV UUID 1wiR0H-C92M-YRwd-SYjY-7ZMH-rTuf-sOfbBf
--- Physical volume ---
PV Name
/dev/sda12
VG Name yidaovg
PV Size 1000.00 MiB / not usable 8.00 MiB
Allocatable
yes
(but full)
PE Size 8.00 MiB
Total PE 124
<strong>Free PE 0<
/strong
>
Allocated PE 124
PV UUID cW7iGF-OqYH-d43L-WNbf-1ZKK-AFZu-QLdYjq
--- Physical volume ---
PV Name
/dev/sda14
VG Name yidaovg
PV Size 1000.00 MiB / not usable 8.00 MiB
Allocatable
yes
PE Size 8.00 MiB
Total PE 124
<strong> Free PE 124<
/strong
>
Allocated PE 0
PV UUID SpwVzP-81ue-eVjh-jpus-Ay5e-hMHL-7BxJ1W
|
这个结果的情况下,可以安全的移除/dev/sda14,因为/dev/sda14中的PE并没有被使用。如果不是这种情况,那么需要转移PE了。
# pvmove /dev/sda14 /dev/sda11
# pvscan
PV /dev/sda9 VG yidaovg lvm2 [992.00 MiB / 0 free]
PV /dev/sda10 VG yidaovg lvm2 [992.00 MiB / 0 free]
PV /dev/sda11 VG yidaovg lvm2 [992.00 MiB / 0 free]
PV /dev/sda12 VG yidaovg lvm2 [992.00 MiB / 0 free]
PV /dev/sda14 VG yidaovg lvm2 [992.00 MiB / 992.00 MiB free]
Total: 5 [4.84 GiB] / in use: 5 [4.84 GiB] / in no VG: 0 [0 ]
# vgreduce yidaovg /dev/sda14
Removed “/dev/sda14″ from volume group “yidaovg”
# pvscan
PV /dev/sda9 VG yidaovg lvm2 [992.00 MiB / 0 free]
PV /dev/sda10 VG yidaovg lvm2 [992.00 MiB / 0 free]
PV /dev/sda11 VG yidaovg lvm2 [992.00 MiB / 0 free]
PV /dev/sda12 VG yidaovg lvm2 [992.00 MiB / 0 free]
PV /dev/sda14 lvm2 [1000.00 MiB]
Total: 5 [4.85 GiB] / in use: 4 [3.88 GiB] / in no VG: 1 [1000.00 MiB]
看到效果了吧,是不是很有成就感捏?
====LVM系统快照====
快照就是将当时的系统信息记录下来,将来若改动了任何数据,则原始数据会被移到快照区,没被改动的区域由快照区与文件系统共享。主要用来备份。
# lvcreate -l 60 -s -n yidaoss /dev/yidaovg/yidaolv
==================================END=========================
本人博客已搬家,新地址为:http://yidao620c.github.io/