1. 问题现象
在使用飞牛 FNOS 时,如果你遇到以下情况:
- 在 Web 界面挂载硬盘时提示 “数据库读写错误” 或 “数据库读写失败”。
- 查看系统服务状态时,
postgresql@15-main 显示 failed。
trim_license 等系统服务一直处于 activating(启动中)状态,无法正常工作。
根本原因:
PostgreSQL 数据库服务无法启动。在开机过程中,由于系统 DNS 解析还没准备好,PostgreSQL 尝试监听 localhost 失败,导致服务崩溃退出。由于数据库没起来,所有依赖它的系统服务(如 trim_license、accountsrv 等)也都随之崩溃。
2. 准备工作
你需要通过 SSH 终端连接到 FNOS 后台。
-
打开 SSH 工具(如 PuTTY、Xshell、Terminal)。
-
登录你的 NAS:
ssh admin@你的NAS_IP
-
切换到超级管理员权限:
sudo -i
(输入密码时不会显示,输完回车即可,提示符变为 root@fnOS 即成功)
3. 修复步骤
第一步:确认数据库状态
输入以下命令查看 PostgreSQL 集群状态:
pg_lsclusters
正常状态应该是: Status 显示为 online。
故障状态通常显示: Status 显示为 down。
如果显示 down,继续往下看。
第二步:尝试启动并查看报错(确认问题)
输入以下命令尝试手动启动数据库:
pg_ctlcluster 15 main start
如果直接报错或者启动后马上又停了,请查看日志:
tail -n 30 /var/log/postgresql/postgresql-15-main.log
关键报错信息:
如果你在日志末尾看到类似下面的信息:
FATAL: could not create any TCP/IP sockets
could not translate host name "localhost", service "5432" to address: Temporary failure in name resolution
说明这就是“DNS 解析导致启动失败”的问题,请继续进行第三步的修复。
第三步:修改 PostgreSQL 配置(核心修复)
我们需要修改配置,让数据库不再依赖解析 localhost 这个域名,而是直接监听所有 IP。
-
编辑配置文件:
nano /etc/postgresql/15/main/postgresql.conf
-
查找监听地址:
按下 Ctrl + W,输入 listen_addresses 并回车搜索。
-
修改配置:
找到这一行(可能被 # 注释掉了):
#listen_addresses = 'localhost'
修改为(去掉前面的 #,并将单引号内容改为 *):
listen_addresses = '*'
(注意:* 表示监听本机所有 IP,这样可以绕过域名解析环节。)
-
保存退出:
- 按
Ctrl + O 保存(屏幕下方会提示写入文件),按 Enter 确认。
- 按
Ctrl + X 退出编辑器。
第四步:启动数据库并验证
配置修改好后,再次尝试启动:
pg_ctlcluster 15 main start
检查状态,确认是否成功:
pg_lsclusters
此时 Status 应该显示为 online。
第五步:设置开机自启
为了防止下次重启失效,建议开启 PostgreSQL 的开机自启:
systemctl enable postgresql
systemctl enable postgresql@15-main
第六步:重启系统验证(非常重要!)
修改配置后,必须通过重启来验证在开机瞬间是否能自动启动。
-
重启 NAS:
reboot
-
重连 SSH 并检查:
重启完成后,重新 SSH 登录并 sudo -i,再次输入:
pg_lsclusters
systemctl is-active postgresql@15-main
成功标准: pg_lsclusters 显示 online,is-active 显示 active。
第七步:恢复系统服务状态
数据库正常后,之前崩溃的系统服务(trim_license 等)还需要重启一下才能重新连上数据库。
输入以下命令(复制整段粘贴即可):
systemctl restart trim_license accountsrv ai_manager cloud_storage_dav trim_sac trim_app_center
注意:如果提示 Failed to restart trim.service: Unit trim.service not found.,请忽略它,这是正常的,不影响其他服务。
检查服务状态:
systemctl is-active trim_license accountsrv ai_manager cloud_storage_dav trim_sac trim_app_center
大部分服务应显示为 active。
4. 最终验证
- 打开浏览器,登录 FNOS Web 管理后台。
- 进入 存储管理 / 磁盘管理。
- 找到之前报错的硬盘,点击 挂载。
结果: 此时应该能正常挂载,不再提示“数据库读写错误”。