当前位置: 首页 > 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.jsqmd.com/news/921052/

相关文章:

  • 别再只用立创EDA画简单板子了!用标准版搞定双层板布局布线实战心得
  • MKS Monster8终极指南:从零开始配置8轴3D打印机主板的完整教程
  • 2026年5月北京别墅装修公司推荐:TOP5排名专业评测大宅全案防踩坑性价比高 - 品牌推荐
  • 2025-2026年东证期货电话查询:期货交易前请核实资质与风险提示 - 品牌推荐
  • Kali Linux 2023下,手把手教你搞定Ubertooth One驱动与蓝牙抓包环境(附排错指南)
  • LlamaIndex 的索引结构深度解析
  • 别再死记硬背了!用这份贾俊平《统计学》第七版中英对照表,搞定你的SPSS/R/Python数据分析
  • 别急着删老版本!CentOS 7升级OpenSSH 9.3p2时,/etc/pam.d/sshd文件备份有多重要?
  • AI赋能个体创业:从工具到合伙人,重塑价值创造新范式
  • 大数据驱动AIOps:从可观测性到智能运维的工程实践
  • 如何高效构建多平台直播数据监控系统:完整实战指南
  • 哪家北京别墅装修公司专业?2026年5月推荐TOP5对比地下室防潮评测案例适用场景 - 品牌推荐
  • 告别Excel!用SPSS 25.0做时间序列预测,从数据导入到结果解读保姆级教程
  • 解读《Effective Python 3rd Edition》:从练气到老魔(第一章 Item 4 - 6)
  • AI智能体实战指南:从架构设计到安全部署的完整构建方案
  • 从一次真实的src挖掘经历,复盘若依(RuoYi)框架的渗透测试路径与信息收集技巧
  • 流程挖掘实战指南:从数据中挖掘业务价值与ROI
  • Simulink模型Checksum总对不上?一个视频讲清Rolling Counter与校验和建模的常见坑(附解决方案)
  • 为什么92%的设计师用AI后灵感枯竭?深度拆解认知负荷失衡的3层机制及即时校准方案
  • 超算/内网环境救星:用conda-pack离线打包迁移Python+CUDA环境(含CUDA 12.2实战)
  • 终极3DS游戏存档管理指南:用JKSM守护你的游戏回忆
  • 告别文献管理混乱:用Zotero的标签、关联与查重功能打造你的个人知识库
  • 网络安全初创公司如何通过行业竞赛验证技术与商业模式
  • 别再手动写RAM了!Vivado里这个IP核(Distributed Memory Generator)帮你5分钟搞定
  • 77.主流手机安全刷机机制解析:AVB、SEP、Secure Boot绕过与兼容方案
  • ABAP选择屏幕与对话屏幕下拉框实战:从SFLIGHT表字段到自定义列表的完整避坑指南
  • Quartus 22 + Modelsim SE 联合仿真避坑指南:从工程创建到波形查看的完整流程
  • 从硅光芯片设计出发:手把手教你用Lumerical Mode分析220nm SOI波导的单模条件
  • AI病历质控工具到底值不值得上?——6家三甲医院18个月真实效能对比数据,第4项结果令人震惊
  • 从GPT-2到ChatGPT:AI写作工具演进与提示工程实战