当前位置: 首页 > news >正文

手把手教你给Ubuntu虚拟机“增肥”:从开机卡住到流畅运行的完整磁盘扩容指南

手把手教你给Ubuntu虚拟机“增肥”:从开机卡住到流畅运行的完整磁盘扩容指南

当你发现Ubuntu虚拟机开机时卡在systemd-update-utmp-runlevel.service阶段,或是频繁遇到failed to start gdm.service这类错误,很可能是因为磁盘空间不足导致的系统服务启动失败。本文将带你从诊断到解决,一步步完成虚拟机磁盘扩容的全过程。

1. 诊断磁盘空间问题

在开始扩容之前,我们需要确认问题的根源确实是磁盘空间不足。以下是几种常见的诊断方法:

  • 通过命令行查看磁盘使用情况

    df -h

    这个命令会显示各挂载点的磁盘使用情况。重点关注/根目录的使用率,如果接近100%,就需要考虑扩容。

  • 检查系统日志

    sudo journalctl -xe

    这条命令会显示系统日志,如果看到大量关于"no space left on device"的错误信息,就是磁盘空间不足的确凿证据。

  • 查看内存使用情况

    free -h

    有时候磁盘空间不足会导致swap分区无法正常工作,进而影响系统性能。

提示:在虚拟机环境中,磁盘空间不足的表现可能多种多样,从简单的服务启动失败到系统完全无法启动都有可能。

2. 虚拟机磁盘扩容基础准备

在开始实际操作前,我们需要了解一些基本概念和准备工作:

2.1 理解虚拟机磁盘类型

不同的虚拟化平台使用不同的磁盘格式:

虚拟化平台常见磁盘格式特点
VMware.vmdk支持动态扩展和固定大小
VirtualBox.vdi支持动态分配和固定大小
KVM.qcow2支持快照和动态扩展

2.2 关闭虚拟机前的检查

在进行磁盘扩容前,建议先完成以下检查:

  1. 确认虚拟机快照:如果有重要数据,建议先创建快照
  2. 备份关键数据:虽然扩容操作一般不会影响数据,但预防万一
  3. 记录当前分区信息:
    lsblk fdisk -l
  4. 确认文件系统类型:
    df -hT

3. 虚拟机磁盘扩容实战

现在我们来一步步完成磁盘扩容的实际操作。这里以KVM虚拟机为例,其他虚拟化平台的操作类似。

3.1 扩展虚拟磁盘

首先需要在虚拟化管理界面中扩展磁盘容量:

  1. 关闭虚拟机
  2. 在virt-manager中编辑虚拟机设置
  3. 找到磁盘设备,增加容量(例如从20G增加到40G)
  4. 启动虚拟机

3.2 识别新增的磁盘空间

启动后,我们需要让系统识别新增的空间:

echo 1 > /sys/class/block/sda/device/rescan

然后验证是否识别到新增空间:

fdisk -l /dev/sda

3.3 创建新分区

接下来创建一个新分区来使用新增的空间:

fdisk /dev/sda

在fdisk交互界面中:

  1. 输入n创建新分区
  2. 选择p创建主分区
  3. 使用默认分区号(通常是4)
  4. 使用默认的起始和结束扇区
  5. 输入t更改分区类型
  6. 选择刚创建的分区号
  7. 输入8e设置为Linux LVM类型
  8. 输入w保存并退出

3.4 创建物理卷和扩展逻辑卷

对于使用LVM的系统,我们需要将新分区加入卷组:

pvcreate /dev/sda4 vgextend ubuntu-vg /dev/sda4

然后扩展逻辑卷:

lvextend -l +100%FREE /dev/ubuntu-vg/root

3.5 调整文件系统大小

最后一步是调整文件系统以使用新增的空间。根据你的文件系统类型选择相应命令:

  • 对于ext2/ext3/ext4文件系统:

    resize2fs /dev/ubuntu-vg/root
  • 对于XFS文件系统:

    xfs_growfs /

注意:使用错误的文件系统调整命令(如对ext4使用xfs_growfs)会导致错误。务必先用df -hT确认文件系统类型。

4. 验证与优化

扩容完成后,我们需要验证操作是否成功,并进行一些优化设置。

4.1 验证扩容结果

使用以下命令验证扩容是否成功:

df -h lsblk

你应该能看到根分区的可用空间明显增加了。

4.2 常见问题排查

如果在扩容过程中遇到问题,可以尝试以下排查步骤:

  1. 分区未识别

    partprobe /dev/sda
  2. LVM未识别新物理卷

    pvscan vgscan lvscan
  3. 文件系统调整失败

    • 尝试先卸载再挂载分区
    • 检查文件系统错误:
      fsck /dev/ubuntu-vg/root

4.3 预防性维护建议

为了避免再次遇到磁盘空间不足的问题,建议:

  • 设置磁盘使用监控:

    # 添加到crontab中每天运行 df -h | mail -s "Disk Usage Report" admin@example.com
  • 定期清理不需要的文件:

    # 清理旧的内核镜像 sudo apt autoremove --purge # 清理日志文件 sudo journalctl --vacuum-size=100M
  • 考虑使用自动化工具如logrotate管理日志文件

5. 高级技巧与替代方案

对于有更复杂需求的用户,这里提供一些高级技巧和替代方案。

5.1 使用GParted图形工具

对于不习惯命令行的用户,可以使用GParted图形工具:

  1. 安装GParted:

    sudo apt install gparted
  2. 启动GParted:

    sudo gparted
  3. 在图形界面中调整分区大小

5.2 使用LVM精简配置

对于经常需要调整磁盘空间的用户,可以考虑使用LVM的精简配置(thin provisioning):

# 创建精简池 lvcreate -L 10G --thinpool thin_pool ubuntu-vg # 创建精简卷 lvcreate -V 20G --thin -n thin_vol ubuntu-vg/thin_pool

5.3 云环境中的磁盘扩容

如果你使用的是云平台上的Ubuntu实例,扩容步骤略有不同:

  1. 在云控制台扩展磁盘

  2. 在实例中扩展分区:

    sudo growpart /dev/vda 1
  3. 调整文件系统:

    sudo resize2fs /dev/vda1

5.4 自动化扩容脚本

对于需要频繁扩容的环境,可以创建自动化脚本:

#!/bin/bash # 自动扩展根分区脚本 # 重新扫描磁盘 echo 1 > /sys/class/block/sda/device/rescan # 创建新分区 ( echo n echo p echo echo echo echo t echo echo 8e echo w ) | fdisk /dev/sda # 等待分区创建 sleep 5 # 扩展LVM pvcreate /dev/sda4 vgextend ubuntu-vg /dev/sda4 lvextend -l +100%FREE /dev/ubuntu-vg/root resize2fs /dev/ubuntu-vg/root
http://www.zskr.cn/news/1437846.html

相关文章:

  • 动手实践:如何用现代仿真软件(如Multisim)搭建一个简易的PDM中波发射机原理模型
  • SCREME框架:低成本高可靠内存ECC技术解析
  • 告别状态机!在STM32单片机上用Protothread协程库实现异步LED闪烁(附完整代码)
  • 用 Agent 构建个人知识管理系统的完整方案
  • 2026火锅店划算底料供应商实测:火锅底料怎么选商用/火锅底料批发/火锅店专用底料/三家厂商核心维度对比 - 优质品牌商家
  • 用Unity Toggle做个游戏设置菜单:手把手实现音效开关、画质选项与导航逻辑
  • 保姆级教程:装完Ubuntu20.04没WiFi?手把手教你搞定驱动和内核更新
  • 别再死记硬背命令了!用CentOS 7.9实战GlusterFS三种卷(分布式/复制/分布式复制)的选型与性能对比
  • 2026西安学校灭蟑螂公司选择全流程技术推荐 - 优质品牌商家
  • 别再只调sklearn的KMeans了!用NumPy从零实现,搞懂质心更新和Inertia计算
  • 告别抖动!用Unity Cinemachine插件5分钟搞定2D游戏摄像机平滑跟随(附参数详解)
  • Selenium自动化测试环境搭建避坑指南:Win10/11系统下配置Edge驱动与Python
  • 从游戏手柄到VR头盔:聊聊陀螺仪数据‘积分’与‘姿态’那些坑,以及Unity/Unreal中的正确用法
  • 告别跑断腿!用UltraVNC MSI包+域组策略,半小时搞定全公司远程协助部署
  • 保姆级教程:用迅为RK3568开发板从零烧写实时系统固件(附常见问题排查)
  • 避坑指南:用WebViewForWindow在Unity播WebRTC,绿屏和硬件加速怎么关?
  • 2026年6月湖北武汉工伤维权律所怎么选?这份专业指南助你避坑 - 2026年企业资讯
  • 从RISC-V的ecall指令到用户态printf:一次完整的xv6系统调用“扩胸运动”
  • 从网格划分到端口设置:一份给ADS新手的Momentum RF仿真避坑指南(含Via阵列、电感Q值处理)
  • 基于C++实现(控制台)文件压缩
  • 不只是环境搭建:用OSG+OSGEARTH 3.1+VS2022快速验证你的三维地理可视化开发环境
  • 肺结节CT影像YOLOv5-ready数据集:220+训练图+28测试图+一键可视化脚本
  • 韩文长文本理解失效?Gemini 2.0韩语支持断层分析,3类政务/法律文档误译率高达41.6%,附绕过方案
  • 丙午年四月十五那时月
  • 2026年q2西宁管道疏通核心技术与主流企业解析:西宁工地泥浆池清淤/西宁市政管道清淤/优选推荐 - 优质品牌商家
  • [特殊字符]AI会取代程序员吗?两位一线工程师给出了这样的答案 ——国内首本TRAE实战书籍发布:普通人也能用AI写代码了[特殊字符] - 掘金
  • 别再只写断言了!Apifox后置脚本的5个隐藏用法,让你的接口测试效率翻倍
  • 手把手教你用HybridCLR(原Huatuo)实现Unity全平台C#热更新,告别Lua和ILRuntime
  • 空寂静中相
  • Unity独立游戏开发者的效率神器:不用写一行代码,用Cinemachine搞定镜头语言