抽屉里有台用了五六年的旧笔记本,i5-8250U、16G 内存,自从换了新电脑就一直在吃灰。我早就想在家里放一台常开的小服务器,跑点自己用的服务,但买 NAS 或者小主机都得花钱,也不确定自己能折腾多久,干脆先拿它练手。
笔记本当服务器其实有几个天然的好处:
- 功耗低,我这台空载实测十瓦出头,一个月的电费可以忽略;
- 自带电池,相当于一个迷你 UPS,短时间停电不会直接断电;
- 自带屏幕和键盘,网络配置搞砸了,打开盖子就能在本地救回来。
系统选了 Proxmox VE(下面简称 PVE),目前最新的是 8.2,底层是 Debian 12。直接装个 Debian 当然也能用,但我还不确定以后要跑哪些东西。有了 PVE,想试新东西就开个虚拟机或者容器,玩坏了删掉重来,宿主机本身始终保持干净。
安装前的准备
先进 BIOS 做几件事:打开 CPU 虚拟化(VT-x),顺手把 VT-d 也打开,以后想做设备直通会用到。Secure Boot 我关掉了,PVE 从 8.1 开始其实支持 Secure Boot,但我不想在这上面多花时间。
然后是网络。PVE 的虚拟机和容器都是通过网桥接到物理网卡上的,无线网卡基本没法拿来做网桥,所以一定要有有线网口。我这台正好带一个 RJ45 口,没有的话就得配个 USB 网卡。
安装本身没什么好说的:下载官方 ISO,在另一台 Linux 上用 dd 写进 U 盘,引导起来一路下一步。磁盘用默认的 ext4(会顺带建好 LVM-thin 存储),IP 设成固定的 192.168.10.5,网关 192.168.10.1。装完在别的电脑浏览器里打开 https://192.168.10.5:8006,用 root 登录就能看到管理界面。
装完先改软件源
没有订阅的话,默认启用的 enterprise 源在 apt update 时会报 401。把它注释掉,换成免费的 no-subscription 源:
# 注释掉企业源(ceph.list 里如果也是 enterprise 源,一样处理)
sed -i 's/^deb/# deb/' /etc/apt/sources.list.d/pve-enterprise.list
sed -i 's/^deb/# deb/' /etc/apt/sources.list.d/ceph.list
# 加上 no-subscription 源
echo "deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription" \
> /etc/apt/sources.list.d/pve-no-subscription.list
# PVE 升级要用 full-upgrade,不要只用 apt upgrade
apt update && apt full-upgrade
登录时那个“没有有效订阅”的弹窗,网上有改前端 JS 去掉它的办法,我没弄:每次升级相关的包都会被覆盖回来,点一下确定也不费事。
笔记本特有的几个设置
合盖不休眠。 服务器当然要合上盖子塞进柜子里,但默认合盖会触发挂起。改 logind 的配置:
# /etc/systemd/logind.conf,[Login] 段下面这几行去掉注释并改成 ignore
[Login]
HandleLidSwitch=ignore
HandleLidSwitchExternalPower=ignore
HandleLidSwitchDocked=ignore
改完执行 systemctl restart systemd-logind 生效,合上盖子再从别的机器 ping 一下,确认没掉线。
让屏幕自己熄灭。 PVE 装完是纯文本控制台,屏幕一直亮着,费电也伤屏。在内核参数里加上 consoleblank=60,一分钟没操作就熄屏:编辑 /etc/default/grub,把 GRUB_CMDLINE_LINUX_DEFAULT 改成 "quiet consoleblank=60",然后执行 update-grub 并重启。如果安装时选了 ZFS 并且是 UEFI 启动,PVE 用的是 systemd-boot,要改的就是 /etc/kernel/cmdline,改完执行 proxmox-boot-tool refresh。
电池。 锂电池长期满电对寿命不好。我这台的 BIOS 里有充电阈值的选项,设成了充到 80% 就停。没有这个选项的机器,至少隔段时间看看电池有没有鼓包。
网络配置
PVE 的网络配置在 /etc/network/interfaces,安装程序会自动建一个叫 vmbr0 的网桥,把物理网卡挂上去,宿主机的 IP 也配在网桥上:
auto lo
iface lo inet loopback
iface enp2s0 inet manual
auto vmbr0
iface vmbr0 inet static
address 192.168.10.5/24
gateway 192.168.10.1
bridge-ports enp2s0
bridge-stp off
bridge-fd 0
以后建的虚拟机和容器默认都挂在 vmbr0 上,跟家里其他设备在同一个网段。
踩过的坑
- 装完网页打不开。 第一次装的时候我顺手插着一个 USB 网卡,安装程序把管理网络绑到了它上面,而网线插的是板载网口。解决办法是在本地控制台改 interfaces 里的
bridge-ports,然后执行ifreload -a(PVE 8 用的是 ifupdown2,改完不用重启)。 - 网卡名可能会变。 网上有不少人遇到过升级内核或者加了 PCIe 设备之后网卡名变化,网桥找不到网卡,整台机器失联。我后来用 systemd 的 .link 文件按 MAC 地址把网卡名固定了下来。动网络配置之前,记得确认自己能在本地控制台登录,给自己留好后路。
- 散热。 合盖之后键盘面的进风变差,跑了几天发现合盖时 CPU 温度明显高一截。最后把它竖着放进了一个文件架里,盖子留一条缝,温度就下来了。
小结
跑了两周,目前开着两个测试用的容器,整机功耗在十瓦到十五瓦之间,风扇几乎不转,比我预想的安静。对于刚开始折腾家庭服务器来说,一台旧笔记本加 PVE 是成本很低的入门方式,不满意了随时可以换硬件,虚拟机和容器都能备份后迁走。
接下来要考虑的是:服务到底放在 LXC 容器里还是虚拟机里。这个等用一段时间再单独写一篇。