LVM逻辑卷管理
LVM
定义
LVM是 Logical Volume Manager(逻辑卷管理)的简写,,它是Linux环境下对磁盘分区进行管理的一种机制。
作用
Linux用户安装Linux操作系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件因为受上层文件系统的限制,也不能跨越多个分区来存放,所以也不能同时放到别的磁盘上。而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号链接,或者使用调整分区大小的工具,但这只是暂时解决办法,没有从根本上解决问题。随着Linux的逻辑卷管理功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方便地调整各个分区大小。
基本术语
LVM模型
创建管理
这里用了三个案例:案例1新建逻辑卷,案例2用PE个数来建立逻辑卷,案例3是扩展卷组与逻辑卷,案例4是增加交换分区。
案例1:新建一个逻辑卷
使用分区 /dev/vdb1 构建 LVM 存储,相关要求如下:
- 新建一个名为 systemvg 的卷组
- 在此卷组中创建一个名为 vo 的逻辑卷,大小为180MiB
- 将逻辑卷 vo 格式化为 EXT4 文件系统
- 将逻辑卷 vo 挂载到 /vo 目录,并在此目录下建立一个测试文件 votest.txt,内容为“I AM KING.”
LVN基本用法:
vgcreate 卷组名 物理设备.. .. lvcreate -L 大小 -n 逻辑卷名 卷组名
步骤:
步骤一:创建卷组
1)新建名为systemvg的卷组
[root@1 ~]# vgcreate systemvg /dev/vdb1 Physical volume "/dev/vdb1" successfully created Volume group "systemvg" successfully created
2)确认结果
[root@1 ~]# vgscan
Reading all physical volumes. This may take a while...
Found volume group "rhel" using metadata type lvm2
Found volume group "systemvg" using metadata type lvm2
步骤二:创建逻辑卷
1)新建名为vo的逻辑卷
[root@1 ~]# lvcreate -L 52M -n vo systemvg Logical volume "vo" created.
2)确认结果
[root@1 ~]# lvscan ACTIVE '/dev/systemvg/vo' [52.00 MiB] inherit
步骤三:格式化及挂载使用
1)格式化逻辑卷/dev/systemvg/vo
[root@1 ~]# mkfs.ext4 /dev/systemvg/vo mke2fs 1.42.9 (28-Dec-2013) 文件系统标签= OS type: Linux 块大小=1024 (log=0) 分块大小=1024 (log=0) Stride=0 blocks, Stripe width=0 blocks 13328 inodes, 53248 blocks 2662 blocks (5.00%) reserved for the super user 第一个数据块=1 Maximum filesystem blocks=33685504 7 block groups 8192 blocks per group, 8192 fragments per group 1904 inodes per group Superblock backups stored on blocks: 8193, 24577, 40961 Allocating group tables: 完成 正在写入inode表: 完成 Creating journal (4096 blocks): 完成 Writing superblocks and filesystem accounting information: 完成
2)挂载逻辑卷/dev/systemvg/vo
[root@1 ~]# mkdir /vo //创建挂载点 [root@1 ~]# mount /dev/systemvg/vo /vo //挂载 [root@1 ~]# df -hT /vo //检查结果 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/mapper/systemvg-vo ext4 47M 1.1M 42M 3% /vo
3)访问逻辑卷/dev/systemvg/vo
[root@1 ~]# echo "I AM KING."> /vo/votest.txt [root@1 ~]# cat /vo/votest.txt I AM KING.
案例2:根据PE来创建逻辑卷
在硬盘vdc创建三个分区,大小依次为:500MiB、2000MiB、512MiB
然后再基于刚建立的 2000MiB 分区构建新的 LVM 存储:
- 新的逻辑卷命名为 database,大小为50个物理扩展单元(Physical Extent),属于 datastore 卷组
- 在 datastore 卷组中的所有逻辑卷,其物理扩展单元(Physical Extent)的大小为16MiB
- 使用 EXT3 文件系统对逻辑卷 database 格式化,此逻辑卷应该在开机时自动挂载到 /mnt/database 目录
基本用法:
vgcreate -s PE大小 卷组名 磁盘分区
lvcreate -l PE个数 -n 逻辑卷名 卷组名
查看磁盘分区
[root@1 ~]# fdisk -l 磁盘 /dev/vdc:8589 MB, 8589934592 字节,16777216 个扇区 Units = 扇区 of 1 * 512 = 512 bytes 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0xf842e899 设备 Boot Start End Blocks Id System /dev/vdc1 2048 1026047 512000 83 Linux /dev/vdc2 1026048 5122047 2048000 83 Linux /dev/vdc3 5122048 6170623 524288 83 Linux
步骤一:新建卷组、逻辑卷
1)新建卷组datastore,指定PE大小为16MiB
[root@1 ~]# vgcreate -s 16M datastore /dev/vdc2 Physical volume "/dev/vdc2" successfully created Volume group "datastore" successfully created
2)新建逻辑卷database,大小设置为50个PE
[root@1 ~]# lvcreate -l 50 -n database datastore Logical volume "database" created.
3 ) 确认新建的逻辑卷
[root@1 ~]# lvscan ACTIVE '/dev/datastore/database' [800.00 MiB] inherit
步骤二:格式化及使用逻辑卷
1)格式化逻辑卷/dev/datastore/database
[root@1 ~]# mkfs.ext3 /dev/datastore/database mke2fs 1.42.9 (28-Dec-2013) 文件系统标签= OS type: Linux 块大小=4096 (log=2) 分块大小=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 51296 inodes, 204800 blocks 10240 blocks (5.00%) reserved for the super user 第一个数据块=0 Maximum filesystem blocks=209715200 7 block groups 32768 blocks per group, 32768 fragments per group 7328 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840 Allocating group tables: 完成 正在写入inode表: 完成 Creating journal (4096 blocks): 完成 Writing superblocks and filesystem accounting information: 完成
2)配置开机挂载
[root@1 ~]# mkdir /database
[root@1 ~]# vim /etc/fstab
[root@1 ~]# mount -a
[root@1 ~]# df -hT /database/
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/datastore-database ext3 772M 828K 731M 1% /database
案例3:扩展卷组及逻辑卷的大小
本例要求沿用练习一,将已有的逻辑卷 vo 的大小调整为 300MiB,要求如下:
- 原文件系统中的内容必须保持完整
- 必要时可使用之前准备的分区 /dev/vdb3 来补充空间
- 注意:分区大小很少能完全符合要求的大小,所以大小在270MiB和300MiB之间都是可以接受的
步骤一:确认逻辑卷vo的信息
1)找出逻辑卷所在卷组
[root@1 ~]# lvscan
ACTIVE '/dev/systemvg/vo' [52.00 MiB] inherit
2)查看该卷组的剩余空间是否可满足扩展需要
[root@1 ~]# vgdisplay systemvg --- Volume group --- VG Name systemvg System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 1 Act PV 1 VG Size 196.00 MiB //卷组总大小 PE Size 4.00 MiB Total PE 49 Alloc PE / Size 13 / 52.00 MiB Free PE / Size 36 / 144.00 MiB //剩余空间大小 VG UUID Ab9Mi4-y163-RAVc-82dQ-JYpe-GrEg-9DkxDa
此卷组systemvg的总大小不够300M,剩余空间才144M,必须先扩展卷组。
步骤二:扩展卷组
1)将提前准备的分区/dev/vdb3添加到卷组systemvg
[root@1 ~]# vgextend systemvg /dev/vdb3 Physical volume "/dev/vdb3" successfully created Volume group "systemvg" successfully extended
2)确认卷组新的大小
[root@1 ~]# vgdisplay systemvg --- Volume group --- VG Name systemvg System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 2 Act PV 2 VG Size 5.19 GiB PE Size 4.00 MiB Total PE 1328 Alloc PE / Size 13 / 52.00 MiB Free PE / Size 1315 / 5.14 GiB //剩余空间大小 VG UUID Ab9Mi4-y163-RAVc-82dQ-JYpe-GrEg-9DkxDa
步骤三:扩展逻辑卷大小
1)将逻辑卷/dev/systemvg/vo的大小调整为300MiB
[root@1 ~]# lvextend -L 300M /dev/systemvg/vo Size of logical volume systemvg/vo changed from 52.00 MiB (13 extents) to 300.00 MiB (75 extents). Logical volume vo successfully resized.
#上面的命令就实现将逻辑卷systemvg的大小增加248M,原先大小为52,从而变为300:lvextend -L +248M /dev/systemvg/vo
2)确认调整结果
[root@1 ~]# lvscan [root@1 ~]# lvscan ACTIVE '/dev/systemvg/vo' [300.00 MiB] inherit
3)刷新文件系统大小
确认逻辑卷vo上的文件系统类型:
[root@1 ~]# blkid /dev/systemvg/vo /dev/systemvg/vo: UUID="b6626f8d-a15b-4314-b0b1-2503a1e83e09" TYPE="ext4"
选择合适的工具刷新大小:resize2fs
[root@1 ~]# resize2fs /dev/systemvg/vo resize2fs 1.42.9 (28-Dec-2013) Filesystem at /dev/systemvg/vo is mounted on /vo; on-line resizing required old_desc_blocks = 1, new_desc_blocks = 3 The filesystem on /dev/systemvg/vo is now 307200 blocks long.
确认新大小(约等于300MiB):
[root@1 ~]# df -hT /dev/systemvg/vo 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/mapper/systemvg-vo ext4 288M 2.0M 272M 1% /vo
案例4:添加一个swap分区
本例要求为虚拟机 添加一个交换分区,相关要求如下:
- 此交换分区的大小为 512MiB
- 当系统启动时,swap分区应该可以自动挂载
- 不要移除或更改其他已经存在于你系统中的交换分区
步骤一:格式化交换分区
1)将提前准备的分区/dev/vdb5格式化为swap文件系统
[root@1 ~]# mkswap /dev/vdb5 正在设置交换空间版本 1,大小 = 524284 KiB 无标签,UUID=f88b5629-610a-4c19-b721-48578d2b2b12
2)确认格式化结果
[root@1 ~]# blkid /dev/vdb5 /dev/vdb5: UUID="f88b5629-610a-4c19-b721-48578d2b2b12" TYPE="swap"
步骤二:配置交换分区的开机启用
修改/etc/fstab文件,添加交换分区记录:
[root@1 ~]# cat /etc/fstab
............. /dev/vdb5 swap swap defaults 0 0
步骤三:确认挂载配置可用
1)检查启用新交换分区之前
[root@1 ~]# swapon -s 文件名 类型 大小 已用 权限 /dev/dm-1 partition 2097148 0 -1
2)启用新交换分区
[root@1 ~]# swapon -a
3)检查启用新交换分区之后
[root@1 ~]# swapon -s 文件名 类型 大小 已用 权限 /dev/dm-1 partition 2097148 0 -1 /dev/vdb5 partition 524284 0 -2