parted实战:无损扩容根分区(GPT大磁盘篇) 📅 发布时间:2026/7/9 19:09:04 👁️ 浏览次数: 1. 线上告急当你的CentOS根分区“红了”兄弟们最近是不是又收到监控告警说服务器根分区/空间使用率超过90%了点开一看好家伙df -h显示/dev/sda2那点可怜的空间已经飘红而业务日志还在疯狂增长想删又不敢删生怕动到哪个关键服务。这种场景搞过线上运维的兄弟肯定都懂心跳瞬间加速。我上周就刚处理完这么一桩“悬案”。一台跑着重要服务的CentOS 7.6机器根分区当初只分了200G现在只剩不到5%。第一反应当然是找“大文件”清理du -sh /*一顿操作发现/var/log和/home确实占了不少但很多日志文件业务方明确要求保留/home下也有用户数据。删是解决不了根本问题的磁盘空间就像城市的土地业务在膨胀你得想办法“扩城”而不是一味“拆迁”。更关键的是当我用lsblk看了一眼磁盘全景时发现事情并不简单。系统盘/dev/sda总容量显示有3.6TB但分配给根分区 (/dev/sda2) 的只有区区200G剩下超过3TB的空间处于“未分配”状态就这么白白闲置着这感觉就像你住在一个200平的小房间里而整个别墅有3000平其他区域都空着锁上了你说急不急人所以我们的目标很明确安全、无损地把那闲置的3TB空间“划”一部分给根分区使用。但这里有个大坑也是很多朋友第一次操作时会懵掉的地方当你习惯性地掏出fdisk /dev/sda准备大干一场时工具可能会直接给你泼一盆冷水提示“没有可用扇区”。这不是工具坏了而是你很可能遇到了GPT分区表和大容量磁盘2TB这个经典组合。fdisk这位老将对MBR分区表得心应手但面对GPT分区表和2TB以上的磁盘就有点力不从心了。这时候我们就得请出今天的主角——parted。接下来的内容我会手把手带你用parted把这件“扩城”大事给办了全程无损数据业务不中断。2. 为什么是partedfdisk的2TB之殇在动手之前我们得先搞清楚为什么不能用更常见的fdisk而非得用parted。这不是工具鄙视链而是底层技术限制导致的必然选择。理解这个能帮你避免很多无谓的折腾和风险。简单来说fdisk是MBR分区时代的“王者”而parted是GPT分区时代的“新星”。MBR主引导记录是一个很老的标准它设计的时候估计没想到硬盘能大到今天这个地步。MBR有两个致命伤第一它只支持最多4个主分区想多分就得搞扩展分区和逻辑分区挺麻烦第二也是更关键的它使用32位来存储扇区地址最大只能寻址2TB的磁盘空间。这意味着如果你的磁盘总容量超过2TB比如是一块4TB的企业级SAS盘fdisk就无法识别和使用2TB之后的空间了。而GPTGUID分区表就是为了解决这些痛点而生的。它是UEFI标准的一部分用64位地址理论上的磁盘大小上限是个天文数字约9.4ZB完全不是我们现在需要担心的。它原生支持最多128个主分区分区管理起来清爽多了。现在新买的服务器只要不是特别老的系统默认基本都是GPT分区表。我那台服务器的fdisk -l输出里就藏着答案Disk /dev/sda: 3.6 TiB, 4000787030016 bytes, 7814037168 sectors Disk model: VMware Virtual S Units: sectors of 1 * 512 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt // 看这里明确写着 gpt Disk identifier: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx看到Disklabel type: gpt这一行了吗这就是“罪魁祸首”。当你对一块GPT磁盘运行fdisk时它虽然能读但很多写操作比如创建新分区会受限或行为异常报出“No free sectors available”这种看似离谱的错误。因为它还在用MBR的那套逻辑去理解GPT的地图自然会出问题。所以结论很清晰只要你的磁盘是GPT格式或者容量大于2TB请直接使用parted工具。parted是一个支持多种分区表类型包括GPT和MBR的强大工具尤其擅长处理大容量磁盘和复杂的分区操作。它既支持命令行交互模式也支持非交互式的一条命令执行非常适合我们这种需要精准控制的运维场景。3. 实战前的“侦察”摸清你的磁盘家底老话说得好磨刀不误砍柴工。在动刀分区之前我们必须对磁盘的现状有一个清晰、完整的了解。这一步做扎实了后续操作才能心里有底避免误操作导致数据丢失。我一般会按顺序执行下面几个命令像侦察兵一样把地形摸透。第一步看整体空间格局lsblklsblklist block devices这个命令非常直观它以树状图的形式展示所有块设备磁盘和分区的挂载点和空间大小。这是我们首先要看的全局视图。lsblk输出大概长这样NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 3.6T 0 disk ├─sda1 8:1 0 1G 0 part /boot ├─sda2 8:2 0 200G 0 part / └─sda3 8:3 0 32G 0 part [SWAP]一眼就能看出磁盘sda总共3.6T下面有三个分区sda1是1G的/boot启动分区sda2是200G的根分区/sda3是32G的交换分区。最关键的是磁盘的总容量3.6T远大于已分区容量1G200G32G≈233G证实了有大量未分配空间。第二步看分区表类型和细节fdisk -l和parted -l虽然我们不用fdisk操作但用它查看信息还是可以的。fdisk -l能确认磁盘是GPT格式前面提过。但更详细的信息我们要用parted来看。parted /dev/sda print在parted的交互模式里输入print或者直接用非交互命令parted /dev/sda print你会看到类似下面的信息Model: VMware Virtual S (scsi) Disk /dev/sda: 4001GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 1075MB 1074MB xfs Linux filesystem boot, esp 2 1075MB 216GB 215GB xfs Linux filesystem 3 216GB 250GB 34.4GB linux-swap Linux swap这个输出信息量极大Disk /dev/sda: 4001GB再次确认总容量。Partition Table: gpt铁证如山GPT分区表。Sector size扇区大小通常是512字节或4K后续计算会用到。表格列出了所有现有分区编号、起始位置Start、结束位置End、大小、文件系统、名称和标志。请务必记下最后一个分区这里是sda3的结束位置End是250GB。这是我们创建新分区的起点新分区必须从旧分区的结束位置之后开始。第三步看文件系统详情df -Thdf -Th能显示已挂载分区的空间使用情况、文件系统类型和总大小。这能帮你确认根分区 (/dev/sda2) 的文件系统类型通常是xfs或ext4因为后续格式化新分区时需要保持一致。df -Th | grep -E ^/dev/sda|Filesystem重点确认/dev/sda2的Type列是xfs还是ext4。我这次案例中是xfs。侦察完毕我们掌握了所有关键情报磁盘是GPT格式有大量未分配空间根分区文件系统是XFS最后一个分区结束于250GB。接下来就可以开始我们的“扩容手术”了。4. 核心手术使用parted创建新分区好了侦察情报在手手术方案明确在sda3分区之后即250GB位置开始划出一块新的空间作为新分区。这里要特别注意我们是在剩余空间上创建新分区而不是去扩展原有的根分区sda2。在Linux中直接在线扩展一个已挂载且正在使用的根分区特别是XFS文件系统是非常危险和复杂的通常需要进入救援模式。而创建新分区并挂载到某个目录下比如/data或/home是一种更安全、更通用的“曲线救国”式扩容方案对业务影响最小。第一步进入parted交互模式parted /dev/sda你会看到提示符变成(parted)。第二步查看当前分区表确认最后位置在(parted)提示符下输入print再次核对最后一个分区的End值例如250GB。所有操作都要基于这个数字。第三步创建新分区这是最关键的一步。假设我们想创建一个1TB的新分区命令如下mkpart primary xfs 250GB 1250GB让我拆解一下这个命令mkpart 创建分区。primary 分区类型为主分区。在GPT分区表下你创建的都是“主分区”没有MBR那种主分区数量限制所以放心用primary。xfs 这是分区标签partition label或名称不是文件系统类型很多新手会误解。这里写xfs或data或任何你喜欢的名字都可以只是为了标识。真正的文件系统是在后面用mkfs命令格式化的。250GB 分区的起始点。必须紧接着上一个分区的结束点即我们刚才记下的End值不能有重叠否则会损坏现有数据。1250GB 分区的结束点。250GB 1000GB 1250GB这样就创建了一个1TB大小的分区。这里有个超级实用的技巧如果你不想算结束点想把剩下的所有未分配空间都划给这个新分区可以用-1表示磁盘的最后一个扇区mkpart primary xfs 250GB -1这个命令的意思是从250GB开始一直分到磁盘末尾。执行命令后parted可能会提示你“是否忽略/是否继续”因为新分区可能没有按照默认的扇区边界对齐这会影响性能。对于现代磁盘和操作系统通常可以输入Yes或Ignore继续。为了获得最佳性能你可以使用unit s命令切换到扇区单位然后让parted帮你计算对齐的起始扇区但一般情况下直接继续问题不大。第四步再次查看确认分区已创建再次输入print你应该会看到一个新的分区编号为4假设之前有3个分区起始点约为250GB结束点为你指定的值。第五步退出partedquit至此分区表层面的操作就完成了。系统内核可能需要一点时间来识别这个新分区。你可以运行partprobe /dev/sda命令来通知内核重新读取分区表或者简单点直接重启服务器如果允许的话。更常见的做法是我们直接进行下一步。5. 赋予生命格式化与挂载新分区创建好的分区就像一块刚划出来的“毛坯地”还不能直接存放文件。我们需要两步1. 格式化装修2. 挂载给这个房间安个门牌号让系统能访问。第一步格式化分区首先用lsblk确认新分区的设备名大概率是/dev/sda4。 然后根据你之前侦察到的根分区文件系统类型选择相应的格式化命令。我强烈建议和根分区保持一致除非你有特殊需求。如果是 XFS 文件系统CentOS 7/8 默认mkfs.xfs /dev/sda4如果遇到“设备忙”的报错可能是内核还没识别。可以尝试partprobe或者稍等几秒再试。如果是 EXT4 文件系统mkfs.ext4 /dev/sda4格式化过程很快完成后这个分区就可以存储数据了。第二步挂载分区挂载就是把这个分区关联到系统目录树的一个空目录上。这个目录称为“挂载点”。创建挂载点目录比如我们想用这个新分区来存放应用程序数据可以创建一个/data目录。mkdir /data临时挂载重启会失效mount /dev/sda4 /data现在执行df -h你应该能看到/dev/sda4已经挂载到了/data并且有了可用的空间。永久挂载写入/etc/fstab这是必须做的一步否则服务器重启后这个分区又“消失”了。 首先获取新分区的UUIDUUID比设备名/dev/sda4更稳定因为设备名可能在增加硬盘后发生变化。blkid /dev/sda4输出类似/dev/sda4: UUIDc1d1a1e5-3b8a-4a7d-9f2b-1c3d4e5f6a7b TYPExfs复制这个长长的UUID。然后编辑系统挂载配置文件vi /etc/fstab在文件末尾添加一行UUIDc1d1a1e5-3b8a-4a7d-9f2b-1c3d4e5f6a7b /data xfs defaults 0 0第一段UUID...替换成你刚才复制的。第二段/data你的挂载点。第三段xfs文件系统类型如果是ext4就写ext4。第四段defaults挂载参数。第五、六段0 0dump备份和fsck检查顺序一般填0。保存退出后强烈建议先测试一下配置是否正确避免配置错误导致系统无法启动mount -a这条命令会尝试挂载/etc/fstab里所有未挂载的设备。如果没有报错再用df -h检查/data是否已挂载成功。测试无误后就大功告成了。6. 避坑指南与高阶思考操作流程走完了但真正体现经验价值的往往是这些容易踩坑的地方和更深层的思考。我结合自己踩过的雷给大家几点忠告。坑点一起始扇区计算错误这是最危险的一步。在parted里创建分区时如果起始点Start设置在了已有分区的内部会直接覆盖并破坏那个分区的数据。务必、务必、务必在操作前用print命令确认最后一个分区的精确结束位置End并且新分区的Start必须大于这个值。我个人的习惯是在输入mkpart命令前把print的输出截图或记录下来对着看。坑点二忘记更新内核分区表用parted修改分区表后Linux内核可能不会立即感知。如果你马上尝试格式化mkfs.xfs /dev/sda4可能会报错“找不到设备或设备忙”。这时候可以运行partprobe /dev/sda强制内核重读分区表或者简单粗暴点断开再连接磁盘虚拟机可以热添加移除最稳妥的就是重启。在线上环境如果条件允许安排在维护窗口重启是最安全的。坑点三/etc/fstab配置错误/etc/fstab文件非常重要配置错误轻则分区挂不上重则导致系统无法启动到多用户模式会进入紧急救援shell。所以一定要用UUID而不是/dev/sda4这样的设备名。执行mount -a测试是规定动作不能省。在修改/etc/fstab之前先做好备份cp /etc/fstab /etc/fstab.bak。高阶思考为什么不直接扩展根分区有朋友可能会问既然有空间为什么不直接用growpart和xfs_growfs把根分区 (/dev/sda2) 扩大呢理论上可以但实操中特别是对于正在使用的根分区风险极高。分区后面必须有连续空间要扩展/dev/sda2要求sda2的紧后面End之后就是未分配空间。但在我的例子里sda2后面紧跟着的是sda3交换分区。你需要先删除或移动sda3这本身就很危险。XFS文件系统在线扩展限制XFS文件系统虽然支持在线扩展xfs_growfs但前提是底层分区/dev/sda2已经先用parted或growpart工具扩大了。而在线调整一个正在运行的系统的最关键分区任何一步出错都可能是灾难性的。操作复杂度整个过程需要精确计算扇区可能需要进入单用户模式或使用Live CD对线上业务不友好。因此对于线上生产环境的根分区空间不足最安全、最通用的做法就是创建新分区 - 格式化为所需文件系统 - 挂载到某个目录如/opt,/home,/var等- 将原目录下占用空间大的数据如日志、应用数据迁移到新分区或者直接将新目录用于未来增长。例如把/var/log整体迁移到新分区或者让新部署的应用直接把数据写到/data下。这是一种“横向扩容”的思路虽然根分区本身大小没变但系统的可用存储空间增加了达到了缓解根分区压力的目的。最后再强调一下备份。任何磁盘分区操作都有风险。如果条件允许在操作前对虚拟机做快照对物理机备份关键数据是对自己和业务负责的表现。磁盘有价数据无价。希望这篇基于实战的详细拆解能帮你下次面对“根分区告急”时从容不迫手到病除。
AI 服务器机柜选型:风冷、板冷、全液冷怎么选? 数据中心的算力密度呈指数级增长,服务器散热和能耗问题成为制约算力提升的关键瓶颈。而服务器机柜作为算力基础设施的核心载体,其冷却技术的选择直接影响数据中心的PUE值、运维成本和长期扩展性。市面上主流的机柜冷却方案分为风冷、板冷和全液冷三类&am… 2026/7/6 1:55:02
sse 哈工大 C 语言编程练习 39 2026年3月11日 收获: 1.字符串指针数组在赋值之前要申请对应大小的空间,使用完之后记得进行释放 (free)。1. 矩阵转置(Q6403) 题目描述: 用二维数组作为函数参数,实现矩阵转置。按如下函数原型编程计算并输… 2026/7/7 14:53:47
编程皮革材质,计算保养油用量与擦拭频率,延长使用寿命,防止开裂老化。 皮革材质智能保养系统一、实际应用场景描述在高端皮具、汽车内饰、家具软包、鞋靴箱包等领域,皮革制品的保养维护是日常使用中的关键环节。具体场景包括:- 奢侈品皮具护理:爱马仕、LV、Gucci等品牌包袋,单品价值数万至数十万元&am… 2026/7/9 8:56:01
压电警报系统设计与PIC32MZ微控制器应用 1. 压电警报系统的核心组件解析在工业控制和消费电子领域,可靠的声音警报系统是保障设备安全运行和人机交互的重要环节。EPT-14A4005P压电扬声器与PIC32MZ1024EFE144微控制器的组合,为各类环境下的警报需求提供了高性价比解决方案。1.1 EPT-14A4005P压电… 2026/7/9 19:06:05
Pin-Server未来展望:编译器优化框架的技术演进与生态建设 Pin-Server未来展望:编译器优化框架的技术演进与生态建设 【免费下载链接】pin-server Pin (Plug-IN framework) server provides plugin APIs for compiler optimization developers to develop optimization pass. 项目地址: https://gitcode.com/openeuler/pin… 2026/7/9 19:06:05
Vision Transformer (ViT) Patch Embedding 实现对比:Conv2D vs Linear 性能与显存占用实测 Vision Transformer (ViT) Patch Embedding 实现对比:Conv2D vs Linear 性能与显存占用实测 1. 核心问题与背景 在计算机视觉领域,Vision Transformer (ViT) 已成为继卷积神经网络(CNN)之后的新一代骨干架构。与传统CNN不同,ViT将图像分割为… 2026/7/9 19:06:05
TMC7300与STM32F100ZE的有刷直流电机控制方案 1. 项目背景与核心器件选型有刷直流电机作为工业自动化、消费电子和机器人领域最常见的执行机构之一,其控制方案的稳定性和可靠性直接影响整个系统的性能表现。传统H桥驱动方案虽然简单易用,但在应对电机启停冲击、负载突变等工况时往往力不从心。这正是… 2026/7/9 19:04:04
高精度ADC ADS127L11与STM32F410RB的工业级应用方案 1. 项目背景与硬件选型解析在工业测量、医疗设备和精密仪器等领域,高精度模拟信号采集一直是关键挑战。传统8位或12位ADC在动态范围和信噪比方面存在明显局限,而24位Δ-Σ架构的ADS127L11配合STM32F410RB的组合,为需要微伏级精度的应用提供了… 2026/7/9 19:02:04
TCP 与 UDP 协议深度对比:3 大核心差异与 10 个典型应用场景选择指南 TCP 与 UDP 协议深度对比:3 大核心差异与 10 个典型应用场景选择指南在网络通信的世界里,TCP 和 UDP 就像两位性格迥异的信使。一位严谨可靠,确保每封信件准确送达;另一位雷厉风行,追求最快的投递速度。理解它们的本质… 2026/7/9 19:00:03
机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内 机器视觉与PLC集成:轮毂缺陷检测与字符识别误差控制在0.2mm内的技术实现轮毂作为汽车关键零部件,其表面质量直接影响行车安全与美观。传统人工检测效率低且易漏检,而采用机器视觉与PLC集成方案可实现微米级精度检测。本文将深入解析高精度视觉… 2026/7/9 0:01:04
GBase 8a vs MySQL 8.0:ALTER TABLE语法与限制的5点关键差异对比 GBase 8a与MySQL 8.0:ALTER TABLE语法差异深度解析与实战指南1. 两种数据库的ALTER TABLE能力全景对比在数据库架构设计和运维过程中,表结构变更(DDL操作)是不可避免的需求。GBase 8a作为国产分析型数据库代表,与开源M… 2026/7/9 0:03:06
【大数据毕业设计】基于多源旅游数据的景区热度分析与推荐系统的设计与实现 基于 Django 的旅游偏好挖掘与景区推荐系统(源码+文档+远程调试,全bao定制等) 博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am… 2026/7/9 0:05:09
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/8 20:15:17
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/8 14:25:08