收起左侧

解决飞牛FNOS“数据库读写错误”及服务无法启动问题

0
回复
36
查看
[ 复制链接 ]

4

主题

50

回帖

0

牛值

fnOS系统内测组

fnOS1.0上线纪念勋章飞牛百度网盘玩家

1. 问题现象

在使用飞牛 FNOS 时,如果你遇到以下情况:

  • 在 Web 界面挂载硬盘时提示 “数据库读写错误”“数据库读写失败”
  • 查看系统服务状态时,postgresql@15-main 显示 failed
  • trim_license 等系统服务一直处于 activating(启动中)状态,无法正常工作。
    根本原因:
    PostgreSQL 数据库服务无法启动。在开机过程中,由于系统 DNS 解析还没准备好,PostgreSQL 尝试监听 localhost 失败,导致服务崩溃退出。由于数据库没起来,所有依赖它的系统服务(如 trim_license、accountsrv 等)也都随之崩溃。

2. 准备工作

你需要通过 SSH 终端连接到 FNOS 后台。

  1. 打开 SSH 工具(如 PuTTY、Xshell、Terminal)。

  2. 登录你的 NAS:

    ssh admin@你的NAS_IP
    
  3. 切换到超级管理员权限:

    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。

  1. 编辑配置文件

    nano /etc/postgresql/15/main/postgresql.conf
    
  2. 查找监听地址
    按下 Ctrl + W,输入 listen_addresses 并回车搜索。

  3. 修改配置
    找到这一行(可能被 # 注释掉了):

    #listen_addresses = 'localhost'
    

    修改为(去掉前面的 #,并将单引号内容改为 *):

    listen_addresses = '*'
    

    (注意:* 表示监听本机所有 IP,这样可以绕过域名解析环节。)

  4. 保存退出

    • Ctrl + O 保存(屏幕下方会提示写入文件),按 Enter 确认。
    • Ctrl + X 退出编辑器。

第四步:启动数据库并验证

配置修改好后,再次尝试启动:

pg_ctlcluster 15 main start

检查状态,确认是否成功:

pg_lsclusters

此时 Status 应该显示为 online

第五步:设置开机自启

为了防止下次重启失效,建议开启 PostgreSQL 的开机自启:

systemctl enable postgresql
systemctl enable postgresql@15-main

第六步:重启系统验证(非常重要!)

修改配置后,必须通过重启来验证在开机瞬间是否能自动启动。

  1. 重启 NAS

    reboot
    
  2. 重连 SSH 并检查
    重启完成后,重新 SSH 登录并 sudo -i,再次输入:

    pg_lsclusters
    systemctl is-active postgresql@15-main
    

    成功标准: pg_lsclusters 显示 onlineis-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. 最终验证

  1. 打开浏览器,登录 FNOS Web 管理后台。
  2. 进入 存储管理 / 磁盘管理
  3. 找到之前报错的硬盘,点击 挂载
    结果: 此时应该能正常挂载,不再提示“数据库读写错误”。
收藏
送赞
分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则