相信参过Linux 系统运维面试的人都知道,考官必问的一道题就是怎么使用lvm来新建一个文件系统。如果你答不上来,哈哈,那么不客气, 你的面试几乎就结束了
。。。。。
既然LVM这么重要,那今天我们就来谈谈Linux 里面常说的LVM。。。
什么是LVM?
LVM是逻辑卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制。
为什么要使用LVM?
直接使用fdisk分区挂载的话,随着时间的推移,数据量越来越大,硬盘空间越来越小,要想扩充容量的话,就必须挂载新硬盘然后做数据迁移,这就必然导致前台业务的停止,不符合企业需求,因此完美的解决方法应该是在零停机前提下可以自如对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区。Linux提供的逻辑盘卷管理(LVM,Logical Volume Manager)机制就是一个完美的解决方案。
LVM逻辑卷管理通过将底层物理硬盘抽象封装起来,以逻辑卷的形式表现给上层系统,逻辑卷的大小可以动态调整,而且不会丢失现有数据。新加入的硬盘也不会改变现有上层的逻辑卷,大大提高了磁盘管理的灵活性。
LVM 基本术语:
物理卷(PV, Physical Volume)
物理卷就是指磁盘,磁盘分区或从逻辑上和磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有和LVM相关的管理参数。
比如你新添加了一块磁盘 /dev/sdb, 那么你可以将整块磁盘/dev/sdb 标记成一个PV,也可以先对/dev/sdb 分区,如分了两个主分区/dev/sdb1 和 /dev/sdb2 ,然后将这两个分区/dev/sdb1 和 /dev/sdb2 分别标记成一个PV。
卷组(VG, Volume Group)
LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成,相当于磁盘容量总和的一个存储池。能在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。
逻辑卷(LV, Logical Volume)
LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上能建立文件系统(比如/tmp或/var等)。
PE(physical extent):
每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。
总的来说, 使用LVM 机制创建一个LV 的过程是:一块硬盘(物理存储介质)被格式化为物理卷(physical volume),其内部被分成若干个默认大小为4M的PE(physical extent),然后在PV的基础上创建卷组(Volume Group),可以把一个或者多个PV加到VG中,VG就好像一个空间池,假如多少个PV,VG就有多大的容量,最后基于VG创建逻辑卷(logical volume) ,一个逻辑卷就是若干个PE,然后将LV格式化再挂载(将LV当成传统磁盘划分里面的磁盘分区)。
简单画一个图,应该还是很好理解的:
说了这么多,不如让我们的简单的动手操作一下,看看这个LVM 到底是怎么创建文件系统的。
应用一:使用lvm 创建一个文件系统 /test
1. 准备磁盘:新添加一块2G 的磁盘
但是遇到一个小情况,添加完磁盘后系统并没有识别到新添加的那块磁盘。这怎么办呢?别着急, 你可以使用下面的命令,让系统识别你新添加的那块磁盘:
cd /sys/class/scsi_host
ls //看到有三个目录 host0 , host1, host2
echo "- - -" > host0/scan
echo "- - -" > host1/scan
echo "- - -" > host2/scan
当运行完上面的命令后,可以神奇的发现 使用lsblk 竟然可以看到新添加的那块磁盘/dev/sdc 啦。
2. 然后我们就可以对磁盘进行分区啦。(也可以不分区, 看具体的需要,因为我不想把这个盘全部分给一个文件系统, 所以我创建了分区,让磁盘还剩余一些空间留着以后使用。)
我们新建两个主分区 , 分别是/dev/sdc1 和 /dev/sdc2
命令:fdisk /dev/sdc
3. 使用pvcreate 命令创建PV:
命令:pvcreate /dev/sdc1
pvcreate /dev/sdc2
记住:可以用pvs 命令查看系统所有的PV。若想查看PV的详细信息请用pvdisplay 命令。
4. 使用vgcreate 命令创建VG:
命令:vgcreate testvg /dev/sdc1 /dev/sdc2
//创建的vg 名字叫testvg ,将两个PV /dev/sdc1 和 /dev/sdc2 加到了新创建的这个VG。
所以现在VG的空间就是 /dev/sdc1 和 /dev/sdc2 的空间的总和。
记住:可以用vgs命令 查看系统所有的VG。同样,若想查看VG的详细信息请用vgdisplay 命令。
5. 使用lvcreate 命令创建LV:
命令:lvcreate -L 200M -n teslv testvg
//创建的lv 名字叫testlv ,大小200M,属于testvg。
同样可以用lvs命令 查看系统所有的LV。若想查看LV的详细信息请用lvdisplay 命令。
6. 格式化lv:
命令:mkfs.ext4 /dev/testvg/testlv
//将 /dev/testvg/testlv 格式化成ext4 的文件系统类型
7. 创建挂载点,设置开机挂载
命令: mkdir /test //创建挂载点为 /test
vim /etc/fstab //编辑/etc/fstab 文件设置开机自动挂载,具体内容行参考以下截图
mount -a //挂载/etc/fstab 里面的内容
df -hT /test //测试是否挂载成功
/etc/fstab 文件关于 testlv 开机自动挂载到/test 的设置如下:
应用二:将/test 文件系统从原来的100M 扩展到150M ,实现在线扩容
命令:lvextend -L 150M /dev/testvg/testlv
同样的,当VG 空间用满的时候你也可以用vgextend 命令扩展VG 的空间,从而扩展LV 的空间。
应用三:将/test 文件系统从原来的150M 缩减到80M
1. 卸载已经挂载的逻辑卷
命令:umount /test
2. 缩小文件系统
命令:resize2fs /dev/testvg/testlv 100M
这个时候我们的逻辑卷的文件系统已经被缩小为100M了,接下来我们就可以缩小我们的逻辑卷的大小了。
3. 缩小LV
因为我们之前的LV大小为150M,我们通过缩小文件系统将其缩减为100M,所以此时我们需要缩小50M大小的逻辑卷。
4. 缩小完逻辑卷以后,我们再将逻辑卷挂载到 /test下,看看是否可以挂载成功。最好看一下之前的文件还在不在。
注意:缩小逻辑卷的操作是个危险的操作,稍不注意就可能损坏我们的逻辑卷,造成文件的丢失或损害,所以我们一般不要对逻辑卷进行缩减操作!!!
最后,小编想说关于上面实验中的命令有跟多种用法,详细的语法清参考帮助文档奥!
在Linux 中一定要学会使用man 命令查看帮助文档。
https://www.cnblogs.com/xs104/p/4642406.html
https://blog.csdn.net/qq_27281257/article/details/81603410