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

手把手教你给Ubuntu虚拟机‘瘦身’与‘增肥’:解决因磁盘满导致的开机卡死

手把手教你给Ubuntu虚拟机‘瘦身’与‘增肥’:解决因磁盘满导致的开机卡死

当Ubuntu虚拟机突然卡在开机界面,屏幕上显示systemd-update-utmp-runlevel.service完成却无法继续启动时,这往往是磁盘空间耗尽发出的最后警告。本文将带你从运维视角建立完整的空间管理策略——既教你用ncdu等工具定期"瘦身"清理空间,也详解当灾难发生时如何安全"增肥"扩容。不同于简单扩容教程,我们会对比分析清理与扩容的决策依据,并给出可监控的预防方案。

1. 预防优于治疗:建立磁盘空间监控体系

1.1 空间占用可视化分析

定期运行磁盘分析是避免突发状况的关键。除了基础的df -h,这些工具能提供更直观的视角:

# 安装可视化分析工具 sudo apt install ncdu # 扫描根目录占用情况(耗时与数据量成正比) sudo ncdu / --exclude /mnt --exclude /media

执行后会生成交互式界面,用箭头键可导航查看各目录大小分布。特别需要关注的目录包括:

目录典型占用源清理建议
/var/log系统日志配置logrotate或手动清理旧日志
/var/cache软件包缓存使用apt clean清理
/home用户下载文件查找大文件find -size +100M

1.2 自动化监控与预警

通过systemd服务实现空间监控自动化:

# 创建监控脚本 /usr/local/bin/disk-alert.sh #!/bin/bash THRESHOLD=90 CURRENT=$(df / --output=pcent | tail -1 | tr -d '% ') [ $CURRENT -ge $THRESHOLD ] && \ echo "Warning: Root partition at ${CURRENT}%" | \ mail -s "Disk Space Alert" admin@example.com

赋予执行权限并创建定时任务:

sudo chmod +x /usr/local/bin/disk-alert.sh sudo systemctl edit --force --full disk-alert.timer # 在编辑器中输入以下内容 [Unit] Description=Disk space check timer [Timer] OnCalendar=*-*-* 8,20:00:00 Persistent=true [Install] WantedBy=timers.target

2. 应急处理:当系统已经卡死在启动界面

2.1 进入恢复模式

  1. 在虚拟机启动时长按Shift键进入GRUB菜单
  2. 选择"Advanced options for Ubuntu"
  3. 选择带有"(recovery mode)"的内核版本
  4. 在恢复菜单中选择"root"进入命令行

2.2 诊断空间问题

在恢复环境中依次执行:

# 检查根分区使用率 df -h / # 查找大文件(按大小降序) find / -type f -exec du -h {} + 2>/dev/null | sort -rh | head -20 # 分析日志错误(重点看最近1小时) journalctl --since "1 hour ago" -p err

2.3 紧急清理策略

根据诊断结果选择清理方案:

临时文件清理套餐

# 清空临时目录 rm -rf /tmp/* # 清理旧内核(保留最近2个) sudo apt purge $(dpkg -l linux-{image,headers}-* | awk '/^ii/{print $2}' | grep -vE "$(uname -r | sed 's/-generic//')|$(uname -r | sed 's/-generic//' | cut -d- -f1-2)" | head -n -2)

日志文件处理

# 立即轮转并压缩日志 sudo logrotate --force /etc/logrotate.conf # 清空特定服务日志(如nginx) echo "" > /var/log/nginx/access.log

3. 扩容操作:永久解决空间不足问题

3.1 虚拟机磁盘扩展准备

  1. 在虚拟机管理界面将磁盘扩容(如从20G扩展到40G)
  2. 启动进入Live CD环境(推荐使用Ubuntu安装ISO)
  3. 使用gparted图形工具或命令行工具扩容分区

重要提示:操作前务必创建虚拟机快照,扩容有数据丢失风险

3.2 LVM扩容详细流程

对于采用LVM的Ubuntu系统,扩容步骤如下:

# 查看物理卷状态 sudo pvdisplay # 扩展物理卷(假设新增空间在/dev/sda3) sudo pvresize /dev/sda3 # 查看卷组信息 sudo vgdisplay # 扩展逻辑卷(增加10G空间) sudo lvextend -L +10G /dev/ubuntu-vg/root # 调整文件系统(ext4示例) sudo resize2fs /dev/ubuntu-vg/root

3.3 非LVM系统扩容方案

对于传统分区系统,需要创建新分区并挂载:

# 创建新分区 sudo fdisk /dev/sda # 在交互界面按n创建新分区,按w保存 # 格式化新分区 sudo mkfs.ext4 /dev/sda4 # 创建挂载点并迁移数据 sudo mkdir /newspace sudo mount /dev/sda4 /newspace sudo cp -ax /data/* /newspace/ sudo umount /newspace # 修改/etc/fstab实现开机自动挂载 echo "/dev/sda4 /data ext4 defaults 0 2" | sudo tee -a /etc/fstab

4. 深度优化:从根源减少空间占用

4.1 系统服务空间占用分析

使用systemd-analyze检查启动服务:

# 列出所有服务磁盘使用 sudo systemd-analyze disk-usage # 按内存排序显示服务 sudo systemd-analyze blame --no-pager | head -10

典型可优化服务示例:

服务名称功能描述优化建议
apt-daily-upgrade.service自动更新检查改为手动更新或延长检查间隔
fwupd.service固件更新服务禁用除非需要硬件固件更新
ModemManager.service移动宽带支持虚拟机环境可安全禁用

4.2 日志系统精细化管理

编辑/etc/systemd/journald.conf进行优化:

[Journal] # 限制日志大小不超过100M SystemMaxUse=100M # 不保存运行时日志到磁盘 RuntimeMaxUse=50M # 最大保存7天日志 MaxRetentionSec=7day

应用配置后重启服务:

sudo systemctl restart systemd-journald

4.3 容器与开发环境优化

对于运行Docker的环境:

# 清理无用容器和镜像 docker system prune -af # 限制日志文件大小(在/etc/docker/daemon.json配置) { "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } }

对于Python开发环境:

# 清理pip缓存 rm -rf ~/.cache/pip # 检查虚拟环境占用 du -sh ~/.virtualenvs/*
http://www.gsyq.cn/news/1432375.html

相关文章:

  • 2026年5月北京别墅装修公司推荐:TOP5排名专业评测大宅全案防踩坑性价比高 - 品牌推荐
  • 2025-2026年东证期货电话查询:期货交易前请核实资质与风险提示 - 品牌推荐
  • Kali Linux 2023下,手把手教你搞定Ubertooth One驱动与蓝牙抓包环境(附排错指南)
  • AI赋能个体创业:从工具到合伙人,重塑价值创造新范式
  • 大数据驱动AIOps:从可观测性到智能运维的工程实践
  • 如何高效构建多平台直播数据监控系统:完整实战指南
  • 从一次真实的src挖掘经历,复盘若依(RuoYi)框架的渗透测试路径与信息收集技巧
  • 别再手动写RAM了!Vivado里这个IP核(Distributed Memory Generator)帮你5分钟搞定
  • ABAP选择屏幕与对话屏幕下拉框实战:从SFLIGHT表字段到自定义列表的完整避坑指南
  • ESP32老项目迁移指南:如何在VSCode里快速适配别人的代码(修改IDF_PATH避坑)
  • 华为云Stack实战:从机房工勘到机柜上架,一份给现场工程师的LLD避坑清单
  • 告别打包噩梦:Unity Universal Media Player 2.0.3 跨设备部署RTSP流的完整配置手册
  • GRBL数控系统实现低成本旋转加工的软件方案
  • 78.告别手动刷机!手写ADB/Fastboot自动化框架,适配全系安卓+iOS设备
  • CEO欺诈深度解析:社会工程学攻击的防御与个人防护实战指南
  • AI智能体如何玩转网络梗文化并实现商业变现
  • 别再只用Shader Graph做水面了!用URP的Scene Color节点,5分钟搞定水下折射效果(附完整子图拆解)
  • 别再死记硬背了!用这套保姆级复习流程,搞定XJTUSE项目管理期末考试(附避坑指南)
  • 告别PuTTY和Xshell!这个免费全能终端MobaXterm,才是运维的‘瑞士军刀’
  • 云边端协同与智能算法:如何用代码重塑城市停车体验
  • AI钓鱼攻击:生成式AI如何重塑网络安全威胁与防御策略
  • 80.EDL/Fastboot/Recovery/DFU模式深度剖析,读懂安卓iOS刷机核心机制
  • 构建PB级向量数据库:架构设计与工程实践全解析
  • 81.Fastboot/EDL协议底层详解,读懂GPT分区与payload固件加密逻辑
  • T89C51CC01内部EEPROM操作与编程详解
  • 别再傻傻分不清了!一文搞懂Unity编辑器扩展的四种绘制方式(EditorWindow/Editor/PropertyDrawer)
  • 告别硬编码!用ABAP函数VRM_SET_VALUES动态生成下拉列表(附完整代码)
  • Ubuntu 20.04上搞定Pylith 4.0.0和ParaView 5.12.0:一个地球物理学研究生的完整配置手记(含HDF5冲突终极解法)
  • ARM Compiler 6.00 update 1版本解析与使用指南
  • 动态现金对冲策略:算法驱动的风险管理与资产配置实践