企鹅日记(十四):逻辑卷管理器LVM

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/

你可能感兴趣的:(企鹅日记)