LVM (Logical Volume Manager) ,逻辑卷管理,这是Linux磁盘管理的一个工具,通过内核的dm模块实现,使用此方式管理的好处在于能动态的伸缩扩展分区逻辑边界,还能创建快照。 LVM可以将多个设备文件(磁盘、分区、RAID设备文件统称为PV-Physical Volume)组成一个卷组(VG-Volume Group),每一个设备文件都被分割为多个物理块(PE-Physical Extent,LVM最小存储单元默认4MB),在同一个VG中,每一个PE都对应一个相同大小的逻辑块(LE-Logical Extent),LE用于存储数据,多个LE组成一个特定大小的逻辑卷(LV-Logical Volume),类似于逻辑分区,也是需要格式化后使用,LV强于逻辑分区,它可以动态扩展伸缩容量大小、创建快照。 一、基本使用 使用逻辑卷的步骤:1)创建PV 2)创建VG 3)创建LV 4)格式化 1)创建PV 注意:若是使用分区,则需要更改分区ID为8e
[root@bogon ~]# pvcreate /dev/sd{b,c} //创建PV
[root@bogon ~]# pvs //查看PV简要信息
PV VG Fmt Attr PSize PFree
/dev/sdb lvm2 --- 20.00g 20.00g
/dev/sdc lvm2 --- 20.00g 20.00g
[root@bogon ~]# pvdisplay /dev/sdc //查看PV详细信息
"/dev/sdc" is a new physical volume of "20.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc
VG Name #还未加入卷组,所以不显示卷组名称
PV Size 20.00 GiB #PV的大小为20G
Allocatable NO #是否可划分PE分配组成LV
PE Size 0 #PE大小
Total PE 0 #所有PE的数量
Free PE 0 #剩余PE的数量
Allocated PE 0 #分配PE的数量
PV UUID hSPzna-VAC8-xkcH-1DXK-7SaL-2RKV-eLhsNu
```
2)创建VG
[root@bogon ~]# vgcreate -s 10M VG000 /dev/sd{b,c} #创建VG000,指定PE大小为10M,并加入设备文件。 Volume group "VG000" successfully created
[root@bogon ~]# vgs #查看VG简要信息 VG #PV #LV #SN Attr VSize VFree VG000 2 0 0 wz--n- 39.98g 39.98g
[root@bogon ~]# vgdisplay VG000 #查看VG详细信息
VG Name VG000
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 39.98 GiB
PE Size 10.00 MiB
Total PE 4094
Alloc PE / Size 0 / 0
Free PE / Size 4094 / 39.98 GiB
VG UUID m8XgBA-HMVy-aMud-0K4R-kPr2-XvGl-iNwEH5
```
3)创建LV
[root@bogon ~]# lvcreate VG000 -n lv1 -L 10G #在VG000中创建名为lv1大小为10G的逻辑卷
Logical volume "lv1" created.
[root@bogon ~]# lvs #lv的简要信息
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1 VG000 -wi-a----- 10.00g
4)格式化并挂载 格式化无论选择那个设备文件都可以将LV格式化成EXT4。
[root@bogon ~]# mkfs.ext4 /dev/mapper/VG000-lv1
[root@bogon ~]# mkfs.ext4 /dev/VG000/lv1
[root@bogon ~]# mkfs.ext4 /dev/dm-0
因为这些都是符号链接文件,最终都指向/dev/dm0 这个设备文件
[root@bogon ~]# ll /dev/VG000/lv1 /dev/mapper/VG000-lv1
lrwxrwxrwx. 1 root root 7 Dec 21 06:55 /dev/mapper/VG000-lv1 -> ../dm-0
lrwxrwxrwx. 1 root root 7 Dec 21 06:55 /dev/VG000/lv1 -> ../dm-0
[root@bogon ~]# mkdir /data
[root@bogon ~]# mount /dev/mapper/VG000-lv1 /data/
二、扩展LV容量大小
1)首先需要将LV卸载
[root@bogon ~]# umount /data/
2)扩展物理边界
[root@bogon ~]# lvextend /dev/VG000/lv1 -L +10G #或者-L直接指定扩展后的大小,不使用+/-
Size of logical volume VG000/lv1 changed from 10.00 GiB (1024 extents) to 20.00 GiB (2048 extents).
Logical volume VG000/lv1 successfully resized.
3)扩展逻辑边界
[root@bogon ~]# resize2fs /dev/mapper/VG000-lv1
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mapper/VG000-lv1 is mounted on /mnt; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 3
The filesystem on /dev/mapper/VG000-lv1 is now 5242880 blocks long.
4)重新挂载
[root@bogon ~]# mount /dev/mapper/VG000-lv1 /data/
[root@bogon ~]# df -HT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/VG000-lv1 ext4 22G 47M 20G 1% /mnt
原来10G的LV已经扩展到了22G,这是有误差的,并且误差取决与PE的大小。 三、扩展VG 查看发现VG大小为40G ,/dev/sdb 、/dev/sdc都已加入VG000
[root@bogon ~]# vgs
VG #PV #LV #SN Attr VSize VFree
VG000 2 1 0 wz--n- 39.98g 19.98g
[root@bogon ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb VG000 lvm2 a-- 19.99g 0
/dev/sdc VG000 lvm2 a-- 19.99g 19.98g
下面将/dev/sdd加入VG000实现扩展VG
[root@bogon ~]# vgextend VG000 /dev/sdd
Physical volume "/dev/sdd" successfully created.
Volume group "VG000" successfully extended
[root@bogon ~]# vgs
VG #PV #LV #SN Attr VSize VFree
VG000 3 1 0 wz--n- 59.97g 39.97g
已成功扩展VG大小为60G 四、缩减LV 查看lv的大小为20G,下面将演示如何将其缩减为10G
[root@bogon ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1 VG000 -wi-ao---- 20.00g
1)首先第一步还是卸载lv,因为联机进行操作是很危险的 [root@bogon ~]# umount /data/ 2)与扩展LV不同的是,第二步是先缩减逻辑边界,再所见物理边界,但是在缩减之前需要检查该LV的剩余空间,也就是没有存放数据的LE位置,使用fsck或者e2fsck检查
[root@bogon ~]# e2fsck -f /dev/mapper/VG000-lv1
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/mapper/VG000-lv1: 12/1310720 files (0.0% non-contiguous), 126312/5242880 blocks
3)缩减逻辑边界
[root@bogon ~]# resize2fs /dev/mapper/VG000-lv1 10G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/mapper/VG000-lv1 to 2621440 (4k) blocks.
The filesystem on /dev/mapper/VG000-lv1 is now 2621440 blocks long
4)缩减物理边界
[root@bogon ~]# lvreduce /dev/VG000/lv1 -L 10G
WARNING: Reducing active logical volume to 10.00 GiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce VG000/lv1? [y/n]: y
Size of logical volume VG000/lv1 changed from 20.00 GiB (2048 extents) to 10.00 GiB (1024 extents).
Logical volume VG000/lv1 successfully resized.
5)重新挂载设备
[root@bogon ~]# mount /dev/mapper/VG000-lv1 /data/
[root@bogon ~]# df -HT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/VG000-lv1 ext4 11G 38M 9.9G 1% /data
已缩减为10G,还是有误差的
五、缩减VG,移除物理卷 将VG000卷组中/dev/sdd的数据移动到/dev/sdc,并且移除/dev/sdd设备
[root@bogon ~]# vgs
VG #PV #LV #SN Attr VSize VFree
VG000 3 1 0 wz--n- 59.97g 49.97g
[root@bogon ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb VG000 lvm2 a-- 19.99g 9.99g
/dev/sdc VG000 lvm2 a-- 19.99g 19.99g
/dev/sdd VG000 lvm2 a-- 19.99g 19.99g
1)要卸载分区,首先要将数据移出来,否则会损坏数据
[root@bogon ~]# pvmove /dev/sdd /dev/sdc
2)确保设备没有数据后,开始所见物理边界
[root@bogon ~]# vgreduce VG000 /dev/sdd
Removed "/dev/sdd" from volume group "VG000"
六、创建快照 快照可以用于备份操作系统或数据,在备份操作系统时,操作系统必须是安装在LVM上的(swap与boot不能在lvm上),其原理实际是Cow(写时复制),创建快照时,会创建一个监视器并将原卷的元数据copy到镜像卷,当原卷内容改变时先将其copy到镜像卷,之后再修改数据,这样就能实现高效备份的作用 注意快照的创建非常快,并且快照卷创建之后另添加的文件就无法实现备份功能了。
[root@bogon ~]# lvcreate -L 10G -s -n lv1_snap /dev/mapper/VG000-lv1
Using default stripesize 64.00 KiB.
Logical volume "lv1_snap" created.
[root@bogon ~]# mount /dev/mapper/VG000-lv1_snap /mnt/
[root@bogon ~]# ll -i /mnt/1.txt /data/1.txt
13 -rw-r--r--. 1 root root 10380103680 Dec 23 06:50 /data/1.txt
13 -rw-r--r--. 1 root root 10380103680 Dec 23 06:50 /mnt/1.txt