在线咨询 400-826-1668
回到顶部
ARTICLE DETAIL

资讯详情

深耕国风建站与运营引流的一线实战洞察。

Ubuntu 18.04磁盘空间不足?从原理到实战的扩容解决方案

Ubuntu 18.04磁盘空间不足?从原理到实战的扩容解决方案 1. 项目概述当Ubuntu 18.04的磁盘空间告急如果你正在使用Ubuntu 18.04无论是作为主力开发环境、服务器还是跑在虚拟机里迟早会遇到一个让人头疼的问题磁盘空间不足。系统盘那个小小的根分区/或者家目录分区/home不知不觉就被塞满了apt update失败新软件装不上甚至系统日志都写不进去整个系统变得卡顿且脆弱。这不仅仅是虚拟机用户的专属烦恼物理机双系统用户、单盘用户同样会面临分区规划不合理导致的后续空间紧张。“扩展磁盘空间”这个操作听起来简单但背后涉及的概念和步骤却让不少新手望而却步。它不是一个单一的“扩容”按钮而是一个从底层存储到上层文件系统的完整操作链。特别是在Ubuntu 18.04这个经典的LTS版本上虽然其生命周期已近尾声但仍有大量生产环境和怀旧用户在坚守掌握这套“扩容手术”依然非常实用。本文将彻底拆解这个过程从原理到实操从虚拟机到物理机让你不仅能解决眼前的空间危机更能理解每一步操作背后的逻辑做到举一反三。2. 核心概念与准备工作理解“扩展”的真正含义在动手之前我们必须厘清几个关键概念否则很容易在操作中迷失方向。很多人一看到“磁盘空间不足”第一反应就是“加硬盘”这没错但“加”和“扩”是两回事对应的解决方案也不同。2.1 物理扩容 vs. 逻辑扩容首先我们要区分两种根本不同的场景物理扩容你的硬盘物理容量确实不够了。比如你的笔记本电脑只有一块256GB的SSD已经塞满了。解决方案是更换更大容量的硬盘或者添加第二块硬盘。这属于硬件层面的升级。逻辑扩容你的硬盘物理容量是足够的但当初分区时给某个分区特别是系统根分区/分配的空间太小而其他分区如/home或交换分区空间却有富余。或者在虚拟机环境中你为虚拟硬盘文件分配了更大的容量但虚拟机内的操作系统并未使用这部分新增空间。我们常说的“扩展磁盘空间”主要指的就是这种逻辑扩容即在不增加物理硬盘的情况下重新分配或利用已有的硬盘空间。对于虚拟机用户如VMware、VirtualBox通常可以先在虚拟机设置里“扩大”虚拟磁盘的尺寸这相当于增加了物理硬盘的容量但虚拟机内的操作系统还需要后续步骤才能使用它。对于物理机用户如果主板和机箱有富余的SATA接口和电源添加第二块硬盘是最直接的方式。2.2 关键工具与状态检查在开始任何危险操作前备份重要数据是铁律。对于系统关键分区建议使用dd或rsync进行完整备份对于家目录数据简单拷贝即可。接下来我们需要一套命令行工具来充当我们的“手术刀”和“眼睛”lsblk列出所有块设备磁盘、分区的树状图最直观地查看磁盘和分区结构、大小和挂载点。df -h查看已挂载文件系统的磁盘空间使用情况-h表示人类可读格式。这是你判断哪个分区空间不足的直接依据。fdisk/gdisk/parted磁盘分区工具。fdisk适用于传统的MBR分区表最大支持2TBgdisk适用于GPT分区表支持更大容量。parted是一个更现代、功能更强的交互式工具两者都支持。pvcreate/vgcreate/lvcreate/lvextendLVM逻辑卷管理相关命令。如果你的系统使用了LVM那么扩容会灵活和安全得多。resize2fs/xfs_growfs扩展文件系统大小的命令。resize2fs用于ext2/3/4文件系统xfs_growfs用于XFS文件系统。这是最关键的一步扩大分区后必须扩大其内的文件系统否则新增空间无法被使用。首先打开终端使用lsblk和df -h给你的系统做个“体检”lsblk df -h通过df -h你可以快速定位是/、/home还是/boot分区空间告急。通过lsblk你可以看到该分区对应的物理设备是哪个如/dev/sda2以及它所在磁盘的剩余空间布局。注意如果df -h显示的使用率接近100%但lsblk或fdisk -l显示分区后面还有未分配空间那么恭喜你很可能只需要进行后续的“扩展分区-扩展文件系统”操作。如果整个磁盘都满了你就需要考虑物理扩容或使用下文提到的LVM迁移方案了。3. 方案选型与详细操作流程根据你的磁盘分区布局是否使用LVM以及空间不足的具体情况有以下几种主流解决方案。我将从最常见、最推荐的方案开始讲解。3.1 方案A使用LVM逻辑卷管理进行灵活扩容推荐如果你的Ubuntu 18.04在安装时选择了“使用LVM”选项很多安装器默认或推荐这么做那么扩容将变得非常轻松和安全。LVM抽象了物理存储允许你动态调整逻辑卷的大小。操作原理LVM的结构分为三层物理卷PV-卷组VG-逻辑卷LV。你的文件系统建立在LV之上。扩容的本质是先确保卷组VG有可用空间可以通过添加物理卷PV实现然后扩展逻辑卷LV的大小最后扩展LV上的文件系统。假设场景你的根目录/挂载在逻辑卷/dev/ubuntu-vg/ubuntu-lv上空间不足。卷组ubuntu-vg还有剩余空间。操作步骤检查LVM状态sudo pvdisplay # 查看物理卷 sudo vgdisplay # 查看卷组关注“Free PE / Size”项这是可用的扩展空间 sudo lvdisplay # 查看逻辑卷确认你的根文件系统对应的逻辑卷以及其所属的卷组是否有可用空间。扩展逻辑卷LV 如果卷组有空间直接扩展LV。假设要扩展20Gsudo lvextend -L 20G /dev/ubuntu-vg/ubuntu-lv如果你想扩展到卷组的所有剩余空间sudo lvextend -l 100%FREE /dev/ubuntu-vg/ubuntu-lv扩展文件系统 扩展LV后文件系统并不会自动变大。需要根据文件系统类型执行相应命令。对于ext4文件系统最常见sudo resize2fs /dev/ubuntu-vg/ubuntu-lvresize2fs会自动探测LV的新大小并调整文件系统。对于XFS文件系统sudo xfs_growfs /注意XFS文件系统需要指定挂载点。验证结果df -h /查看根分区的可用空间是否已增加。如果卷组没有空间了怎么办这时你需要为卷组添加新的物理卷PV。这可以是一块新硬盘如/dev/sdb也可以是现有硬盘上新创建的一个分区。添加新硬盘sudo pvcreate /dev/sdb # 将新硬盘初始化为物理卷 sudo vgextend ubuntu-vg /dev/sdb # 将物理卷加入卷组之后再重复上面的步骤2和3扩展LV。使用现有硬盘的未分配空间这需要先使用fdisk/gdisk在现有硬盘上创建一个新分区类型设置为Linux LVM代码8e然后对该分区如/dev/sda3执行pvcreate和vgextend。实操心得LVM的最大优势在于“在线扩容”你可以在系统运行、分区挂载的情况下直接完成扩展操作无需重启。这是生产环境的首选。在安装Ubuntu时我强烈建议勾选“使用LVM”选项为未来的灵活性投资。3.2 方案B扩展传统分区无LVM如果你的系统没有使用LVM分区是传统的“主分区/扩展分区逻辑分区”模式扩容会相对复杂和危险因为你需要调整现有分区表。此操作有较高数据丢失风险务必提前备份核心限制你只能向后扩展一个分区即这个分区的末尾后面必须有紧邻的、未分配的空间。你不能向前扩展也不能跨越其他分区进行扩展。操作原理使用parted或growpart工具先删除原有分区分区表信息然后在同一起始扇区、更大结束扇区的位置创建一个新的、同类型的分区。由于只修改了分区表元数据并没有触及原分区内的数据只要操作正确数据是安全的。最后再扩展文件系统。假设场景/dev/sda2分区挂载为/空间不足且/dev/sda2后面紧跟着有未分配空间。操作步骤使用parted启动parted并选择磁盘sudo parted /dev/sda查看分区布局(parted) print free确认/dev/sda2的结束位置和后面的空闲空间。卸载分区如果扩展的是非根分区如/homesudo umount /home注意对于根分区/你无法卸载。有几种方法最佳实践使用Live CD/USB如Ubuntu安装盘启动在Live环境中进行操作。冒险做法在系统运行时使用parted的resizepart命令较新版本支持在线调整某些分区但这并非100%安全不推荐用于生产环境。删除并重建分区在Live环境中 假设我们在Live环境中/dev/sda2的起始扇区是1048576kB。(parted) rm 2 # 删除2号分区这只是删除分区表记录 (parted) mkpart primary ext4 1048576kB 100% # 新建主分区从原起始位置到磁盘末尾或指定结束位置关键点起始扇区1048576kB必须和原分区完全一致否则数据全毁100%表示用到所有剩余空间你也可以指定具体的结束值。设置分区标志并退出(parted) set 2 boot on # 如果这是可启动分区设置boot标志 (parted) quit检查并修复文件系统 分区表更改后建议强制检查文件系统。sudo e2fsck -f /dev/sda2 # 对ext4文件系统扩展文件系统sudo resize2fs /dev/sda2重新挂载并验证sudo mount /dev/sda2 /mnt df -h /mnt确认空间已扩展后重启进入原系统。踩坑记录我曾在一次操作中因为记错了起始扇区导致重建分区后数据无法识别。幸亏有备份。因此在执行rm命令前务必用(parted) unit s print命令以扇区为单位精确记录分区的Start值并在mkpart时原样输入。使用growpart工具cloud-utils包的一部分可以自动化这个危险过程相对更安全sudo growpart /dev/sda 2。3.3 方案C添加新硬盘并挂载到特定目录这是最安全、最直接的方法尤其适合物理机添加第二块硬盘或者虚拟机新增一块虚拟硬盘。它不涉及对原有系统分区的任何改动。操作原理将新硬盘分区、格式化然后将其挂载到一个需要的目录下例如将新硬盘挂载到/home目录从而转移家目录的存储压力或者挂载到/data、/var等特定目录。操作步骤识别新硬盘连接新硬盘后使用lsblk或sudo fdisk -l查看新磁盘设备名通常是/dev/sdb或/dev/nvme0n2。分区与格式化sudo fdisk /dev/sdb # 使用fdisk或gdisk进行分区 # 在fdisk交互界面内n (新建分区), p (主分区), 1 (分区号)回车默认起始回车默认结束所有空间w (保存) sudo mkfs.ext4 /dev/sdb1 # 格式化为ext4文件系统创建挂载点并挂载sudo mkdir /new_drive sudo mount /dev/sdb1 /new_drive实现开机自动挂载 临时挂载重启后会失效。需要修改/etc/fstab文件。 首先获取新分区的UUIDsudo blkid /dev/sdb1输出类似/dev/sdb1: UUIDxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx TYPEext4编辑/etc/fstab在末尾添加一行UUIDxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /new_drive ext4 defaults 0 2保存后可以测试一下配置是否正确sudo mount -a如果没有报错说明配置成功。高级用法迁移目录 如果你觉得/home空间太小想迁移到新硬盘将新硬盘挂载到临时位置如/mnt/new_home。使用rsync同步原/home目录所有内容到新位置sudo rsync -avx /home/ /mnt/new_home/。重命名原/home目录备份sudo mv /home /home.old。将新硬盘挂载到/home修改/etc/fstab将挂载点改为/home。重启系统。如果一切正常可以删除/home.old备份。4. 虚拟机环境下的特殊操作流程对于VMware或VirtualBox的虚拟机扩容流程多了一个前置步骤先在虚拟机管理软件中扩展虚拟磁盘的容量。这个操作只是扩大了“虚拟硬盘”这个文件的大小虚拟机内的操作系统并不知道这个变化。4.1 VMware Workstation/Fusion 扩展虚拟磁盘确保虚拟机关机。在VMware中选择虚拟机 - 设置 - 硬盘 - 扩展。输入一个更大的容量。启动虚拟机进入Ubuntu系统。4.2 VirtualBox 扩展虚拟磁盘关闭虚拟机。在宿主机终端使用VBoxManage命令假设虚拟磁盘文件为ubuntu.vdiVBoxManage modifyhd ubuntu.vdi --resize 40960 # 单位是MB此处扩展到40GB启动虚拟机。完成上述步骤后虚拟机内的Ubuntu 18.04看到的硬盘容量变大了但分区和文件系统还是原来的大小。此时你需要根据虚拟机内Ubuntu的分区类型跳转到本文的第3章方案A或方案B继续操作。注意事项对于使用VirtualBox且创建了快照的虚拟机直接修改vdi文件可能无效或导致问题。你需要先删除所有快照或者对当前的快照状态进行克隆出一个新的vdi再扩容。5. 常见问题排查与实战技巧在实际操作中你可能会遇到各种意想不到的情况。这里记录了几个典型问题和我的解决思路。5.1 问题df和du显示的磁盘使用量差异巨大这是一个经典问题。df从文件系统层面统计已用空间而du是递归计算文件和目录的磁盘用量。两者出现巨大差异例如df显示用了90%du统计只用了50%通常有以下原因已删除文件被进程占用一个文件被删除后如果仍有进程在打开它该文件所占用的空间不会被立即释放df会认为空间仍被占用而du则找不到这个文件。重启相关进程或系统即可释放。# 查找被删除但仍被占用的文件 sudo lsof | grep deleted # 找到对应的进程ID重启或终止该进程文件系统预留空间Ext文件系统默认会为root用户保留5%的空间用于关键系统操作。这部分空间du不计入但df计入。对于大容量数据盘这很浪费。可以调整为1%sudo tune2fs -m 1 /dev/sda1磁盘坏块或文件系统错误运行sudo e2fsck -f /dev/sda1检查并修复。5.2 问题扩展分区后resize2fs提示“设备或资源忙”这通常是因为你试图扩展一个当前已挂载的文件系统而内核的某些部分如日志、元数据正在被活跃使用。对于根文件系统最稳妥的方法是使用Live USB启动盘进行操作。对于/home等分区确保已将其卸载sudo umount /home并且没有用户进程在使用该目录下的文件可以使用lsof | grep /home查看。5.3 问题使用LVM时vgdisplay显示没有“Free PE”这说明卷组已满。你需要为卷组添加新的物理空间。参考3.1章末尾的方法要么添加整块新硬盘作为PV要么在现有硬盘上划分出一个新分区类型为8e Linux LVM并加入VG。5.4 技巧使用ncdu可视化分析磁盘空间占用当你不清楚空间被谁占用时ncduNCurses Disk Usage是一个极佳的命令行工具。它比du更直观。sudo apt install ncdu sudo ncdu /它会扫描目录并以交互式条形图展示占用空间最大的子目录让你快速定位“罪魁祸首”通常是/var/log、/var/cache/apt/archives或用户目录下的.cache、Downloads等。5.5 技巧清理系统缓存与旧内核释放空间在考虑扩容前可以先尝试一些清理操作往往能释放出几个GB的空间。清理APT缓存sudo apt clean # 清理所有已下载的.deb包 sudo apt autoclean # 清理旧版本的.deb包清理旧内核系统更新后会保留旧内核占用/boot分区空间。dpkg --list | grep linux-image # 列出所有内核镜像 sudo apt purge linux-image-5.4.0-xx-generic # 将xx替换为你想删除的旧内核版本号注意务必确保你正在运行一个更新的内核不要删除当前正在使用的内核通过uname -r查看。扩容磁盘空间尤其是对系统分区进行操作确实需要一定的谨慎和知识储备。我的经验是优先考虑最安全、影响最小的方案能加硬盘挂载新目录就不动原有分区能用LVM在线扩就不用传统分区工具离线改。每次操作前花十分钟确认命令、备份数据远比花十小时尝试数据恢复要划算得多。理解每个命令背后的意图而不仅仅是复制粘贴才能让你在遇到不同发行版、不同分区方案时都能从容应对。
返回列表