云服务器“减负”实战:一键重装成纯净 Debian 12(含善后加固清单)
一、刚开机就吃满内存,问题出在哪
买一台 1 核 1G 的轻量云服务器,装完系统什么都没跑,free -h 一看内存已经用掉一半以上,这种情况在阿里云、腾讯云、华为云的默认镜像上很常见。
原因通常不是系统本身,而是镜像里预装的厂商组件。以阿里云为例,系统里常驻着 AliYunDun、AliYunDunMonitor、aliyun-service 等安全与监控进程(早期叫安骑士,现在是云安全中心客户端)。这类进程有两个特点:
- 常驻且占用不低,小内存机器上尤其明显;
- 带自保护,直接
kill或systemctl stop往往会被重新拉起,甚至触发告警。
除此之外,厂商定制镜像还会额外占用系统盘空间,并预置一些你用不到的服务与端口。想彻底清干净,靠删进程是治标不治本的。
真正干净的做法只有一个:把系统盘整个抹掉,装一份官方原版系统。
二、三条路线,怎么选
| 方案 | 做法 | 优点 | 代价 |
|---|---|---|---|
| 手动清理 | 停服务、删文件、改自启动 | 不用重装 | 清不干净,系统更新后可能回归,操作风险高 |
| 挂 ISO 安装 | 通过 IPMI/VNC 挂载官方镜像 | 最正统 | 多数云厂商不提供 ISO 挂载,独服才有 |
| 网络重装 | 脚本把安装内核写入硬盘,重启后联网安装 | 不需要 VNC、几分钟完成、可注入密钥 | 会清空整块数据盘 |
对绝大多数 KVM 架构的云服务器来说,第三条是性价比最高的选择。
三、动手前的四个前提
- 确认是 KVM 虚拟化:OpenVZ、LXC 这类共享内核的架构装不了,脚本也不支持。可以用
systemd-detect-virt看当前类型,返回kvm才可行。 - 备份数据:重装会清空整块硬盘(包括其他分区),没有回收站。
- 放行安全组端口:安装期间用 22 端口 SSH,部分场景还要用到脚本给出的临时 Web 端口,云控制台的安全组要放行。
- 能进控制台:万一装完网络没起来,只能靠商家后台的 VNC 或串口控制台救场。
另外看一眼配置:Debian 12 最低要求约 256MB 内存 + 1~1.5GB 硬盘,一般的小鸡都满足。
四、为什么选 bin456789/reinstall
一键重装脚本有不少,比较知名的有萌咖 InstallNET、leitbogioro/Tools、秋水逸冰版,以及这几年更新最勤的 bin456789/reinstall。它几个比较实在的点:
- 不打包自制镜像,所有文件实时从官方源获取,装出来的就是原版系统;
- 引导兼容性好,同时支持 BIOS 与 EFI,也支持 ARM 服务器;
- 网络识别聪明,能处理
/32、/128、网关不在子网内、纯 IPv6、双网卡等特殊情况; - 支持直接注入 SSH 公钥,装完就是密钥登录,不用先设弱密码;
- 对低配机器友好,比官方 netboot 需要的内存更少;
- 国内机器可以用它提供的国内下载地址,避开 GitHub 直连。
它还有一个很实用的能力:装的过程中可以通过 SSH、HTTP 80、VNC 或串口看日志,装崩了也能连进去手动救砖。
需要提醒的是:它只支持 KVM,OpenVZ/LXC 用户需要另找方案(例如 OsMutation)。
五、实战:从旧系统到纯净 Debian 12
第 0 步:记录当前网络信息
重装前先记一下,出问题时能对照:
ip addr show
ip route show第 1 步:安装基础依赖
apt-get update
apt-get install -y curl wget ca-certificates xz-utilsCentOS 系把 apt-get 换成 yum 即可。
第 2 步:下载重装脚本
国外机器:
curl -O https://raw.githubusercontent.com/bin456789/reinstall/main/reinstall.sh国内机器(GitHub 直连不稳时用这个):
curl -O https://cnb.cool/bin456789/reinstall/-/git/raw/main/reinstall.sh第 3 步:准备 SSH 密钥
密码登录迟早被扫,建议直接用密钥。在本地电脑生成(Windows PowerShell、macOS、Linux 通用):
ssh-keygen -t ed25519 -C "vps-root-key" -f ~/.ssh/vps_ed25519查看公钥内容,整行复制:
cat ~/.ssh/vps_ed25519.pub第 4 步:执行重装命令
方式 A:注入公钥(推荐)
bash reinstall.sh debian 12 --username root --ssh-key 'ssh-ed25519 AAAA...你的公钥'方式 B:用密码
bash reinstall.sh debian 12 --username root --password '你的强密码'注意:密码和公钥不能同时指定。脚本还支持几个常用参数:
| 参数 | 作用 |
|---|---|
--ssh-port 2222 | 装完直接改 SSH 端口 |
--web-port 8080 | 指定安装日志的 Web 端口 |
--no-cloud-kernel | 部分机器用云内核会黑屏,加这个换普通内核 |
--hold 1 | 只重启到安装环境,先验证网络连通性 |
第 5 步:记下脚本输出的信息
执行成功后会打印类似内容,Web 地址和端口先复制下来,后面看进度要用:
***** SET NEXTOS DEBIAN 12 *****
IPv4 Address: 172.xx.xx.xx
IPv4 Gateway: 172.xx.xx.xx
SSH Port: 22
WEB: http://你的IP/xxxxxx
Reboot to start the reinstallation.第 6 步:重启,进入自动安装
reboot之后 SSH 会断开,机器进入网络安装阶段。时间取决于机器到官方源的速度,一般 10~20 分钟,快的 5 分钟,慢的可能半小时以上。期间可以打开那个 Web 地址看日志滚动。
第 7 步:登录验收
安装完成后直接用密钥登录:
ssh -i ~/.ssh/vps_ed25519 root@你的IP进去先跑几条命令确认:
cat /etc/os-release # 确认是 Debian 12 (bookworm)
free -h # 看内存占用
df -h / # 看系统盘
ss -tulnp # 看监听的端口,应该只剩 sshd正常情况下内存占用会从几百 MB 降到一两百 MB,监听端口也只剩系统自带的服务。
六、重装之后的善后清单
系统装完只是开始,下面这些建议一次做完。
1. 更新系统
脚本为了速度不会在安装时更新软件包,第一件事是补上:
apt update && apt full-upgrade -y需要的话重启一次:reboot
2. 加 Swap(小内存必做)
512MB~1GB 的机器不配 Swap,装 Docker 或编译时很容易被 OOM Killer 杀进程。
fallocate -l 2G /swapfile || dd if=/dev/zero of=/swapfile bs=1M count=2048
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
# 开机自动挂载
grep -q '/swapfile' /etc/fstab || echo '/swapfile none swap sw 0 0' >> /etc/fstab再把内核参数调得"少用 Swap、优先物理内存":
cat > /etc/sysctl.d/99-swap.conf <<'EOF'
vm.swappiness = 10
vm.vfs_cache_pressure = 50
EOF
sysctl -p /etc/sysctl.d/99-swap.conf3. 设置时区与时间同步
timedatectl set-timezone Asia/Shanghai
timedatectl set-ntp true
date4. 加固 SSH
Debian 12 默认使用 /etc/ssh/sshd_config.d/ 里的片段,注意脚本自己也可能在这里留了文件,改端口或禁用密码时要一起看。
cat > /etc/ssh/sshd_config.d/99-hardening.conf <<'EOF'
PermitRootLogin prohibit-password
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
ClientAliveInterval 300
EOF
sshd -t && systemctl reload ssh改之前先确认新密钥能登录,否则会把自己锁在门外。
5. 防火墙
apt install -y ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp
ufw enable
ufw status以后装了什么服务(比如 443),再 ufw allow 443/tcp。
6. 防爆破
apt install -y fail2ban
systemctl enable --now fail2ban
fail2ban-client status sshd7. 自动安全更新
apt install -y unattended-upgrades
cat > /etc/apt/apt.conf.d/20auto-upgrades <<'EOF'
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
EOF8. 开 BBR(可选,跨国线路提速)
cat > /etc/sysctl.d/99-bbr.conf <<'EOF'
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
EOF
sysctl -p /etc/sysctl.d/99-bbr.conf
sysctl net.ipv4.tcp_congestion_control七、常见问题
Q:登录时报 REMOTE HOST IDENTIFICATION HAS CHANGED
系统重装后主机指纹变了,本地清掉旧记录即可:
ssh-keygen -R 你的IPQ:重启后一直连不上
先看脚本给的 Web 日志地址;连不上说明还在装,或者网络没配好。这种情况只能从商家后台的 VNC 进去看屏幕。
Q:装到一半想反悔
只要还没重启,执行下面这条可以取消:
bash reinstall.sh reset重启之后就来不及了,硬盘已经被覆盖。
Q:内存特别小(128MB 左右)能装吗
Debian 12 的底线大约是 256MB 内存。低于这个值建议先装更轻的系统(如 Alpine),或者换配置。
Q:装完发现 SSH 端口不是 22
如果用了 --ssh-port,新系统的端口就是指定的那个。另外注意 /etc/ssh/sshd_config.d/ 里脚本留下的配置文件优先级更高,改端口时要同时改。
Q:为什么别人说 3 分钟,我用了 30 分钟
3 分钟是极快机房的个例。实际耗时主要取决于「机器到 Debian 官方源」的下载速度,国内机器尤其明显。想快可以把安装源换到国内镜像,或用脚本提供的国内下载地址。
八、参考资料
- 原始讨论帖:bbs.teyir.com/d/16(同步自 isoziyuan.com)
- 重装脚本项目与文档:bin456789/reinstall
- Debian 12 发布说明:debian.org/releases/bookworm
- 阿里云安全组件说明(AliYunDun 等):developer.aliyun.com
- 项目介绍文章:小众软件 - reinstall
本文在原帖思路基础上重新整理,补充了脚本官方参数、安装后的加固步骤与常见问题;命令以官方文档为准,执行前请先备份数据。
- 上一篇: 有些人,见一面少一面
- 下一篇: 没有了
