lvm
一、认识LVM
lvm(logical volume manager)逻辑卷管理器。主要作用是动态分配磁盘分区及调整磁盘分区大小,并且可以让多个分区或物理硬盘作为一个逻辑卷(相当于一个逻辑硬盘)来使用。
一个硬盘/dev/sda划分了三个主分区:/dev/sda1,/dev/sda2,/dev/sda3,对应挂载点/boot,/,/home还有一部分磁盘空间没有划分
问题:当系统用户增多,/home分区空间不够用了,如何处理?
解决方法:
传统方法:在未划分的空间中分割一个分区,挂载到/home下,并把sda3的内容复制到新分区上。或者把该新分区挂载到另外的挂载点上,然后在/home下创建链接,链接到该新挂载点。
结果:浪费了/dev/sda3,并且若新分区容量小于/sda3如何解决?
需要每次额外创建链接,比较麻烦。
最佳方法:
利用lvm解决。lvm的好处在于,可以动态调整逻辑卷(相当于一个逻辑分区)的容量大小。
即若sda3是一个lvm逻辑分区,比如/dev/rootvg/lv3,那么lv3就可以被动态放大。这样就解决了动态容量调整的问题。
二、lvm的基本概念
1.简介:
PV:物理卷,处于lvm的最底层,可以是整个物理磁盘,也可以是硬盘中的分区。
VG:卷组,将多个物理卷合起来就组成了卷组。组成同一个卷组的物理卷可以是同一硬盘的不同分区,也可以是不同硬盘的不同分区。
LV:逻辑卷。卷组是一个逻辑硬盘,硬盘必须分区之后才能使用,这个分区就叫逻辑卷,逻辑卷可以写入数据和格式化。
PE:物理区域,用来保存数据的最小单元,数据实际上都是写入PE,PE大小可以配置,默认是4MB。
2.建立lvm的步骤:
- 首先需要把物理硬盘分区,也可以是整块物理硬盘。
- 然后把物理分区建立成为物理卷(PV),也可以把整块硬盘都建立为物理卷。
- 把物理卷整合成为卷组(VG)。卷组就已经可以动态调整大小了。可以将物理分区加入卷组,也可以把物理分区从卷组删除(可能造成数据丢失)。
- 最后把卷组再划分为逻辑卷(LV),逻辑卷也是可以直接调整大小的。逻辑卷也需要格式化和挂载。
PV–>VG–>LV
3.物理卷管理
3.1 硬盘分区
创建方式就是使用fdisk交互命令,不过需要注意的是分区的系统ID不再是Linux默认的分区ID号83了,而要改LVM的ID号8e
3.2 建立物理卷
命令:pvcreate [设备文件名]
建立物理卷时,我们说即可以把整块硬盘都建立成物理卷,也可以把某个分区建立成物理卷。
如果要把整块硬盘都建立成物理卷,命令:pvcreate /dev/sdb
在我们的使用中,是要把分区建立成为物理卷,执行以下命令:pvcreate /dev/sdb5
3.3 查看物理卷
命令1:pvscan
>>>pvscan
PV /dev/sdb5 lvm2 [1.01 GiB]
PV /dev/sdb6 lvm2 [1.01 GiB]
PV /dev/sdb7 lvm2 [1.01 GiB]
Total: 3 [3.03 GiB] / in use: 0 [0 ] / in no VG: 3 [3.03 GiB]
我们可以看到在我的系统中,/dev/sdb5-7这三个分区是物理卷。最后一行的意思是:总共3个物理卷[大小] / 使用了0个卷[大小] / 空闲3个卷[大小]
命令2:pvdisplay
该命令可以查看更加详细的物理卷信息。
>>>pvdisplay
"/dev/sdb5" is a new physical volume of "1.01 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb5 <-PV名
VG Name <-属于的VG名,还没有分配,所以空白
PV Size 1.01 GiB <-PV的大小
Allocatable NO <-是否已经分配
PE Size 0 <-PE大小,因为还没有分配,所以PE大小也没有指定
Total PE 0 <-PE总数
Free PE 0 <-空闲PE数
Allocated PE 0 <-可分配的PE数
PV UUID CEsVz3-f0sD-e1w0-wkHZ-iaLq-O6aV-xtQNTB <-PV的UUID
3.4 删除物理卷
命令:pvremove
四、卷组管理
4.1 建立卷组
命令:vgcreate [选项] 卷组名 物理卷名
选项:
-s PE大小:指定PE的大小,单位可以是MB,GB,TB等。如果不写默认PE大小事4MB
我们有三个物理卷/dev/sdb5-7,我们先把/dev/sdb5和/dev/sdb6加入卷组,留着/dev/sdb7一会实验调整卷组大小,命令如下:
>>>vgcreate -s 8MB scvg /dev/sdb5 /dev/sdb6
Volume group "scvg" successfully created
4.2 查看卷组
查看卷组的命令同样是两个,vgscan主要是查看系统中是否有卷组,而vgdisplay则是查看卷组的详细状态的。命令如下:
>>>vgscan
Reading all physical volumes. This may take a while...
Found volume group "scvg" using metadata type lvm2
#scvg的卷组确实存在
>>>vgdisplay
--- Volume group ---
VG Name scvg ->卷组名
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 2.02 GiB ->卷组大小
PE Size 8.00 MiB ->PE大小
Total PE 258 ->PE总数
Alloc PE / Size 0 / 0 ->已用PE数量/大小
Free PE / Size 258 / 2.02 GiB ->空闲PE数量/大小
VG UUID Fs0dPf-LV7H-0Ir3-rthA-3UxC-LX5c-FLFriJ
4.3 增加卷组容量
>>>vgextend scvg /dev/sdb7
Volume group "scvg" successfully extended
#把/dev/sdb7物理卷也加入scvg卷组
>>>vgdisplay --- Volume group ---
VG Name scvg
System ID
Format lvm2
Metadata Areas 3
Metadata Sequence No 2
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 3.02 GiB ->卷组容量增加
PE Size 8.00 MiB
Total PE 387 ->PE总数增加
Alloc PE / Size 0 / 0
Free PE / Size 387 / 3.02 GiB
VG UUID Fs0dPf-LV7H-0Ir3-rthA-3UxC-LX5c-FLFriJ
4.4 减少卷组容量
>>>vgreduce scvg /dev/sdb7
Removed "/dev/sdb7" from volume group "scvg"
#在卷组中删除/dev/sdb7物理卷
>>>vgreduce -a
#删除所有的未使用物理卷
4.5 删除卷组
>>>vgremove scvg
Volume group "scvg" successfully removed
卷组删除之后,才能删除删除物理卷。还要注意的是scvg卷组还没有添加任何的逻辑卷,那如果拥有了逻辑卷,记得先删除逻辑卷再删除卷组。还记得我刚说的吗?删除就是安装的反过程,每一步都不能跳过。
五、逻辑卷管理
5.1 建立卷组
命令:lvcreate [选项] [-n 逻辑卷名] 卷组名
选项:
- -L 容量:指定逻辑卷大小,单位MB,GB,TB等
- -l 个数:按照PE个数指定逻辑卷大小,这个参数需要换算容量,太麻烦
- -n 逻辑卷名:指定逻辑卷名
那我们就建立一个1.5GB的userlv逻辑卷吧,建立命令如下:
>>>lvcreate -L 1.5G -n userlv scvg
Logical volume "userlv" created
#在scvg卷组中建立1.5GB的userlv逻辑卷
建立完逻辑卷之后,还要格式化和挂载之后逻辑卷才能正常使用。格式化和挂载命令和操作普通分区时是一样的,不过需要注意的是逻辑卷的设备文件名是/dev/卷组名/逻辑卷名,如我们的userlv 的设备文件名就是“/dev/scvg/userlv”,具体命令如下:
>>>mkfs -t ext4 /dev/scvg/userlv
#格式化
>>>mkdir /disklvm
>>>mount /dev/scvg/userlv /disklvm/
#建立挂载点,并挂载
>>>mount
...省略部分输出...
/dev/mapper/scvg-userlv on /disklvm type ext4 (rw)
#已经挂载了
当然如果需要开机自动挂载,也要修改/etc/fstab文件。
5.2 查看逻辑卷
同样的查看命令是两个,第一个命令lvscan只能看到系统中是否拥有逻辑卷,命令如下:
>>>lvscan
ACTIVE '/dev/scvg/userlv' [1.50 GiB] inherit
#能够看到激活的逻辑卷,大小事1.5GB
第二个命令:lvdisplay
>>>lvdisplay
--- Logical volume ---
LV Path /dev/scvg/userlv ->逻辑卷设备文件名
LV Name userlv ->逻辑卷名
VG Name scvg ->所属的卷组名
LV UUID 2kyKmn-Nupd-CldB-8ngY-NsI3-b8hV-QeUuna
LV Write Access read/write
LV Creation host, time localhost, 2013-04-18 03:36:39 +0800
LV Status available
# open 1
LV Size 1.50 GiB ->逻辑卷大小
Current LE 192
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
5.3 调整逻辑卷大小
命令:lvresize [选项] 逻辑卷设备文件名
选项:
- -L 容量:安装容量调整大小,单位KB,GB,TB等。使用+代表增加空间,-号代表减少空间。如果直接写容量, 代表设定逻辑卷大小为指定大小。
- -l 个数:按照PE个数调整逻辑卷大小`
我们先在/disklvm中建立点文件,一会调整完大小,我们看看数据是否会丢失:
>>>cd /disklvm/
>>>touch testf
>>>mkdir testd
>>>lslost+found testd testf
我们刚刚的userlv的大小事1.5GB,我们的scvg中还有1.5GB的空闲空间,那么增加我们的userlv逻辑卷的大小到2.5GB吧:
>>>lvresize -L 2.5G /dev/scvg/userlv
Extending logical volume userlv to 2.50 GiB
Logical volume userlv successfully resized
#增加user lv逻辑卷的大小到2.5GB
#当然命令也可以这样写[root@localhost disklvm]# lvresize -L +1G /dev/scvg/user lv
>>>lvdisplay
--- Logical volume ---
LV Path /dev/scvg/userlv
LV Name userlv
VG Name scvg
LV UUID 2kyKmn-Nupd-CldB-8ngY-NsI3-b8hV-QeU una
LV Write Access read/write
LV Creation host, time localhost, 2013-04-18 03:36:39 +0800
LV Status available
# open 1
LV Size 2.50 GiB ->大小改变了
Current LE 320
Segments 3
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
逻辑卷的大小已经改变了,但是好像有些问题啊:
>>>df -h /disklvm/
文件 系统容量 已用 可用 已用%% 挂载点
/dev/mapper/scvg-userlv 1.5G 35M 1.4G 3% /disklvm
怎么/disklvm分区的大小还是1.5GB啊?刚刚只是逻辑卷的大小改变了,如果需要让分区使用这个新逻辑卷,我们还要使用resize2fs命令来调整分区的大小。不过这里就体现了LVM的优势,我们不需要卸载分区,直接就能调整分区的大小resize2fs命令如下:
命令:resize2fs [选项] [设备文件名] [调整的大小]
选项:
-f:强制调整
设备文件名:指定调整哪个分区的大小
调整的大小:指定把分区调整到多大,要加M,G等单位。如果不加大小,会使用整个分区
那么我们已经把逻辑卷调整到了2.5GB,这时我们就需要把整个逻辑卷都加入/disklvm分区,命令如下:
>>>resize2fs /dev/scvg/userlv
resize2fs 1.41.12 (17-May -2010)
Filesystem at /dev/scvg/userlv is mounted on /disklvm; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/scvg/userlv to 655360 (4k) blocks.
The filesystem on /dev/scvg/userlv is now 655360 blocks long.
#已经调整了分区大小
>>>df -h /disklvm/
文件系统 容量 已用 可用 已用%% 挂载点
/dev/mapper/scvg-userlv 2.5G 35M 2.4G 2% /disklvm
#分区大小已经是2.5GB了
>>>ls /disklvm/
lost+found testd testf
#而且数据并没有丢失
5.4 删除逻辑卷
命令:lvremove 逻辑卷设备文件名
我们删除userlv这个逻辑卷,记得删除时要先卸载。命令如下:
>>>umount /dev/scvg/userlv
>>>lvremove /dev/scvg/userlv
ng.
#已经调整了分区大小
df -h /disklvm/
文件系统 容量 已用 可用 已用%% 挂载点
/dev/mapper/scvg-userlv 2.5G 35M 2.4G 2% /disklvm
#分区大小已经是2.5GB了ls /disklvm/
lost+found testd testf
#而且数据并没有丢失
#### 5.4 删除逻辑卷
**命令**:`lvremove 逻辑卷设备文件名`
我们删除userlv这个逻辑卷,记得删除时要先卸载。命令如下:
umount /dev/scvg/userlv
lvremove /dev/scvg/userlv