先说结果:
- 起因是硬盘满了。根分区 40G,面板显示 38.61/41 GB,ext4 还默认给 root 预留了 5%,普通程序能写的空间基本没了。网站停止响应,外网 SSH 也连不上。
- 我把面板里的 Mount ISO 当成了救援模式,挂了一个 Debian 安装盘再开机,结果直接进了安装菜单,比原来更糟。
- 救回来的顺序:在面板卸载 ISO(这一步会自动强制关机)→ Start → 用面板自带的控制台以 root 登录 → 清 apt 缓存和旧日志 → 重启 qemu-guest-agent 和 ssh。之后面板恢复显示,SSH 能连上,数据都在。
从看到安装菜单到进系统清完磁盘,用了十来分钟。
一、现场:SSH 和内存都是 Unavailable
最先发现的是服务器上的服务没了响应,外网 SSH 怎么都连不上。登录 KiwiVM 面板,SSH Port 和 RAM and Swap 两项都显示 Unavailable。点开旁边的 details,面板是这样说的:
In order for KiwiVM to show RAM/Swap information, QEMU-KVM agent must be running inside of the VM, and the OS must be fully booted.
In order for KiwiVM to show SSH port, QEMU-KVM agent must be running inside of the VM.
Additionally, /etc/ssh/sshd_config must be readable and its syntax must be valid.
Please use Root shell – interactive to troubleshoot the sshd daemon.
也就是说,这两项靠系统里的 qemu-guest-agent 回报,系统没完全起来、或者 agent 没在跑,面板就只能显示 Unavailable。面板最后一句已经给了正确入口:Root shell – interactive。
我当时没往那儿走,而是看到了 Mount ISO,以为是救援模式,在列表里选了排在前面的 debian-12.0.0-i386-netinst.iso,挂上之后开机。
再打开 VNC 控制台,屏幕上是 Debian 12 的安装菜单(BIOS mode),底下一行在倒计时:Press a key, otherwise speech synthesis will be started in 11 seconds...

这时候 Main controls 上的几项:
| 项 | 面板显示 |
|---|---|
| Status | Running |
| SSH Port | Unavailable |
| RAM and Swap | Unavailable |
| Disk usage | 38.61/41 GB |
| Operating system | Ubuntu 24.04 x86_64 |
| Mounted ISO | debian-12.0.0-i386-netinst.iso |

两项 Unavailable 还是 Unavailable,但原因已经换了:
- 挂 ISO 之前,是 Ubuntu 卡在硬盘写满上,SSH 和 agent 没正常工作。
- 挂 ISO 之后,跑的是安装盘,Ubuntu 根本没启动,安装盘里也没有 qemu-guest-agent。
- Status 显示 Running 只说明虚拟机开着,不说明 Ubuntu 在跑。
- 面板截图窗口里一直刷 No sound card detected after 21 seconds、22 seconds……这也是安装程序:菜单没人按键,它准备启用语音合成,先找声卡,找不到就每秒报一次。
另外,我选的是 i386(32 位)的盘,系统是 x86_64,就算真要重装也选错了。
安装菜单停在那里不会自己动硬盘。只要不在菜单里选安装、不一路确认下去,数据就还在。
二、卸载 ISO,再开机
在 Main controls 的 Mounted ISO 那一行点 Unmount,会弹出确认框:卸载 ISO 必须先强制关机。

确认后提示 ISO 已卸载,让你现在开机:

这时候直接点 Start 就行。我卸完又在操作栏点了一次 Hard Stop,多余了,卸载那一步已经关过机。
三、从面板控制台登录
开机后我没再试 SSH,直接走面板的控制台:左侧 Root shell – interactive,点 Launch。
能看到 Ubuntu 的开机日志刷过去,说明这次是从硬盘启动的:

在 tty1 用 root 登录:

四、清磁盘
实际跑的就这几条:
apt-get clean
journalctl --vacuum-size=50M
df -h
apt-get clean 没有输出。
journalctl --vacuum-size=50M 删了 15 个旧日志文件,系统日志大多一个 12.4M,用户日志一个七百多 K,合计:
Vacuuming done, freed 140.4M of archived journals from /var/log/journal/…
清完的 df -h:
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 40G 34G 4.2G 89% /
/dev/sda2 974M 96M 811M 11% /boot

40G 减去用掉的 34G、可用的 4.2G,还差 1.8G,就是 ext4 给 root 预留的那 5%。所以面板上 38.61/41 GB 看着还有两个多 G,普通程序其实已经写不进去了。
截图之后我又跑了两条:
find /var/log -type f -name "*.gz" -delete
rm -rf /tmp/*
第一条删掉了所有轮转压缩过的旧日志,以后要翻旧日志就没有了。第二条事后看是多余的:这台 Ubuntu 开机时会自动清空 /tmp(/usr/lib/tmpfiles.d/tmp.conf 里的 D /tmp 规则),后面反正要重启。系统还在跑的时候删 /tmp,正在用临时文件的服务可能出错。
这里有个失误:每一步前后我都没跑 df -h,所以哪一步清了多少,现在算不出来。能确定的只有 journal 的 140.4M。
五、sshd.service not found
清完想重启 SSH,结果报错:
root@…:~# systemctl restart sshd
Failed to restart sshd.service: Unit sshd.service not found.
Ubuntu 上这个服务叫 ssh,不叫 sshd。从 22.10 起默认改成了 ssh.socket 按需启动,ssh.service 平时不 enable,sshd 这个别名也就不存在。
最后跑的两条:
systemctl restart qemu-guest-agent
systemctl restart ssh
刷新面板,RAM and Swap 显示出了内存占用,SSH Port 也显示出了端口号。本地 SSH 连上去,网站和数据都在。
SSH 连不上还有很多别的原因,服务、防火墙、配置文件各查什么,我在《CentOS 7 SSH Connection Refused 完整排查指南》里写过。
六、空间去哪了
截图里清完是 34G,当天后来再看已经是 23G(62%),少了 11G。
这 11G 是我后来手动清出来的:截图之后那两条、几处缓存,还卸掉了一套已经不用的程序和它的全部服务。前面说过每一步都没记 df,所以哪一样占了多少,现在对不上账。
日志不是元凶。这台机器的 journald 之前就限了 200M(/etc/systemd/journald.conf 里 SystemMaxUse=200M),机器上也没装 Docker。
后来又找到两处能省的:
| 东西 | 清之前 | 清之后 | 怎么清的 |
|---|---|---|---|
宝塔面板的监控库 /www/server/panel/data/system.db |
1.6G | 121M | 主要是 process_top_list 表,存了 39.6 万行进程记录。删掉 20 天以前的,再压缩数据库,完整性检查通过 |
多余的交换文件 /www/swap2 |
1G | 删除 | 机器上有三个交换文件,一共 4G。先 swapoff,从 /etc/fstab 去掉那一行,再删文件,剩 /swap 1G 和 /www/swap 2G |
清监控库之前我先把它备份了一份,确认面板正常后再删备份。前后根分区从 23G 降到 21G,现在 55%,剩 17G。
用宝塔的话,隔一段时间看一眼 system.db 有多大。它一直在记,不会自己变小。
下次再遇到,先跑这条,看根目录下哪个文件夹最大:
du -xh --max-depth=1 / 2>/dev/null | sort -hr | head -15
-x 只统计根分区本身,不会去数 /proc 这类虚拟目录。
记下来的三件事
- 面板显示 Unavailable,先点 details 看它要什么,再开 VNC 看一眼屏幕。Mount ISO 不是救援模式。
- 卸载 ISO 自带强制关机,卸完直接 Start。
- 清理之前先
df -h记一下,不然清完不知道哪一步有用。
© 2026 本文由 Charlie 原创撰写,发布于 sodebug.com。未经授权禁止转载、洗稿、机器抓取。AI 训练数据使用需获得书面授权。