希望长大对我而言,是可以做更多想做的事,而不是被迫做更多不想做的事...... 首页 liunx磁盘扩容 丁D 学无止境 2021-06-25 12:55 73561已阅读 LVM 磁盘扩容 摘要本文介绍liunx磁盘的物理分区,云服务器磁盘在线扩容,物理卷和逻辑卷在线扩容。 ### 分区概念 磁盘分区其实就像柜子打格子一样,打成不同的格子放不同的衣服,裤子,帽子,领带等, 磁盘可以分成多个物理分区,放不同的数据。 ``` 主分区:最多只能有4个主分区(包含扩展分区) 扩展分区: 也是主分区的一种,也就是说主分区+扩展分区最多只能4个, 扩展分区不能格式化,不能存储数据,只能在划分成逻辑分区才能使用 逻辑分区: 逻辑分区是在扩展分区中划分的, 如果是IDE硬盘,Linux最多支持59个逻辑分区 如果是SCSI硬盘,Linux最多支持11个逻辑分区 ``` 分区的表示法 ``` sda1、sda2、sda5、sda6、 数字1、2、5、6,1~4是代表主分区,逻辑分区是从5开始的 sda1、sdb1、sdc1、 a、b、c指的是磁盘的个数,一般从a开始 ,这里是3个磁盘 ``` ``` 3个主分区,1个扩展分区,扩展分区中有3个逻辑分区 主分区1 /dev/sda1 主分区2 /dev/sda2 主分区3 /dev/sda3 扩展分区 /dev/sda4 逻辑分区1 /dev/sda5 逻辑分区2 /dev/sda6 逻辑分区3 /dev/sda7 ``` 1个主分区,1个扩展分区,扩展分区中有3个逻辑分区 ``` 主分区1 /dev/sda1 扩展分区 /dev/sda2 逻辑分区1 /dev/sda5 逻辑分区2 /dev/sda6 逻辑分区3 /dev/sda7 ``` ### 查看各个磁盘的使用情况 ``` df -lh ``` ![](/upload/微信图片_20201107164134.png) 由上图我们可以看到这台机器有两块磁盘vda和vdb vdb没有进行分区 vda有一个分区vda1 ### 查看磁盘具体信息 ``` fdisk -l ``` blocks 容量(k) sector 扇区(字节)一个扇区是512个字节 ![](/upload/CCFAD7C3-AEEA-4fff-9EB0-E0983AEF4F03.png) 由上图我们可以看到 vda 有一个分区vda1 40G vdb没有分区 21G ### 分区 接下来我们对vdb进行分区 ``` fdisk /dev/vdb m是帮助手册 n 创建一个新的分区 p是主分区 e是扩展分区 (主分区和扩展分区加起来最多只能是4个) 1 分区号(vdb1 只能是1~4) 设置容量起始和结束为止(这里直接回车就是将剩余的全部分配出去) 起始默认是从上一个分区的下一个点开始,可以使用+30G 这里的给分配30G w 是保存分区 ``` ![](/upload/4049A7AC-CC80-416b-847F-3D852B2BCB44.png) ### 创建文件系统 创建好分区,接下来我们需要对分区创建一个文件系统(也可以说是格式化) **注意这个步骤要对磁盘的数据进行备份,,不然会丢失** **注意这个步骤要对磁盘的数据进行备份,,不然会丢失** **注意这个步骤要对磁盘的数据进行备份,,不然会丢失** ``` mkfs.ext4 /dev/vdb1 创建一个ext4的文件系统 ``` ![](/upload/1AD25119-A87D-482e-A528-E7D649EB1AE3.png) ### 挂载 格式化后我们就可以将这个磁盘挂载到一个目录中了 ``` 我们创建一个目录 mkdir /data 然后将磁盘挂载上去 mount /dev/vdb1 /data 也可以是 mount -t ext4 /dev/vdb1 /data ``` ### 永久生效 但是如果重启之后挂载就看不到了,要永久生效需要在 /etc/fstab ``` /dev/vdb1 /data ext4 defaults 0 0 这里我出现一个问题,导致服务器启动不起来 就是我将上面这行写入/etc/fstab 然后将分区/dev/vdb1删除,这里启动的时候就找不到分区,这样服务器就启动不成功,可以到阿里云后台进入,将这行注释掉然后重启,就可以了 ``` ### 卸载 ``` umount /dev/vdb1 ``` ### 对数据盘进行在线扩容 ``` 假设我们一个磁盘没有分区直接挂载到一个目录上,但是后面磁盘不够了,需要扩容,我们就可以在云服务器后台进行对磁盘的容量进行添加,然后使用命令 //针对ext4文件格式的操作系统(如CentOS6) e2fsck -f /dev/vdb resize2fs /dev/vdb //针对xfs文件格式的操作系统(如CentOS7) xfs_repair /dev/vdb xfs_growfs /data 不用关机不用卸载,使用df -lh 就可以直接看到了 ``` ### 传统分区扩容 ``` 上面我们讲的是没有进行分区的,但是假设我们进行了分区 只有一个分区vdb1 30G,但是磁盘有50G 后面我们要进行扩容使用 resize2fs /dev/vdb 只能缩小 不能大于30G, 如果要扩容就只能重新分区,数据要备份迁移 这是传统分区的缺点, ``` ### LVM管理(LV、VG、PV) 上面我们讲了传统分区,如果要扩容,就需要数据进行迁移 我们可以使用LVM来管理,就可以直接在线扩容 #### 物理卷 PV 物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘。 #### 卷组 VG 卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。 #### 逻辑卷 LV 逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷要可以属于同一个卷组,也可以属于不同的多个卷组。 #### 物理区域 PE 物理区域是物理卷中可用于分配的最小存储单元,物理区域的大小可根据实际情况在建立物理卷时指定。物理区域大小一旦确定将不能更改,同一卷组中的所有物理卷的物理区域大小需要一致。 默认大小为4M的PE #### 逻辑区域 LE 逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。 一个卷组(VG)由一个或多个物理卷(PV)组成 ![](/upload/ef0db20a6b744b68a3ebd54d5558b868.png) PV LV VG 之间的关系 ![](/upload/131120334702458.png) ![](/upload/162c9d98791d4c31bc29a203c2ff07fe.png) 一块硬盘被分区物理分区,然后将分区转成物理卷,其内部是被分成若干个默认大小为4M的PE,然后在PV的基础上创建卷组,可以将一个或者多个PV加到VG中,VG就好像一个空间池,假如多少个PV,VG就有多大的容量,最后基于VG创建逻辑卷,一个逻辑卷就是若干个PE,然后将LV格式化再挂载 #### 实践 ![](/upload/4D644026-C746-47a3-AEC1-0FD4824D94F0.png) ``` 创建一个物理卷 pvcreate 硬盘名称(物理分区名) pvcreate /dev/vdb1 ``` ![](/upload/3367412A-3229-4e09-B585-CB4A56E9B845.png) ``` 创建一个卷组 vgcreate 自定义VG名称 要加入的PV vgcreate vg-test /dev/vdb1 vgdisplay 可以用来查看vg信息 如果卷组已经存在 将物理卷加入卷组 vgextend命令用于动态扩展LVM卷组,它通过向卷组中添加物理卷来增加卷组的容量。 LVM卷组中的物理卷可以在使用vgcreate命令创建卷组时添加,也可以使用vgextend命令动态的添加。 vgextend vg2000 /dev/sdb2 #将物理卷"/dev/sdb2"加入卷组"vg2000" ``` ![](/upload/F9B5F038-39A8-4bd9-BAFB-3E093824ED9F.png) ``` 创建一个逻辑卷 create -n 自定义逻辑卷名称 -L 要创建的逻辑卷的大小 VG名称 lvcreate -n lv-test -L 3G vg-test 创建文件系统 mkfs.ext4 逻辑卷名 mkfs.ext4 /dev/vg-test/lv-test ``` ![](/upload/BB932F0B-EE88-488c-8D71-EEDC67DAFD58.png) ``` 挂载 mount 逻辑卷名 目录名 mount /dev/vg-test/lv-test /lvtest/ ``` ![](/upload/84D94530-7931-43f4-9A89-BBDB60437C6E.png) ![](/upload/E1EDC65E-2BB0-4667-B764-81A8DDC16755.png) ``` lvextend -L +1G 逻辑卷名 扩容1G变成4G lvextend -L +1G /dev/mapper/vg--test-lv--test名字这个很奇怪() 这里会发现/dev/mapper/vg--test-lv--test名字这个很奇怪(这是使用fdisk -l查看出来的,也可以是逻辑卷名) 这里名字很奇怪,下次还是不要用这种带有横杠的名字,使用驼峰 ``` ![](/upload/402E9653-38C2-4b6b-B9E4-509B88249470.png) ``` 更新文件系统 resize2fs 逻辑卷名 resize2fs /dev/mapper/vg--test-lv--test ``` ![](/upload/44706BEF-6762-4511-AF16-AD6057F881EB.png) 缩小的话,有的不支持,会丢数据(网上说的没试验) ### 其他问题 ``` 一个目录只能挂载一个磁盘,假设我一个磁盘后面不够了,要换一个新的磁盘,我们可以将旧的磁盘卸载掉,然后挂载到一个临时目录,然后将旧的目录挂载到新的磁盘上,然后将临时目录的东西 复制过来 ``` ### 参考 https://www.cnblogs.com/jackruicao/articles/6258812.html https://www.cnblogs.com/xs104/p/4642406.html https://www.toutiao.com/i6665174678681682435/ 很赞哦! (1) 上一篇:tesseract-ocr验证码识别 下一篇:Elasticsearch能支持动态的DSL 目录 点击排行 Elasticsearch6.3.2之x-pack redis哨兵 2019-07-09 22:05 Redis+Twemproxy+HAProxy+Keepalived 2019-07-12 17:20 GC优化策略和相关实践案例 2019-10-10 10:54 JVM垃圾回收器 2019-10-10 10:23 标签云 Java Spring MVC Mybatis Ansible Elasticsearch Redis Hive Docker Kubernetes RocketMQ Jenkins Nginx 友情链接 郑晓博客 佛布朗斯基 凉风有信 MarkHoo's Blog 冰洛博客 南实博客 Rui | 丁D Java研发工程师 生活可以用「没办法」三个字概括。但别人的没办法是「腿长,没办法」、「长得好看,没办法」、「有才华,没办法」。而你的没办法,是真的没办法。 请作者喝咖啡