服务器重启完「活着」,网站却全打不开——查下来是一行 fstab 写错了盘名
昨天一台宝塔的论坛机重启做了个维护,然后出了个特别典型的故障:ping 得通、SSH 22 也通,但 80/443 一律连不上,面板也进不去。第一反应都以为是网络或者被打了,其实都不是。先定性:网络层活着,是服务层没起来。
1. ping 通 → 逐个端口测 → 只有 22 活着 → 说明机器没死,是后面的服务没拉起来;
2. df -h 一看,数据盘不见了;lsblk -f 里数据盘是 /dev/sda1,但没有挂载点;
3. dmesg | grep -i ext4 掉出真正的错:
EXT4-fs (sdb1): VFS: Can't find ext4 filesystem
根因就一行。 翻 /etc/fstab:
/dev/sdb1 /www ext4 defaults 0 0
问题是 sdb1 其实是系统盘上那个 1M 的空分区(BIOS boot,根本没有文件系统),真正的数据盘是 sda1。装系统的时候系统盘是 sda,这次重启后内核把系统盘和数据盘的设备名互换了,fstab 里写死的那个设备名就指丢了 → /www 挂不上 → 装在上面的 nginx / MySQL / PHP / 面板全部跟着起不来。
有点意思的是:根分区 / 用的是 UUID,所以毫发无损。同一台机器,一个写 UUID、一个写设备名,出事的只有后者。
修复:
1. 先只读把数据盘挂到一个临时目录,核对网站文件 / MySQL 库都在、数据完好;
2. cp -a /etc/fstab /etc/fstab.bak 先备份;
3. blkid /dev/sda1 拿到 UUID,把 /www 那行改成:
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /www ext4 defaults 0 0
4. mount /www 挂回,重启 nginx / MySQL / PHP → 站点恢复。全程数据零丢失。
一句话自查:
grep -n "/dev/sd" /etc/fstab
有输出,就值得把设备名改成 UUID——设备名会随内核枚举顺序变,UUID 不会。
小提醒:systemctl is-active mysql 显示 active 也不一定真起来了(盘没挂时它可能"装着活着"),判服务到底起没起,看进程 + socket + 端口三样,别只信 is-active。
页:
[1]