Ubuntu虚拟机磁盘满了无法启动的解决办法

一、问题描述

打开Ubuntu 系统,发现不能正常启动,提示 “started user manager for UID xxx”。

二、解决办法

开机,按 shift 进入 系统。
在这里插入图片描述
选择第二个,高级选项。

在这里插入图片描述
选择 recovery mode
在这里插入图片描述
选择 root,按照提示输入密码即可。

在这里插入图片描述

查看磁盘情况

df -h

在这里插入图片描述

三、查找和清理磁盘空间的指令

1. sudo find / -type f -size +50M

这是一个查找命令,本身不会删除任何文件。它是清理工作的“侦察兵”。

  • find: 强大的文件查找命令。
  • /: 从根目录开始搜索。
  • -type f: 只查找类型为“文件”(file)的项目,排除目录。
  • -size +50M: 查找大小大于50MB(MegaBytes)的文件。+ 表示“大于”,也可以用 -size +1G 来查找大于1GB的文件。

作用:在整个文件系统中搜索并列出所有大于50MB的文件。
风险无(只读操作)。它只显示结果,不会对文件做任何修改。
适用场景:当不知道是哪些大文件占满了磁盘时,用这个命令来定位“元凶”。它的输出会显示文件的完整路径和大小,决定下一步要清理、压缩或移动哪个文件。

2. du -sh /* | sort -nr | head -n 10

用于快速找出根目录下占用空间最大的前10个一级目录

2.1. du -sh /*
  • du: Disk Usage,用于估算文件和目录磁盘使用空间的命令。
  • -s: Summarize(汇总)。只显示每个指定参数的总计大小,而不显示其子目录的详细信息。这是关键选项,没有它,du 会递归列出所有子目录的大小,输出会非常冗长。
  • -h: Human-readable(人类可读)。以易读的格式(如K、M、G)显示大小,而不是默认的字节数。
  • /*: 通配符,表示根目录(/)下的所有直接子项(文件和目录)。它包括了 /home, /var, /usr, /tmp 等。
    • 注意:这里的 * 是shell展开的,意味着 du 命令实际接收到的参数是 /bin/boot/dev/etc … 等等所有在根目录下可见的条目。

这部分的作用:计算并汇总显示根目录下每一个直接子文件或子目录所占用的总磁盘空间。

输出

12G     /home
6.5G    /usr
3.2G    /var
800M    /lib
200M    /boot
...
2.2. | (管道符)
  • 这是Linux中最强大的概念之一。它将前一个命令(du)的标准输出(stdout)作为标准输入(stdin)传递给后一个命令(sort)。
2.3. sort -nr
  • sort: 对文本行进行排序的命令。
  • -n: Numeric-sort(数值排序)。按照字符串的数值大小进行排序,而不是按字母顺序。例如,这样 10 会排在 2 后面,而不是按字符‘1’和‘2’来排。
  • -r: Reverse(反向)。将结果倒序排列,即从大到小。

这部分的作用:接收 du 命令的输出,并依据第一列的尺寸数值进行从大到小(降序)的排序。

2.4. head -n 10
  • head: 输出文件或输入流的前几行。
  • -n 10: 指定显示前10行。

这部分的作用:从已经排好序(从大到小)的列表中,仅取出最前面的10行,也就是占用空间最大的10个项目。

整体作用与输出示例

将所有这些部分组合起来,这个命令管道的工作流程是:

  1. 测量:计算根目录下每个一级子目录的大小(du -sh /*)。
  2. 排序:将这些结果按占用空间从大到小排序(sort -nr)。
  3. 筛选:只显示最大的10个(head -n 10)。

最终输出看起来会像这样

24G    /home
15G    /var
11G    /usr
3.5G    /snap
1.2G    /opt
980M   /lib
550M   /boot
120M   /etc
25M    /root
6.5M   /run

从这个结果中,可以一目了然地看出是 /home(用户数据)和 /var(系统日志、缓存等)占用了绝大部分空间,这为下一步的清理工作指明了方向。

重要提示和变体

需要 sudo 权限
* 有些系统目录(如 /root, /proc, /sys)普通用户没有读取权限。如果直接运行上述命令,这些目录后会显示“权限被拒绝”,并且其大小会显示为0,这会导致结果不准确。
* 正确做法:在命令前加上 sudo,以root权限运行,以确保能准确统计所有目录。
bash sudo du -sh /* | sort -nr | head -n 10

查看隐藏目录
* 根目录下有些以点(.)开头的隐藏目录(如 /.cache, /.snapshots),上面的命令不会统计它们,因为 /* 默认不匹配隐藏文件。
* 如果需要查看,可以显式指定:
bash sudo du -sh /.* | sort -nr | head -n 10
注意:这会同时匹配 .(当前目录,即根目录本身)和 ..(上级目录),通常可以忽略它们。

深入挖掘
假设发现 /var 非常大,可以用同样的命令进一步深入调查 /var 的子目录:
bash sudo du -sh /var/* | sort -nr | head -n 10
这可能会显示是 /var/log(日志)还是 /var/lib(数据库文件)占用了大量空间。

3. sudo rm -rf /tmp/*

这是一个强力删除命令,用于清空临时文件目录。

  • sudo: 获取超级用户权限,因为 /tmp/ 目录下的某些文件可能属于root用户。
  • rm: 删除文件或目录的命令(remove)。
  • -r: 递归(recursive)删除。如果遇到目录,会删除该目录及其内部所有内容。
  • -f: 强制(force)删除。忽略不存在的文件,不显示任何确认提示。这是一个危险标志,因为删除后就没了。
  • /tmp/*: 目标路径。/tmp/ 是系统的临时文件夹,许多程序和系统进程都会在这里存放临时文件。* 通配符表示“该目录下的所有文件和文件夹”。

作用:强制递归删除 /tmp 目录下的所有内容。
风险。虽然 /tmp 设计就是可以清理的,但如果错误地执行了 sudo rm -rf / tmp/*(在 / 后面多了一个空格),它会删除根目录下的所有文件,导致系统彻底毁灭。输入此命令时务必再三检查空格!
适用场景:系统临时目录过大,需要立即释放空间时。重启后,系统通常也会自动清理 /tmp

4. sudo apt-get clean

用于清理软件包管理工具(APT)下载的缓存文件。

  • apt-get: Debian/Ubuntu系列的包管理工具。
  • clean: 清理命令。

作用:删除 /var/cache/apt/archives//var/cache/apt/archives/partial/ 目录下所有已下载的 .deb 软件包文件。这些文件在使用 sudo apt-get installsudo apt install 安装软件后就已经没用了。
风险。非常安全。唯一的影响是,如果以后要重新安装某个软件,需要重新下载这些包,但这通常不是问题。
适用场景:这是最安全、最有效的清理手段之一。/var/cache/apt/archives/ 目录很容易积累几个GB的缓存,定期清理可以释放大量空间。

5. sudo apt-get autoclean

clean 命令的一个更保守的版本。

  • autoclean: 自动清理。

作用:删除那些无法再从软件源下载到的或者已经有新版本替代的旧版 .deb 软件包缓存。它会保留当前已安装软件版本的缓存。
风险极低。比 clean 更保守、更智能。
适用场景:如果想保留一些当前软件的安装包以备快速重装,但又想清理掉一些肯定用不到的旧包,可以使用这个命令。它释放的空间通常比 clean 少。

clean vs autoclean:

  • clean: 大扫除,把所有安装包缓存都扔了。
  • autoclean: 智能清理,只扔掉的废品和垃圾。

6. sudo journalctl --vacuum-time=1d

用于清理系统日志(由 systemd-journald 服务管理)。

  • journalctl: 查询和显示系统日志的工具。
  • --vacuum-time: “抽真空”选项,按时间清理。
  • 1d: 时间单位,这里是“1天”。

作用:删除所有超过指定时间的系统日志文件。--vacuum-time=1d 会保留最近1天的日志,删除1天前的所有日志。
变体

  • sudo journalctl --vacuum-size=500M: 限制日志目录的总大小不超过500MB,会删除最旧的日志直到满足条件。
    风险中低。清理日志是正常的系统维护,但如果需要根据旧日志来排查历史问题,清理后这些信息就丢失了。
    适用场景:系统日志文件(通常在 /var/log/journal/)体积庞大,占用了过多磁盘空间。这是解决“/var/log 磁盘空间不足”问题的关键命令。

如何使用其结果进行清理
找到大文件后,需要手动决定如何处理它们。

# 1. 先查找
sudo find / -type f -size +100M

# 2. 查看列表,判断哪个文件可以删除
# 例如,发现一个巨大的错误日志: /var/log/some_app.log
# 3. 然后使用 rm 命令谨慎删除(或者用 `> /var/log/some_app.log` 清空它)
sudo rm /var/log/some_app.log
# 或者清空而不删除文件(对于正在被程序使用的日志文件很安全)
sudo sh -c '> /var/log/some_app.log'

警告:永远不要盲目删除 find 命令找到的文件,尤其是系统文件。一定要先确认文件的性质。

安全提示

命令作用风险建议
sudo rm -rf /path/to/dir强制删除目录极高极端谨慎! 绝对不要对系统核心目录使用。
sudo apt-get clean清理所有软件包缓存定期执行,非常安全。
sudo apt-get autoclean清理过时的软件包缓存极低可以更频繁地执行。
sudo journalctl --vacuum-*清理系统日志中低按需执行,建议保留至少1-2周的日志。
sudo find / -size +50M查找大文件无(只读)清理前的必备诊断步骤。

黄金法则:在执行任何 rm -rf 命令之前,尤其是带有 sudo 的,请double-check(双重检查)输入的路径。一个多余的空格就可能造成灾难性后果。

输入reboot,重启,可正常进入系统

在这里插入图片描述

### Ubuntu虚拟机启动时initramfs报错解决方案 当遇到Ubuntu虚拟机启动时`initramfs`报错的情况,通常是因为文件系统配置不正确或者引导加载程序未能找到根分区所致。以下是针对该问题的具体分析和解决办法: #### 更新Initramfs 可以尝试通过更新`initramfs`来解决问题。执行以下命令以重新生成初始化内存文件系统: ```bash sudo update-initramfs -u ``` 此操作会刷新当前内核的`initramfs`缓存并修复可能存在的错误[^1]。 #### 检查UUID一致性 如果问题是由于磁盘UUID变化引起的,则需要确认实际挂载点与`/etc/fstab`中定义的内容一致。可以通过以下方式检查和修正: 1. 使用`blkid`工具获取最新磁盘设备的UUID。 ```bash sudo blkid ``` 2. 编辑`/etc/fstab`文件,确保其中指定的UUID匹配实际硬盘情况。 ```bash sudo nano /etc/fstab ``` 3. 如果发现UUID不符,请手动修改成正确的值,并保存退出编辑器。 另外,在某些情况下(如ESXi环境下的虚拟机),可能会因为存储路径变更而导致类似错误。此时可参照SSH登录至宿主机调整数据卷链接位置的方法处理[^3]。 #### 黑名单冲突模块 有时特定硬件驱动或内核模块可能导致兼容性问题从而引发此类异常行为。例如,对于部分主板芯片组而言禁用其I²C支持有助于规避潜在干扰源。具体做法如下所示: ```bash echo "blacklist i2c_piix4" | sudo tee -a /etc/modprobe.d/blacklist.conf ``` 完成上述更改后记得再次运行一次`update-initramfs`指令使改动生效[^5]。 #### 验证显卡驱动状态 考虑到图形界面依赖于正常工作的显示适配器组件,因此也应留意是否存在因安装不当而影响系统的独立GPU软件包实例。按照官方文档指引逐步排查直至最终定位确切原因所在[^2][^4]: - 查询可用选项列表; - 安装对应版本号的目标库件集; - 测试新设置效果如何反映出来; 综上所述,以上措施涵盖了从基础层面到高级定制的不同角度应对策略,希望能帮助您有效缓解乃至彻底消除所遭遇的技术难题!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值