万花丛中 發表於 2025-12-20 00:00:00

什么是数据盘的扩容和缩容?如何完成Linux数据盘的扩容和缩容?一文详解

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>1. 先明确:PE是LVM架构中的&ldquo;最小存储管理单元&rdquo;</li><li>2. LVM的三大核心组件(PE藏在PV中)</li><li>3. PE的核心作用:让存储&ldquo;可迁移、可灵活调整&rdquo;</li><li>4.开始测试</li><li>Linux初始化数据盘全流程<ul class="second_class_ul"><li>查看新增数据盘</li><li>创建MBR分区</li><li>创建文件系统并挂载</li><li>设置开机自动挂载磁盘</li></ul></li></ul></div><p class="maodian"></p><h2>1. 先明确:PE是LVM架构中的&ldquo;最小存储管理单元&rdquo;</h2>
<p>要理解PE(Physical Extent,物理扩展块),需先掌握其所属的LVM(Logical Volume Manager,逻辑卷管理器)&mdash;&mdash;它是Linux系统中一种灵活的存储管理工具,核心作用是<strong>将多个分散的物理存储设备(如硬盘、分区、RAID阵列)抽象成一个统一的&ldquo;存储池&rdquo;</strong>,再从&ldquo;存储池&rdquo;中按需划分可动态调整大小的逻辑卷,解决传统分区&ldquo;大小固定、难以调整&rdquo;的问题。</p>
<p class="maodian"></p><h2>2. LVM的三大核心组件(PE藏在PV中)</h2>
<p>LVM的架构由&ldquo;物理层&rarr;池层&rarr;逻辑层&rdquo;三层组成,PE是连接物理层与逻辑层的关键:</p>
<p><strong>1)物理卷(PV,Physical Volume)</strong><br />是LVM的&ldquo;物理存储基础&rdquo;,可以是物理硬盘(如/dev/sdb)、磁盘分区(如/dev/sdb1)、SAN存储卷或RAID阵列等。<br />使用前需先将这些存储介质&ldquo;初始化&rdquo;为PV,初始化的核心操作就是<strong>将PV划分为多个大小相等的&ldquo;物理扩展块(PE)&rdquo;</strong>&mdash;&mdash;PE是LVM管理存储的&ldquo;最小单元&rdquo;(默认大小4MB,可自定义),后续LVM的所有存储分配、迁移都以PE为单位。</p>
<p><strong>2)卷组(VG,Volume Group)</strong><br />是多个PV的&ldquo;集合&rdquo;,相当于一个&ldquo;存储池&rdquo;。<br />比如将/dev/sdb1和/dev/sdc1两个PV加入同一个VG(如datavg),这个VG就拥有了两个PV的所有PE总和,后续划分逻辑卷时,直接从这个&ldquo;池&rdquo;中分配PE即可。</p>
<p><strong>3)逻辑卷(LV,Logical Volume)</strong><br />是从VG中&ldquo;按需划分&rdquo;的逻辑存储块,相当于传统分区(如/dev/mapper/datavg-datalv),可直接格式化(如XFS、EXT4)后挂载使用。<br />LV的最小组成单位是&ldquo;逻辑扩展块(LE,Logical Extent)&rdquo;,<strong>1个LE会直接映射到1个PE</strong>&mdash;&mdash;也就是说,LV的实际存储,本质是占用了VG中若干个PV的PE。</p>
<p class="maodian"></p><h2>3. PE的核心作用:让存储&ldquo;可迁移、可灵活调整&rdquo;</h2>
<p>正因为LVM以PE为最小管理单元,才实现了存储的灵活性:<br />当需要更换旧硬盘、调整存储分布(如把数据从慢盘迁移到快盘)或优化性能时,无需重新分区或迁移文件,只需用pvmove命令将&ldquo;旧PV上的PE&rdquo;整体迁移到&ldquo;同一VG内的新PV&rdquo;即可&mdash;&mdash;迁移完成后,LV的LE会自动重新映射到新PV的PE,上层系统和应用完全感知不到底层存储的变化。</p>
<p>要不要我帮你整理一份<strong>LVM核心概念(PV/VG/LV/PE)的对比表</strong>?把每个概念的&ldquo;定义、作用、关联对象&rdquo;列清楚,方便你快速查阅。</p>
<p class="maodian"></p><h2>4.开始测试</h2>
<p><strong>添加2块测试盘</strong><br /><img alt="4.开始测试" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HK23C.png" /></p>
<p><img alt="4.开始测试_图2" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HK3252.png" /><br /><strong>两块盘都制作为逻辑卷</strong></p>
<div class="dxycode"><pre class="brush:bash;"># fdisk /dev/sdb</pre></div>
<p><img alt="4.开始测试_图3" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HK3P6.png" /></p>
<div class="dxycode"><pre class="brush:bash;"># fdisk /dev/sdc</pre></div>
<p><img alt="4.开始测试_图4" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HK3B9.png" /><br /><strong>测试开始</strong></p>
<div class="dxycode"><pre class="brush:bash;"># pvcreate /dev/sdb1
# vgcreate datavg /dev/sdb1
# lvcreate -l 100%free -n datalv datavg
# mkfs -t ext4 /dev/datavg/datalv
# mkdir -p /data
# mount /dev/datavg/datalv /data</pre></div>
<p><strong>/data目录下创建测试数据</strong></p>
<div class="dxycode"><pre class="brush:bash;">方案1:# fallocate -l 4G /data/virtual_4g_file
方案2:# dd if=/dev/zero of=/data/virtual_4g_file bs=1G count=4 status=progress</pre></div>
<p><img alt="4.开始测试_图5" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HK3514.png" /><br />选其中1种即可。</p>
<div class="dxycode"><pre class="brush:bash;"># df -h</pre></div>
<p><img alt="4.开始测试_图6" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HK3151.png" /></p>
<p><strong>查看数据分布</strong></p>
<div class="dxycode"><pre class="brush:bash;"># pvdisplay /dev/sdb1 -v -m</pre></div>
<p><img alt="4.开始测试_图7" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HK3E6.png" /></p>
<p>可以看到有1279个PE,都分给了/dev/datavg/datalv。</p>
<p><strong>添加PV到VG</strong><br />将第二块盘添加到卷组:</p>
<div class="dxycode"><pre class="brush:bash;"># pvcreate /dev/sdc1
# vgextend datavg /dev/sdc1
# pvdisplay /dev/sdc1 -v -m</pre></div>
<p>再来看新加入的PV上的PE,没有被占用,都是free的。<br /><img alt="4.开始测试_图8" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HK33N.png" /></p>
<p><strong>PE迁移</strong><br />指定PE迁移这里演示指定PE情况下,将指定的PE(0-1278)从sdb迁移到sdc,指定PE迁移时,一定要确保目标PV上有足够空闲的PE,否则迁移会失败。</p>
<div class="dxycode"><pre class="brush:bash;"># pvmove /dev/sdb1:0-1278 /dev/sdc1:0-1278</pre></div>
<p><img alt="4.开始测试_图9" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HK4a2.png" /></p>
<div class="dxycode"><pre class="brush:bash;">#pvdisplay /dev/sdb1 -v -m
#pvdisplay /dev/sdc1 -v -m</pre></div>
<p><img alt="4.开始测试_图10" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HK41N.png" /></p>
<p><strong>将 /dev/sdb踢出VG</strong></p>
<div class="dxycode"><pre class="brush:bash;">#pvdisplay /dev/sdb1 -v -m
# pvs</pre></div>
<div class="dxycode"><pre class="brush:bash;">#vgreduce datavg /dev/sdb1</pre></div>
<p><img alt="4.开始测试_图11" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HK4532.png" /></p>
<p>到这里就完成了sdb1的数据往sdc1的数据迁移。</p>
<p><img alt="4.开始测试_图12" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HK4952.png" /></p>
<p>可以看到sdb1是空闲的。<br />接下来验收整块盘迁移,这里也就是缩容了,从大盘迁移到小盘。只要小盘的空间够用。</p>
<div class="dxycode"><pre class="brush:bash;"># vgextend datavg /dev/sdb1
# pvmove /dev/sdc1 /dev/sdb1</pre></div>
<p><img alt="4.开始测试_图13" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HK4333.png" /><br /><img alt="4.开始测试_图14" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HK44C.png" /><br /><img alt="4.开始测试_图15" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HK5302.png" /></p>
<p>这里可以看到已经迁移成功了。<br />/dev/sdc踢出VG,取消盘即可。</p>
<div class="dxycode"><pre class="brush:bash;"># vgreduce datavg /dev/sdc1</pre></div>
<p class="maodian"></p><h2>Linux初始化数据盘全流程</h2>
<p>本文以 Ubuntu x86_64操作系统为例</p>
<p class="maodian"></p><h3>查看新增数据盘</h3>
<p>执行命令</p>
<div class="dxycode"><pre class="brush:bash;"> fdisk -l</pre></div>
<p>查看新增数据盘。</p>
<p><img alt="" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HK5T9.png" /></p>
<p>当前的云主机有两块磁盘,/dev/vda是默认的系统盘,且已经拥有了一个分区/dev/vda1,/dev/vdb是本次新增需要初始化的数据盘,容量为200G。</p>
<p class="maodian"></p><h3>创建MBR分区</h3>
<p>下面介绍使用fdisk工具为新增数据盘/dev/vdb创建MBR分区的操作。</p>
<p>执行命令&nbsp;</p>
<div class="dxycode"><pre class="brush:bash;">fdisk /dev/vdb</pre></div>
<p>进入fdisk分区工具。</p>
<p><img alt="" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HK5359.png" /></p>
<p>输入&ldquo;n&rdquo;,按&ldquo;Enter&rdquo;,开始新建分区。</p>
<p><img alt="" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HK5303.png" /></p>
<p>从回显信息可以看到,磁盘有两种分区类型:&ldquo;p&rdquo;表示主要分区,&ldquo;e&rdquo;表示延伸分区。</p>
<p>以创建一个主要分区为例,输入&ldquo;p&rdquo;,按&ldquo;Enter&rdquo;,开始创建一个主分区。</p>
<p><img alt="" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HK5T8.png" /></p>
<p>&ldquo;Partition number&rdquo;表示主分区编号,用户可以选择1到4之间的数字。</p>
<p>以分区编号选择&ldquo;1&rdquo;为例,用户在这里可以输入主分区编号&ldquo;1&rdquo;,按&ldquo;Enter&rdquo;。</p>
<p>&ldquo;First sector&rdquo;表示初始磁柱区域,可以选择2048-419430399,默认为2048。</p>
<p>以选择默认初始磁柱编号2048为例,直接按&ldquo;Enter&rdquo;。</p>
<p>&ldquo;Last sector&rdquo;表示截止磁柱区域,可以选择2048-419430399,默认为83886079。</p>
<p>以选择默认截止磁柱编号419430399为例,直接按&ldquo;Enter&rdquo;。</p>
<p>分区已经创建成功,您已经为200GB的数据盘新建了1个分区。</p>
<p>输入&ldquo;p&rdquo;,按&ldquo;Enter&rdquo;,查看新建分区的详细信息。</p>
<p><img alt="" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HKA50.png" /></p>
<p>输入&ldquo;w&rdquo;,按&ldquo;Enter&rdquo;,将分区结果写入分区表中。回显如下:</p>
<p><img alt="" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HKB01.png" /></p>
<p>出现以上信息说明为磁盘/dev/vdb创建分区/dev/vdb1完成。如果之前分区操作有误,用户可输入&ldquo;q&rdquo;来退出fdisk分区工具,并且之前的分区结果也不会被保留。</p>
<p>最后,执行命令 partprobe,将新的分区表变更同步至操作系统即可。</p>
<p class="maodian"></p><h3>创建文件系统并挂载</h3>
<p>执行命令</p>
<div class="dxycode"><pre class="brush:bash;">mkfs -t ext4 /dev/vdb1</pre></div>
<p>为新建的分区创建文件系统,本示例中创建的是ext4格式的文件系统,请根据您的业务需求选择合适的文件系统。</p>
<p><strong>说明</strong></p>
<p>对于容量较大的云硬盘,mkfs命令可能执行时间较长,如需要缩短命令执行时间,您可以为mkfs命令添加如下参数:</p>
<p>ext2、ext3、ext4文件系统:添加-E nodiscard参数</p>
<p>xfs文件系统:添加-K参数</p>
<p><img alt="" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HK6127.png" /></p>
<p>格式化需要等待一段时间,不要退出,直到显示格式化完成。</p>
<p>执行命令 ,新建挂载点。本示例中/mnt/sdc为挂载点。</p>
<div class="dxycode"><pre class="brush:bash;">mkdir /mnt/sdc</pre></div>
<p>执行命令将新建分区挂载到新建的挂载路径下。</p>
<div class="dxycode"><pre class="brush:bash;">mount /dev/vdb1 /mnt/sdc</pre></div>
<p>执行命令 查看挂载结果。</p>
<div class="dxycode"><pre class="brush:bash;">df -TH</pre></div>
<p><img alt="" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HK63J.png" /></p>
<p>表示新建分区&ldquo;/dev/vdb1&rdquo;已挂载至&ldquo;/mnt/sdc&rdquo;。</p>
<p class="maodian"></p><h3>设置开机自动挂载磁盘</h3>
<p>如果您需要在主机系统启动时自动挂载磁盘,不能采用在/etc/fstab直接指定/dev/vdb1的方法,因为设备的顺序编码在关闭或者开启主机过程中可能发生改变,例如/dev/vdb1可能会变成/dev/vdb2。推荐使用UUID来配置自动挂载数据盘。磁盘的UUID(Universally Unique Identifier)是Linux系统为磁盘分区提供的唯一的标识字符串。</p>
<p>执行命令,查询磁盘分区/dev/vdb1的UUID和文件系统类型。</p>
<div class="dxycode"><pre class="brush:bash;">blkid /dev/vdb1</pre></div>
<p><img alt="" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HK6345.png" /></p>
<p>执行命令&nbsp;</p>
<div class="dxycode"><pre class="brush:bash;">vi /etc/fstab</pre></div>
<p>使用VI编辑器打开&ldquo;fstab&rdquo;文件。按&ldquo;i&rdquo;,进入编辑模式,将光标移至文件末尾,按&ldquo;Enter&rdquo;,添加如下内容,其中UUID=处的内容请输入您在上一步中查询到的UUID,操作如图所示:</p>
<p><img alt="" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HK64S.png" /></p>
<p>&nbsp;此处内容有所区别:</p>
<p>在ubuntu中 前缀是 /dev/disk/by-uuid</p>
<p>在centos中 前缀是 UUID=</p>
<p>与已有的配置保持一致。</p>
<p>注意最后一个参数 是 2</p>
<p><img alt="" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HKKE.png" /></p>
<p>按&ldquo;ESC&rdquo;后,输入&ldquo;:wq&rdquo;,按&ldquo;Enter&rdquo;。保存设置并退出编辑器。</p>
<p>验证自动挂载功能,首先卸载已挂载的分区,执行命令&nbsp;</p>
<div class="dxycode"><pre class="brush:bash;">umount /dev/vdb1</pre></div>
<p><img alt="34.png" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HKK41.png" /></p>
<p>执行命令 来重新加载/etc/fstab文件的所有内容</p>
<div class="dxycode"><pre class="brush:bash;">mount -a</pre></div>
<p><img alt="35.png" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HKN47.png" /></p>
<p>执行命令 来查询文件系统挂载,操作及回显如图所示:</p>
<div class="dxycode"><pre class="brush:bash;">mount |grep /mnt/sdc</pre></div>
<p><img alt="" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HKI10.png" /></p>
<p>如果出现图中回显信息,说明自动挂载设置成功。</p>
<p>以上就是什么是数据盘的扩容和缩容?如何完成Linux数据盘的扩容和缩容的详细内容,更多相关资料请阅读琼殿技术社区其它文章!</p>
頁: [1]
查看完整版本: 什么是数据盘的扩容和缩容?如何完成Linux数据盘的扩容和缩容?一文详解