跳转到内容

更新失败与软件源报错 ​

适用范围 ​

  • 系统 → 更新管理 → 更新(System → Update Management → Updates)里点检测是否有更新失败,或者安装更新的任务窗口里出现红色报错。
  • 在 shell 里运行 apt-get update 或 omv-upgrade,看到 Failed to fetch、NO_PUBKEY、Could not get lock、dpkg was interrupted 一类的信息。

不适用:从 OMV 7 升级到 OMV 8 的大版本升级,见大版本升级:从 OMV 7 到 OMV 8。

开始排查前 ​

更新失败之后,不要盲目重试,也不要中途断电

影响范围:更新会重启相关服务,包括 Samba 等,共享会短暂中断。失败的更新可能让软件包停在「半配置」状态,如果其中包括 OMV 自己的组件,Web 界面也会受影响,见502 Bad Gateway 与 Failed to connect to socket。

前置条件:先读清报错;确认系统盘有空间(df -h /);系统盘有备份最好,见备份系统盘:backup 插件。

回退办法:检查类命令是只读的。刷新软件包索引、清理缓存,不会影响已经安装的软件。已经装上的新版本无法一键退回,需要降级时要谨慎,不在本页范围内。

先了解 OMV 更新的来源:OMV 官方源、Debian 源(含安全更新和内核 backports),装了 omv-extras 之后还有 omv-extras 源,启用 Docker 源时还有 Docker 源。其中 OMV 自己管理的源文件包括 /etc/apt/sources.list.d/openmediavault.list、/etc/apt/mirrors/openmediavault.txt 等。OMV 8.5.12 起,官方源使用 APT 的 mirror list,一个源连不上就自动试下一个。

排查步骤 ​

1. 读出真正的报错 ​

先看界面任务窗口里的完整输出,或者直接在 shell 里重现:

sh
# 在 OMV 的 shell 里执行;只刷新软件包索引,不安装任何东西
apt-get update

也可以在 诊断 → 系统日志(Diagnostics → System Logs)里选「更新管理」,它对应 /var/log/apt/term.log。

2. 按报错对照 ​

报错通常的原因看哪一节
Temporary failure resolving、Could not resolve hostDNS 不通3
Connection timed out、Network is unreachable,或长时间停在连接上网络、IPv6 或代理的问题3
Release file for ... is not valid yet系统时间比实际时间早4
NO_PUBKEY、EXPKEYSIG、signatures couldn't be verified源的签名密钥缺失或过期5
Could not get lock /var/lib/dpkg/lock-frontend,或界面提示 The package database is held by another process别的 apt 或 dpkg 进程在运行6
dpkg was interrupted, you must manually run 'dpkg --configure -a'上一次更新被中断7
404 Not Found、does not have a Release file源地址或发行版名称不对,或第三方源已经失效8
Hash Sum mismatch、File has unexpected size镜像正在同步,或本地索引损坏9
No space left on device系统盘满了见系统盘满了
Aborting, the simulated upgrade would remove the 'openmediavault' package itselfomv-upgrade 的保护性中止10

3. 网络、DNS、IPv6 与代理 ​

sh
# 在 OMV 的 shell 里执行(只读)
ping -c 3 1.1.1.1
ping -c 3 packages.openmediavault.org
resolvectl status
  • 第一个能通、第二个不通:DNS 的问题。在 网络 → 接口(Network → Interfaces)里检查 DNS 服务器,见网络接口:DHCP、静态 IP 与 DNS。
  • 都不通:网络本身有问题,先解决网络。
  • 怀疑 IPv6 不通造成卡住,强制走 IPv4 试一次:
sh
# 在 OMV 的 shell 里执行
apt-get -o Acquire::ForceIPv4=true update

这次能成功,说明 IPv6 通路有问题。修复路由器的 IPv6,或者在接口上关闭 IPv6,见 IPv6。

4. 系统时间不对 ​

Release file ... is not valid yet 说明系统时间比源的发布时间还早。用 date 看时间,在 系统 → 日期和时间(System → Date & Time)里校正,见时间、时区与主机名。主板电池没电、虚拟机没有时间同步,都会造成这个问题。

5. 签名密钥问题 ​

  • 先排除第 4 节的时间问题,时间不对时也会报签名错误。
  • omv-extras 的源和密钥:omv-extras 8.0.1 更换过签名密钥。重写它们的办法是在 系统 → omv-extras(System → omv-extras)里点 apt clean repos,或者在 shell 里运行 omv-aptclean repos。

omv-aptclean repos 会删除含 docker 的源文件

按 omv-extras 脚本的源码,它会重写 omv-extras 和 Docker 的源与密钥,并删除 /etc/apt/sources.list.d/ 里所有内容含 docker 的文件,包括你手工添加的 Docker 官方源。只有勾选了 omv-extras 页面上的 Docker repo,才会重新生成 Docker 源。这是读源码得出的结论,本站没有在实机上验证过,所以运行前先备份:cp -a /etc/apt/sources.list.d /root/sources.list.d.bak。

  • OMV 官方源的密钥问题比较少见,在排除时间之后,按官方安装文档中导入 keyring 的步骤处理,见在 Debian 13 上安装 OMV。不要使用来路不明的密钥。

6. 提示被别的进程占用 ​

OMV 在检查更新、升级前会先检查锁,界面上显示的英文提示有三种:The package database is held by another process.、The storage area for state information for each package resource is held by another process.、The package archive is held by another process.。它们的意思都是:另一个 apt 或 dpkg 进程正在运行。开机后不久,系统自动的更新任务常常正好在运行,等几分钟再试。

sh
# 在 OMV 的 shell 里执行(只读)
lsof /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock /var/lib/apt/lists/lock
ps -eo pid,etime,cmd | grep -E 'apt|dpkg|unattended' | grep -v grep

有进程在运行,就等它结束,不要强行结束它。确认没有任何进程持有锁、仍然报错的情况极少见,这时见第 9 节。

7. dpkg 被中断 ​

sh
# 在 OMV 的 shell 里执行;确认没有 apt、dpkg 进程在运行,并且不会断电
dpkg --audit
dpkg --configure -a
apt-get -f install

dpkg --audit 没有输出表示正常。修复完成后,再从界面或用 omv-upgrade 重新更新一次。

8. 404 或 Release 文件找不到 ​

报错里会写出出问题的源地址,先分清是谁管的:

  • OMV 管理的源:让 OMV 按数据库重写它接管的 apt 配置,包括官方源、内核 backports、安全更新源和代理设置。
sh
# 在 OMV 的 shell 里执行;重写的是 OMV 接管的 apt 配置
omv-salt deploy run apt
  • 你自己或第三方加的源(Docker、Tailscale 等):地址或发行版名称失效了,在对应的文件里修正或移除。装了官方的 openmediavault-apt 插件时,额外的源在 系统 → 更新管理 → 设置 → 其它软件(System → Update Management → Settings → Other Software)里管理。官方文档提醒:不要从 Debian 的 backports、testing、experimental 安装软件包,也不要装 apache,它会导致 openmediavault 包被卸载。
  • 升级大版本之后仍然写着旧的发行版代号(例如 sandworm):见大版本升级:从 OMV 7 到 OMV 8。

9. 索引损坏、校验和不一致 ​

用 omv-firstaid 里的 Refresh APT package lists and clean caches(OMV 8.3.0 起提供)。它会执行 apt clean,删除 /var/lib/apt/lists/ 下的软件包索引,删除 /var/lib/apt/lists/lock 和 /var/cache/apt/archives/lock 两个锁文件,然后重新 apt-get update。只涉及缓存和索引,不动已经安装的软件。因为它会直接删除锁文件,运行前先确认没有别的 apt、dpkg 进程在运行(第 6 节的检查命令)。装了 omv-extras 的话,omv-aptclean 也能清理,并且会重建插件列表。

10. omv-upgrade 保护性中止 ​

omv-upgrade 会先模拟一次 dist-upgrade,如果结果会把 openmediavault 包本身移除,就中止。这通常说明有第三方源或软件包与 OMV 的依赖冲突。先只读地看看会移除什么:

sh
# 在 OMV 的 shell 里执行(只读,不会修改系统)
apt-get --simulate dist-upgrade | grep '^Remv'

找出冲突的软件包和来源,处理掉冲突的源或包,不要强行忽略。拿不准就带着输出去求助。

确认恢复 ​

  1. apt-get update 没有报错,系统 → 更新管理 → 更新 里点检测是否有更新能正常刷新。
  2. 安装更新成功,dpkg --audit 没有输出,systemctl --failed 没有失败的单元。
  3. 更新了内核或系统组件时,按提示重启,再确认 Web 界面、共享和容器都正常。
  4. 更新后界面菜单不对,见插件装完界面不对。

仍未解决 ​

附上:apt-get update 的完整输出(先去掉 URL 里的账号密码)、/etc/apt/sources.list 以及 /etc/apt/sources.list.d/ 下所有文件的内容、df -h /、date、dpkg -l openmediavault 的输出。

注意:omv-sysinfo 只会输出 sources.list.d 里的 .list 文件,不包含新格式的 .sources 文件(omv-extras 使用的就是这种)。反馈时需要另外附上:

sh
# 在 OMV 的 shell 里执行
cat /etc/apt/sources.list.d/*.sources

读如何有效求助。

参考资料 ​

OpenMediaVault 非官方中文使用指南,与 openmediavault 项目及其开发者无隶属关系。