为什么使用逻辑卷:
直接使用fdisk分区挂载的话,随着时间的推移,数据量越来越大,硬盘空间越来越小,要想扩充容量的话,就必须挂载新硬盘然后做数据迁移,这就必然导致前台业务的停止,不符合企业需求,因此完美的解决方法应该是在零停机前提下可以自如对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区。Linux提供的逻辑盘卷管理(LVM,Logical Volume Manager)机制就是一个完美的解决方案。
LVM逻辑卷管理通过将底层物理硬盘抽象封装起来,以逻辑卷的形式表现给上层系统,逻辑卷的大小可以动态调整,而且不会丢失现有数据。新加入的硬盘也不会改变现有上层的逻辑卷,大大提高了磁盘管理的灵活性。
我们来看张图:
我们来了解一下lvm中一些专业术语:
物理存储介质(The physical media):这里指系统的存储设备:硬盘,如:/dev/sda、/dev/sdb等等,是存储系统最低层的存储单元。
物理卷(physical volume):物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。
卷组(Volume Group):LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
逻辑卷(logical volume):LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。
下面我们来通过实际案例了解下怎么创建逻辑卷:
1,环境准备:
要管理逻辑卷,需要用到逻辑卷管理工具lvm2
我们可以通过以下命令进行安装:
yum install lvm2.x86_64 -y
我们的实验环境是虚拟机环境,我们需要新增两块磁盘
例如我这里新增了两块磁盘如下:
2, 创建物理卷:
[root@bogon local]# pvcreate /dev/sdb /dev/sdc Physical volume "/dev/sdb" successfully created. Physical volume "/dev/sdc" successfully created.
3,创建逻辑卷组
[root@bogon local]# vgcreate sdbandsdc /dev/sdb /dev/sdc Volume group "sdbandsdc" successfully created
4,使用逻辑卷组创建逻辑卷
[root@bogon local]# lvcreate -L 10G -n firstlvm sdbandsdc Logical volume "firstlvm" created.
看看此时物理卷的信息:
5,写入逻辑卷的文件系统:
[root@bogon local]# mkfs -t ext3 /dev/sdbandsdc/firstlvm mke2fs 1.42.9 (28-Dec-2013) 文件系统标签= OS type: Linux 块大小=4096 (log=2) 分块大小=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 655360 inodes, 2621440 blocks 131072 blocks (5.00%) reserved for the super user 第一个数据块=0 Maximum filesystem blocks=2684354560 80 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Allocating group tables: 完成 正在写入inode表: 完成 Creating journal (32768 blocks): 完成 Writing superblocks and filesystem accounting information: 完成
此时我们的逻辑卷就算创建完成,如果想用的化还是老办法挂载
install -d /firstlvm mount /dev/sdbandsdc/firstlvm /firstlvm
想开机自动生效请修改fstab文件,这里不做过多介绍
6,扩展逻辑卷firstlvm
[root@bogon firstlvm]# lvextend -L +10G /dev/sdbandsdc/firstlvm Size of logical volume sdbandsdc/firstlvm changed from 10.00 GiB (2560 extents) to 20.00 GiB (5120 extents). Logical volume sdbandsdc/firstlvm successfully resized.
扩展完成后可以去看看/firstlvm挂载点下的文件是否消失,可以看到我之前创建的文件并没有消失
在看看此时物理卷的信息
因为扩展了 10G所以sdb少了10G,PFree直接变成了0
在看看逻辑卷
此时需要注意的是虽然逻辑卷已经得到扩展但是文件系统还是10G时的文件系统,所以超过10G的数据是存不进去的,
这是我们要从新更新文件系统,但是不能用上面的mkfs命令,这个会清空逻辑卷里的数据,我们应该用以下命令:
[root@bogon firstlvm]# resize2fs /dev/sdbandsdc/firstlvm resize2fs 1.42.9 (28-Dec-2013) Filesystem at /dev/sdbandsdc/firstlvm is mounted on /firstlvm; on-line resizing required old_desc_blocks = 1, new_desc_blocks = 2 The filesystem on /dev/sdbandsdc/firstlvm is now 5242880 blocks long.
此时的容量是正确的20G:
在看看文件是否还在:
可以看到文件还在,这样才算扩展成功。
7,缩容逻辑卷firstlvm
尽管不建议缩容,因为缩容有可能会导致文件丢失,但是还是可以缩容的,但是要小心小心再小心,如果是生产服务器,建议不要这么做,毕竟现在的磁盘都很廉价,没必要缩容
1,缩容前需要卸载掉逻辑卷
umount /dev/sdbandsdc/firstlvm
然后执行下面的命令,这里我一次性给出:
[root@bogon /]# e2fsck -f /dev/sdbandsdc/firstlvm #第一步 e2fsck 1.42.9 (28-Dec-2013) 第一步: 检查inode,块,和大小 第二步: 检查目录结构 第3步: 检查目录连接性 Pass 4: Checking reference counts 第5步: 检查簇概要信息 /dev/sdbandsdc/firstlvm: 14/1310720 files (0.0% non-contiguous), 126322/5242880 blocks [root@bogon /]# resize2fs /dev/sdbandsdc/firstlvm 10G #第二步 resize2fs 1.42.9 (28-Dec-2013) Resizing the filesystem on /dev/sdbandsdc/firstlvm to 2621440 (4k) blocks. The filesystem on /dev/sdbandsdc/firstlvm is now 2621440 blocks long. [root@bogon /]# lvdisplay --- Logical volume --- LV Path /dev/sdbandsdc/firstlvm LV Name firstlvm VG Name sdbandsdc LV UUID sQMDb1-1YYr-1oJi-Til4-ge9e-0V4P-WzGx9m LV Write Access read/write LV Creation host, time bogon, 2021-02-04 15:13:05 +0800 LV Status available # open 0 LV Size 20.00 GiB Current LE 5120 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:0 [root@bogon /]# lvreduce -L 10G /dev/sdbandsdc/firstlvm #第三步 WARNING: Reducing active logical volume to 10.00 GiB. THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce sdbandsdc/firstlvm? [y/n]: y Size of logical volume sdbandsdc/firstlvm changed from 20.00 GiB (5120 extents) to 10.00 GiB (2560 extents). Logical volume sdbandsdc/firstlvm successfully resized. [root@bogon /]# lvdisplay --- Logical volume --- LV Path /dev/sdbandsdc/firstlvm LV Name firstlvm VG Name sdbandsdc LV UUID sQMDb1-1YYr-1oJi-Til4-ge9e-0V4P-WzGx9m LV Write Access read/write LV Creation host, time bogon, 2021-02-04 15:13:05 +0800 LV Status available # open 0 LV Size 10.00 GiB Current LE 2560 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:0
此时再看看文件是否还在:
很幸运还在,以为我的文件很小,文件会存储在磁盘最前面的数据块中,缩容会从后面的块开始计算来缩,所以没有被删掉,但是文件如果超过10G ,此时你要从20G 缩到10G ,会把有数据的数据块清掉,所以文件会被破坏
好了lvm的知识就先讲到这里,后面我们来讲讲raid技术