什么是数据盘的扩容和缩容?如何完成Linux数据盘的扩容和缩容?一文详解
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>1. 先明确:PE是LVM架构中的“最小存储管理单元”</li><li>2. LVM的三大核心组件(PE藏在PV中)</li><li>3. PE的核心作用:让存储“可迁移、可灵活调整”</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架构中的“最小存储管理单元”</h2><p>要理解PE(Physical Extent,物理扩展块),需先掌握其所属的LVM(Logical Volume Manager,逻辑卷管理器)——它是Linux系统中一种灵活的存储管理工具,核心作用是<strong>将多个分散的物理存储设备(如硬盘、分区、RAID阵列)抽象成一个统一的“存储池”</strong>,再从“存储池”中按需划分可动态调整大小的逻辑卷,解决传统分区“大小固定、难以调整”的问题。</p>
<p class="maodian"></p><h2>2. LVM的三大核心组件(PE藏在PV中)</h2>
<p>LVM的架构由“物理层→池层→逻辑层”三层组成,PE是连接物理层与逻辑层的关键:</p>
<p><strong>1)物理卷(PV,Physical Volume)</strong><br />是LVM的“物理存储基础”,可以是物理硬盘(如/dev/sdb)、磁盘分区(如/dev/sdb1)、SAN存储卷或RAID阵列等。<br />使用前需先将这些存储介质“初始化”为PV,初始化的核心操作就是<strong>将PV划分为多个大小相等的“物理扩展块(PE)”</strong>——PE是LVM管理存储的“最小单元”(默认大小4MB,可自定义),后续LVM的所有存储分配、迁移都以PE为单位。</p>
<p><strong>2)卷组(VG,Volume Group)</strong><br />是多个PV的“集合”,相当于一个“存储池”。<br />比如将/dev/sdb1和/dev/sdc1两个PV加入同一个VG(如datavg),这个VG就拥有了两个PV的所有PE总和,后续划分逻辑卷时,直接从这个“池”中分配PE即可。</p>
<p><strong>3)逻辑卷(LV,Logical Volume)</strong><br />是从VG中“按需划分”的逻辑存储块,相当于传统分区(如/dev/mapper/datavg-datalv),可直接格式化(如XFS、EXT4)后挂载使用。<br />LV的最小组成单位是“逻辑扩展块(LE,Logical Extent)”,<strong>1个LE会直接映射到1个PE</strong>——也就是说,LV的实际存储,本质是占用了VG中若干个PV的PE。</p>
<p class="maodian"></p><h2>3. PE的核心作用:让存储“可迁移、可灵活调整”</h2>
<p>正因为LVM以PE为最小管理单元,才实现了存储的灵活性:<br />当需要更换旧硬盘、调整存储分布(如把数据从慢盘迁移到快盘)或优化性能时,无需重新分区或迁移文件,只需用pvmove命令将“旧PV上的PE”整体迁移到“同一VG内的新PV”即可——迁移完成后,LV的LE会自动重新映射到新PV的PE,上层系统和应用完全感知不到底层存储的变化。</p>
<p>要不要我帮你整理一份<strong>LVM核心概念(PV/VG/LV/PE)的对比表</strong>?把每个概念的“定义、作用、关联对象”列清楚,方便你快速查阅。</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>执行命令 </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>输入“n”,按“Enter”,开始新建分区。</p>
<p><img alt="" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HK5303.png" /></p>
<p>从回显信息可以看到,磁盘有两种分区类型:“p”表示主要分区,“e”表示延伸分区。</p>
<p>以创建一个主要分区为例,输入“p”,按“Enter”,开始创建一个主分区。</p>
<p><img alt="" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HK5T8.png" /></p>
<p>“Partition number”表示主分区编号,用户可以选择1到4之间的数字。</p>
<p>以分区编号选择“1”为例,用户在这里可以输入主分区编号“1”,按“Enter”。</p>
<p>“First sector”表示初始磁柱区域,可以选择2048-419430399,默认为2048。</p>
<p>以选择默认初始磁柱编号2048为例,直接按“Enter”。</p>
<p>“Last sector”表示截止磁柱区域,可以选择2048-419430399,默认为83886079。</p>
<p>以选择默认截止磁柱编号419430399为例,直接按“Enter”。</p>
<p>分区已经创建成功,您已经为200GB的数据盘新建了1个分区。</p>
<p>输入“p”,按“Enter”,查看新建分区的详细信息。</p>
<p><img alt="" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HKA50.png" /></p>
<p>输入“w”,按“Enter”,将分区结果写入分区表中。回显如下:</p>
<p><img alt="" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HKB01.png" /></p>
<p>出现以上信息说明为磁盘/dev/vdb创建分区/dev/vdb1完成。如果之前分区操作有误,用户可输入“q”来退出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>表示新建分区“/dev/vdb1”已挂载至“/mnt/sdc”。</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>执行命令 </p>
<div class="dxycode"><pre class="brush:bash;">vi /etc/fstab</pre></div>
<p>使用VI编辑器打开“fstab”文件。按“i”,进入编辑模式,将光标移至文件末尾,按“Enter”,添加如下内容,其中UUID=处的内容请输入您在上一步中查询到的UUID,操作如图所示:</p>
<p><img alt="" src="https://zhuji.jb51.net/uploads/allimg/20251219/2-2512191HK64S.png" /></p>
<p> 此处内容有所区别:</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>按“ESC”后,输入“:wq”,按“Enter”。保存设置并退出编辑器。</p>
<p>验证自动挂载功能,首先卸载已挂载的分区,执行命令 </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]